1.电路分析spa
首先经过M74HC573MIR锁存器锁存数据,首先经过Y7C使能端输出段码,Y6C使能端输出位码,这里的电阻起到限流的做用。code
2.数码管分析blog
共阳(阴)数码管:每一个数码管都是有八个二极管构成的,因此二极管的阳(阴)极是共用的并且连高(低)电平就共阳(阴)数码管。it
段码显示:段码显示最高位从dp(h)->g->f->e->d->c->b->a。共阴数码管点亮的二极管位置为1,构成的二进制数转换成十六进制数。class
1 #include "reg52.h"
2
3 typedef unsigned int u16; 4 typedef unsigned char u8; 5
6 /*u8 code smgduan[18]= 7 {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 8 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};*/ //共阳
9
10 u8 code smgduan[18]=
11 {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 12 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 13
14 void delay(u16 i) 15 { 16 while(i--); 17 while(i--); 18 } 19
20 void HC138Init(u8 i) 21 { 22 switch(i) 23 { 24 case 4: 25 P2 = (P2 & 0x1f) | 0x80; 26 break; 27
28 case 5: 29 P2 = (P2 & 0x1f) | 0xa0; 30 break; 31
32 case 6: 33 P2= (P2 & 0x1f) | 0xc0; 34 break; 35
36 case 7: 37 P2 = (P2 & 0x1f) | 0xe0; 38
39 } 40 } 41
42 void Display(u8 dat,unsigned pos) 43 { 44 HC138Init(6); // 数码管的位置
45 P0 = 0x01 << pos; 46 HC138Init(7); // 数码管的内容
47 P0 = dat; 48 } 49
50 void DigDisplay() 51 { 52 u8 i,j; 53 for(i=0;i<8;i++) 54 { 55 for(j=0;j<10;j++) 56 { 57 Display(smgduan[j],i); 58 delay(60000); 59 } 60 } 61 for(j=0;j<16;j++) 62 { 63 HC138Init(6); 64 P0 = 0xff; 65 HC138Init(7); 66 P0 = smgduan[j]; 67 delay(60000); 68 } 69
70 } 71
72 void main() 73 { 74 while(1) 75 { 76 DigDisplay(); 77 }
78 }