共阴数码管静态显示

数码管电路原理图

硬件实现原理

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 }
原文地址:https://www.cnblogs.com/kevinkala/p/12913101.html