03_单片机_动态数码管
1. 如下是4 Digt数码管,外观和内部线路图,详情参考零件表:https://www.mouser.cn/ProductDetail/Lite-On/LTC-5723HR?qs=WxFF5lh7QM2ytJdX1EhJKQ%3D%3D


2. 如下是单片机连接方式(J1:Pin1~Pin8 对应 P1:0~7; J6:Pin1~Pin8 对应 P0:7~0)
2.1. 参考1种的线图,J6的Pin置于High(高电平),且J1的Pin置于Low(低电平),数码管中的segment才会点亮


2.2. 数码管显示0~F,根据上述创建数组
1 unsigned char dat[16] = {0x3f, 0x06, 0x5b, 0x4f, 2 0x66, 0x6d, 0x7d, 0x27, 3 0x7f, 0x6f, 0x77, 0x7c, 4 0x39, 0x5e, 0x79, 0x71};
2.3. 8个数码管选择数组
1 unsigned char segment[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
3. 74HC245 工作原理
单片机等微控制器的引脚拉电流能力一般在20mA左右,想要直接点亮数码管、显示屏等大功率显示器件则明显不够,这时,我们用一颗74 HC245芯片来增加单片机引脚的驱动能力

根据线路图,DIR接Vcc,/OE接GND,表示 ”A data to B data“
4. 编写代码,使数码管显示 ”1~8“
4.1. 原始方法
1 #include <REG51.H> 2 3 4 // 延时函数 5 void delay(void) 6 { 7 unsigned char i, j, k; 8 for(i=10; i>0; i--) 9 for(j=10; j>0; j--); 10 } 11 12 unsigned char dat[16] = {0x3f, 0x06, 0x5b, 0x4f, 13 0x66, 0x6d, 0x7d, 0x27, 14 0x7f, 0x6f, 0x77, 0x7c, 15 0x39, 0x5e, 0x79, 0x71}; 16 17 unsigned char segment[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; 18 19 void main(void) 20 { 21 while(1) 22 { 23 24 P0 = dat[1]; 25 P1 = segment[0]; 26 delay(); 27 28 P0 = dat[2]; 29 P1 = segment[1]; 30 delay(); 31 32 P0 = dat[3]; 33 P1 = segment[2]; 34 delay(); 35 36 P0 = dat[4]; 37 P1 = segment[3]; 38 delay(); 39 40 P0 = dat[5]; 41 P1 = segment[4]; 42 delay(); 43 44 P0 = dat[6]; 45 P1 = segment[5]; 46 delay(); 47 48 P0 = dat[7]; 49 P1 = segment[6]; 50 delay(); 51 52 P0 = dat[8]; 53 P1 = segment[7]; 54 delay(); 55 } 56 }
4.2. 循环结构
1 #include <REG51.H> 2 3 4 // 延时函数 5 void delay(void) 6 { 7 unsigned char i, j; 8 for(i=10; i>0; i--) 9 for(j=10; j>0; j--); 10 } 11 12 unsigned char dat[16] = {0x3f, 0x06, 0x5b, 0x4f, 13 0x66, 0x6d, 0x7d, 0x27, 14 0x7f, 0x6f, 0x77, 0x7c, 15 0x39, 0x5e, 0x79, 0x71}; 16 17 unsigned char segment[8] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; 18 19 void main(void) 20 { 21 unsigned char i; 22 23 while(1) 24 { 25 for(i=0; i<8; i++) 26 { 27 P0 = dat[i+1]; 28 P1 = segment[i]; 29 delay(); 30 } 31 } 32 }
浙公网安备 33010602011771号