1 #include '8051.h'
2 typedef unsigned char u8;
3 typedef unsigned int u16;
4 u8 smgduan[]= {
5 /*0 1 2 3 4 5 6 7 */
6 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
7 /*8 9 A B C D E F */
8 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
9
10 // P0口为数码管的位选的8位输入引脚
11 // P0 = 0x00;
12
13
14 void Delayms(u16 ms);
15 void shumaguan(u8 n);
16 void DigDisplay();
17
18 void main()
19 {
20 while (1)
21 {
22 /*
23 * 不推荐此做法
24 * 此做法占用内存高
25 */
26 if (!K1)
27 {
28 // 软件延时消除抖动
29 Delayms(10);
30 if (!K1)
31 {
32 LED_1 = !LED_1;
33 }
34 // 确认按键已经按下
35 while(!K1);
36 }
37 if (!K2)
38 {
39 // 软件延时消除抖动
40 Delayms(10);
41 if (!K2)
42 {
43 LED_2 = !LED_2;
44 }
45 while(!K2);
46 }
47 if (!K3)
48 {
49 // 软件延时消除抖动
50 Delayms(10);
51 if (!K3)
52 {
53 LED_3 = !LED_3;
54 }
55 while(!K3);
56 }
57 if (!K4)
58 {
59 // 软件延时消除抖动
60 Delayms(10);
61 if (!K4)
62 {
63 LED_4 = !LED_4;
64 }
65 while(!K4);
66 }
67 }
68 }
69
70
71 void Delayms(u16 ms)
72 {
73 unsigned int i, j;
74 for(i = ms; i > 0; i--)
75 for(j = 110; j > 0; j--);
76 return;
77 }
78
79 void shumaguan(u8 n)
80 {
81 switch(n)
82 {
83 case 0:
84 LSA = 0;LSB = 0;LSC = 0;break;
85 case 1:
86 LSA = 1;LSB = 0;LSC = 0;break;
87 case 2:
88 LSA = 0;LSB = 1;LSC = 0;break;
89 case 3:
90 LSA = 1;LSB = 1;LSC = 0;break;
91 case 4:
92 LSA = 0;LSB = 0;LSC = 1;break;
93 case 5:
94 LSA = 1;LSB = 0;LSC = 1;break;
95 case 6:
96 LSA = 0;LSB = 1;LSC = 1;break;
97 case 7:
98 LSA = 1;LSB = 1;LSC = 1;break;
99 }
100 }
101
102 void DigDisplay()
103 {
104 u8 i1 = 0;
105 u8 i2 = 0;
106 u8 i3 = 0;
107 u8 i4 = 0;
108 u8 i5 = 0;
109 u8 i6 = 0;
110 u8 i7 = 0;
111 u8 i8 = 0;
112
113
114
115
116 for (i8 = 0; i8 < 10; i8++)
117 for (i7 = 0; i7 < 10; i7++)
118 for (i6 = 0; i6 < 10; i7++)
119 for (i5 = 0; i5 < 10; i5++)
120 for (i4 = 0; i4 < 10; i4++)
121 for (i3 = 0; i3 < 10; i3++)
122 for (i2 = 0; i2 < 10; i2++)
123 for (i1 = 0; i1 < 10; i1++)
124 {
125 u16 cnt = 10;
126 while (cnt--)
127 {
128 shumaguan(0); //选中第一个数码管
129 P0 = smgduan[i1]; //给他送一个数字
130 Delayms(1); //稍微延时一下下
131 shumaguan(1); //然后切换到第二个数码管。。。如此进行一直到最后一个数码管。。。最后再改变送入数码管的数值。。。再来一遍
132 P0 = smgduan[i2];
133 Delayms(1);
134 shumaguan(2);
135 P0 = smgduan[i3];
136 Delayms(1);
137 shumaguan(3);
138 P0 = smgduan[i4];
139 Delayms(1);
140 shumaguan(4);
141 P0 = smgduan[i5];
142 Delayms(1);
143 shumaguan(5);
144 P0 = smgduan[i6];
145 Delayms(1);
146 shumaguan(6);
上一篇:单片机-4x4个矩阵按键控制数码管显示数字程序
下一篇:KEIL CX51 ANSI C编译器(8051编译器)介绍
推荐阅读最新更新时间:2026-03-25 11:22
- 用于 7VIN 至 16VIN、1.5V 和 1.2V 输出的 LTM4628EV DC/DC 模块稳压器的典型应用电路
- 使用 Analog Devices 的 LTC3728LIGN 的参考设计
- DER-406 - 适用于 A19 灯的 5.76 W 高 PF 非隔离降压-升压型 TRIAC 调光 LED 驱动器
- ADR5045B 5V 输出精密微功率并联模式电压基准的典型应用
- LT3970EDDB-3.42 2.5V 降压转换器的典型应用
- MC78M08BDTG 8V 电流调节器的典型应用
- LT1021DCN8-5 精密电压基准的典型应用
- DER-282 - 100W, 扁平(11 mm), LLC DC-DC转换器
- REF193 低压差开尔文连接电压基准的典型应用电路
- LT3088EM 线性稳压器用于添加软启动的典型应用



STC8H全系列单片机应用手册
使用PIC单片机控制心电前端ADS1192的实现单导心电测量
Follow me第三季第4期任务
非常经典的关于LLC的杨波博士论文
XC6406PP60DL






京公网安备 11010802033920号