共阴数码管静态显示
数码管电路原理图
硬件实现原理
1.电路分析
首先通过M74HC573MIR锁存器锁存数据,首先通过Y7C使能端输出段码,Y6C使能端输出位码,这里的电阻起到限流的作用。
2.数码管分析
共阳(阴)数码管:每个数码管都是有八个二极管构成的,所以二极管的阳(阴)极是共用的而且连高(低)电平就共阳(阴)数码管。
段码显示:段码显示最高位从dp(h)->g->f->e->d->c->b->a。共阴数码管点亮的二极管位置为1,构成的二进制数转换成十六进制数。
代码实现
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 }
每一天的分享时刻