完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
STM32 – 数码管显示
数码管,也称作辉光管,是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成的阳极和多个阴极。大部分数码管阴极的形状为数字。管中充以低压气体,通常大部分为氖加上一些汞和/或氩。给某一个阴极充电,数码管就会发出颜色光,视乎管内的气体而定,一般都是橙色或绿色。 分类 数码管也称LED数码管,不同行业人士对数码管的称呼不一样,其实都是同样的产品。 按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,当某一字段的阳极为低电平时,相应字段就不亮。 1.共阳数码管 共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。 2.共阴数码管 对于共阴极数码管来说,当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极数码管的阳极连接在一起,公共阳极接+5V,当某个发光二极管的阴极接低电平时,该发光二极管被点亮,相应的段被显示 数码管码表 unsigned char code smgduan[17] ={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};//共阳数码管 unsigned char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};共阴数码管 共阴数码管 静态数码管硬件电路设计 实物 软件部分 /********************************************************************** * 文件名 :smg.c * 描述 :smg 应用函数库 * 硬件连接:----------------- * | PA0 - A | * | PA1 - B | * | PA2 - C | * | PA3 - D | * | PA4 - E | * | PA5 - F | * | PA6 - G | * | PA7 - DP | * ----------------- *********************************************************************/ #include “smg.h” #include “delay.h” //共阳数码管断码表 u8 const smg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; /* * 函数名:SMG_GPIO_Config * 描述 :配置数码管用到的I/O口 * 输入 :无 * 输出 :无 */ void SMG_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7); // turn off all led } /* * 函数名:SMG_Display * 描述 :驱动数码管显示0-F * 输入 :无 * 输出 :无 */ void SMG_Display(void) { u8 i; for(i=0;i《16;i++) { GPIO_Write(GPIOA,smg_data[i]); delay_ms(1000); } } void Display_N(u8 N) { GPIO_Write(GPIOA,smg_data[N]); } smg.h #ifndef __SMG_H #define __SMG_H #include “stm32f10x.h” void SMG_GPIO_Config(void); void SMG_Display(void); void Display_N(u8 N); #endif /* __SMG_H */ 数码管案例(基于51单片机 四位数码管模块(74HC595)) 14脚:DS(SER),串行数据输入引脚 13脚:OE, 输出使能控制脚,它是低电才使能输出,所以接GND 12脚:RCK,存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存带存储寄存器。 11脚:SCK,移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移,并接受新的bit(从SER输入)。 10脚:MR,低电平时,清空移位寄存器中已有的bit数据,一般不用,接 高电平即可。 9 脚 :串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是从这里出去的。用于595的级联。 Qx:并行输出引脚 注意: 当芯片资料上面的引脚说有横线时,属于低电平工作。否则高电平工作; 共阳数码管如果要点亮,对应的引脚需要给1 共阴数码管如果要点亮,对应的引脚需要给0 #include“reg51.h” unsigned char code LED_0F[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80, 0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf};//共阳数码管码表 unsigned char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值 //----------------------------------------------------------------------------- // 函数原形定义 #define uchar unsigned char #define uint unsigned int //能够使用unsigned char //unsigned int 尽量使用最原始的变量类型名字 void main (void); // 主函数 void LED4_Display (void); // LED数码管显示 void LED_OUT(uchar X); // LED数码管单字节串行移位函数 unsigned char code LED_0F[]; // LED字模表 /* 端口引脚定义*/ ***it DIO = P1^0; //串行数据输入 ***it RCLK = P1^1; //时钟脉冲信号――上升沿有效 ***it SCLK = P1^2; //打入信号――――上升沿有效 //----------------------------------------------------------------------------- // 全局变量 unsigned char LED[8]; //用于LED的8位显示缓存 //***************************************************************************** // 主程序 // void main (void) { LED[0]=9; LED[1]=0; LED[2]=8; LED[3]=5; while(1) { LED4_Display (); } } // LED数码管显示函数 void LED4_Display (void) { unsigned char code *led_table; // 查表指针 unsigned char i; //显示第1位 led_table = LED_0F + LED[0]; i = *led_table; LED_OUT(i); LED_OUT(0x01); //0x01显示在第一位 RCLK = 0; RCLK = 1; //显示第2位 led_table = LED_0F + LED[1]; i = *led_table; LED_OUT(i); LED_OUT(0x02); //0x02显示在第2位 RCLK = 0; RCLK = 1; //显示第3位 led_table = LED_0F + LED[2]; i = *led_table; LED_OUT(i); LED_OUT(0x04); //0x04显示在第3位 RCLK = 0; RCLK = 1; //显示第4位 led_table = LED_0F + LED[3]; i = *led_table; LED_OUT(i); LED_OUT(0x08); //0x08显示在第4位 RCLK = 0; RCLK = 1; } // LED数码管单字节串行移位函数 void LED_OUT(unsigned char number) { unsigned char i; for(i=8;i》=1;i--) { if (number & 0x80) { DIO=1; } else { DIO=0; } number《《=1; SCLK = 0; SCLK = 1; } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1090 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1107 浏览 1 评论
545 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
412 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
990 浏览 2 评论
1590浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
261浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
273浏览 3评论
243浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
237浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 02:32 , Processed in 0.723098 second(s), Total 48, Slave 42 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号