02_单片机_静态数码管
今天学习了静态数码管,数码管接线图(共阳式接法),单片机I/O端口Port0 连接 J8

P0.0 连接 J8.8;P0.1 连接 J8.7;P0.2 连接 J8.6;P0.3 连接 J8.5;P0.4 连接 J8.4;P0.5 连接 J8.3;P0.6 连接 J8.2;P0.7 连接 J8.1;

1. 需要数码管显示0~F,确定对应段码的关系。如下图,是数码管对应的段码

2. 需要数码管显示0~F

3. 循环显示”0~F“
3.1. 原始方法实现:
1 #include <REG51.H> 2 3 /********************************************** 4 * 数码管显示0~F 对应的段码 5 * 0: 0xc0; 1: 0xf9; 2: 0xa4; 3: 0xb0; 4: 0x99 6 * 5: 0x92; 6: 0x82; 7: 0xd8; 8: 0x80; 9: 0x90 7 * A: 0x88; b: 0x83; C: 0xc6; d: 0xa1; E: 0x86 8 * F: 0x8e 9 **********************************************/ 10 11 // 延时函数 12 void delay(void) 13 { 14 unsigned char i, j, k; 15 for(i=50; i>0; i--) 16 for(j=50; j>0; j--) 17 for(k=30; k>0; k--); 18 } 19 20 void main(void) 21 { 22 P0 = 0xc0; // 0 23 delay(); 24 P0 = 0xf9; // 1 25 delay(); 26 P0 = 0xa4; // 2 27 delay(); 28 P0 = 0xb0; // 3 29 delay(); 30 P0 = 0x99; // 4 31 delay(); 32 P0 = 0x92; // 5 33 delay(); 34 P0 = 0x82; // 6 35 delay(); 36 P0 = 0xd8; // 7 37 delay(); 38 P0 = 0x80; // 8 39 delay(); 40 P0 = 0x90; // 9 41 delay(); 42 P0 = 0x88; // A 43 delay(); 44 P0 = 0x83; // b 45 delay(); 46 P0 = 0xc6; // C 47 delay(); 48 P0 = 0xa1; // d 49 delay(); 50 P0 = 0x86; // E 51 delay(); 52 P0 = 0x8e; // F 53 delay(); 54 }
3.2. 使用数组 & 循环结构
1 #include <REG51.H> 2 3 /********************************************** 4 * 数码管显示0~F 对应的段码 5 * 0: 0xc0; 1: 0xf9; 2: 0xa4; 3: 0xb0; 4: 0x99 6 * 5: 0x92; 6: 0x82; 7: 0xd8; 8: 0x80; 9: 0x90 7 * A: 0x88; b: 0x83; C: 0xc6; d: 0xa1; E: 0x86 8 * F: 0x8e 9 **********************************************/ 10 11 // 延时函数 12 void delay(void) 13 { 14 unsigned char i, j, k; 15 for(i=50; i>0; i--) 16 for(j=50; j>0; j--) 17 for(k=30; k>0; k--); 18 } 19 20 void main(void) 21 { 22 unsigned char i; 23 // 数组表示数码管状态 24 unsigned char dat[16] = { 0xc0, 0xf9, 0xa4, 0xb0, 25 0x99, 0x92, 0x82, 0xd8, 26 0x80, 0x90, 0x88, 0x83, 27 0xc6, 0xa1, 0x86, 0x8e }; 28 while(1) 29 { 30 for(i=0; i<16; i++) 31 { 32 P0 = dat[i]; 33 delay(); 34 } 35 } 36 }
4. 0~F,循环显示偶数
1 #include <REG51.H> 2 3 /********************************************** 4 * 数码管显示0~F 对应的段码 5 * 0: 0xc0; 1: 0xf9; 2: 0xa4; 3: 0xb0; 4: 0x99 6 * 5: 0x92; 6: 0x82; 7: 0xd8; 8: 0x80; 9: 0x90 7 * A: 0x88; b: 0x83; C: 0xc6; d: 0xa1; E: 0x86 8 * F: 0x8e 9 **********************************************/ 10 11 // 延时函数 12 void delay(void) 13 { 14 unsigned char i, j, k; 15 for(i=50; i>0; i--) 16 for(j=50; j>0; j--) 17 for(k=30; k>0; k--); 18 } 19 20 void main(void) 21 { 22 unsigned char i; 23 // 数组表示数码管状态 24 unsigned char dat[16] = { 0xc0, 0xf9, 0xa4, 0xb0, 25 0x99, 0x92, 0x82, 0xd8, 26 0x80, 0x90, 0x88, 0x83, 27 0xc6, 0xa1, 0x86, 0x8e }; 28 while(1) 29 { 30 for(i=0; i<16; i++) 31 { 32 if(i%2 == 0) 33 { 34 P0 = dat[i]; 35 delay(); 36 } 37 } 38 } 39 }
暂时先学到这儿,若有不对的地方,请指正,谢谢~
浙公网安备 33010602011771号