📄 clock627.lst
字号:
C51 COMPILER V8.02 CLOCK627 07/11/2008 17:01:11 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE CLOCK627
OBJECT MODULE PLACED IN CLOCK627.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE CLOCK627.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 sbit led1=P1^3; /* 4位数码管选通引脚 */
4 sbit led2=P1^4;
5 sbit led3=P1^6;
6 sbit led4=P1^7;
7 sbit led2dz=P1^5; /*小数点 */
8
9 sbit ls164_ab=P3^0; /*74LS164数据线 */
10 sbit ls164_clk=P3^1; /*74LS164时钟线 */
11
12 sbit key1=P3^5; /*按键1 */
13 sbit key2=P3^7; /*按键2 */
14
15 unsigned int DispFlag; /*显示标识 */
16
17 sbit key1flag=P3^2;/*按键1状态标识*/
18 sbit key2flag=P3^3;/*按键2状态标识*/
19
20 sbit beep=P1^0; /*蜂鸣器*/
21
22 unsigned int MSCNT; /*中断次数 */
23
24 unsigned char SecondBuf=0;/*秒缓冲区*/
25 unsigned char MinuteBuf=0; /*分钟缓冲区*/
26 unsigned char HourBuf=0; /*小时缓冲区*/
27 unsigned char MonthBuf=0;/*月缓冲区*/
28 unsigned char DayBuf=0; /*日缓冲区*/
29
30 unsigned char DispBuf[15]; //显示缓冲
31 /************************************************************/
32 //DispBuf[1]-DispBuf[2]--DispBuf[3]-DispBuf[4]--DispBuf[5]-DispBuf[6]
33 //分 钟 ------- 小 时 ------- 天
34 //DispBuf[7]-DispBuf[8]--DispBuf[9]-DispBuf[10]
35 //月 ------- 秒
36 /************************************************************/
37
38 /* led1查表 */
39 unsigned char Sag_led1[10]=
40 {0x50,0xF9,0x34,0xB0,0x99,0x92,0x12,0xF8,0x10,0x90};
41 /* led234查表 */
42 unsigned char Sag_led234[10]=
43 {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
44
45 /* 延时子程序 */
46 void Delay(unsigned int val)
47 {
48 1 while (val!=0) val--;
49 1 }
50 /*清缓冲区子程序*/
51 void ClearDispBuf()
52 {
53 1 char i;
54 1 for(i=0;i<15;i++)
55 1 {
C51 COMPILER V8.02 CLOCK627 07/11/2008 17:01:11 PAGE 2
56 2 DispBuf[0]=0;
57 2 }
58 1 }
59
60
61 /* 74ls164工作原理子程序 */
62 void Send74ls164(unsigned char sag)
63 {
64 1 char i;
65 1 for(i=1;i<9;i++)
66 1 {
67 2 sag=sag<<1 ;
68 2 if(CY==1)
69 2 ls164_ab=1;
70 2 else
71 2 ls164_ab=0;
72 2 ls164_clk=1;
73 2 ls164_clk=0 ;
74 2 }
75 1 }
76
77 //选定led1
78 void Select_led1()
79 {
80 1 led1=0;
81 1 led2=1;
82 1 led3=1;
83 1 led4=1;
84 1 }
85 //选定led2
86 void Select_led2()
87 {
88 1 led2=0;
89 1 led1=1;
90 1 led3=1;
91 1 led4=1;
92 1 }
93 //选定led3
94 void Select_led3()
95 {
96 1 led3=0;
97 1 led1=1;
98 1 led2=1;
99 1 led4=1;
100 1 }
101 //选定led4
102 void Select_led4()
103 {
104 1 led4=0;
105 1 led1=1;
106 1 led2=1;
107 1 led3=1;
108 1 }
109
110 //更新显示缓冲子程序
111 int UpdateDispBuf()
112 { //更新"秒"显示缓冲
113 1 DispBuf[10]=SecondBuf/10;
114 1 DispBuf[9] =SecondBuf%10;
115 1 //更新"分钟"显示缓冲
116 1 DispBuf[2]=MinuteBuf/10;
117 1 DispBuf[1]=MinuteBuf%10;
C51 COMPILER V8.02 CLOCK627 07/11/2008 17:01:11 PAGE 3
118 1 //更新"小时"显示缓冲
119 1 DispBuf[4]=HourBuf/10;
120 1 DispBuf[3]=HourBuf%10;
121 1 //更新"月"显示缓冲
122 1 DispBuf[8]=MonthBuf/10;
123 1 DispBuf[7]=MonthBuf%10;
124 1 //更新"日"显示缓冲
125 1 DispBuf[6]=DayBuf/10;
126 1 DispBuf[5]=DayBuf%10;
127 1 }
128
129 //4位数码管显示子程序
130 void Disp(void) //2位 5000,4位 2500
131 {
132 1 UpdateDispBuf();
133 1
134 1 switch(DispFlag)
135 1 {
136 2 case 0: //0x0: //显示 时,分
137 2 Select_led4();
138 2 Send74ls164(Sag_led234[DispBuf[1]]);
139 2 Delay(2500);
140 2
141 2 Select_led3();
142 2 Send74ls164(Sag_led234[DispBuf[2]]);
143 2 Delay(2500);
144 2
145 2 Select_led2();
146 2 Send74ls164(Sag_led234[DispBuf[3]]);
147 2 Delay(2500);
148 2
149 2 Select_led1();
150 2 Send74ls164(Sag_led1[DispBuf[4]]);
151 2 Delay(2500);
152 2 break;
153 2
154 2 case 0x1: //显示 月,日
155 2 Select_led4();
156 2 Send74ls164(Sag_led234[DispBuf[5]]);
157 2 Delay(2500);
158 2
159 2 Select_led3();
160 2 Send74ls164(Sag_led234[DispBuf[6]]);
161 2 Delay(2500);
162 2
163 2 Select_led2();
164 2 Send74ls164(Sag_led234[DispBuf[7]]);
165 2 Delay(2500);
166 2
167 2 Select_led1();
168 2 Send74ls164(Sag_led1[DispBuf[8]]);
169 2 Delay(2500);
170 2 break;
171 2
172 2 case 0x2: //显示 秒
173 2 Select_led4();
174 2 Send74ls164(Sag_led234[DispBuf[9]]);
175 2 Delay(2500);
176 2
177 2 Select_led3();
178 2 Send74ls164(Sag_led234[DispBuf[10]]);
179 2 Delay(2500);
C51 COMPILER V8.02 CLOCK627 07/11/2008 17:01:11 PAGE 4
180 2 break;
181 2
182 2 case 0x3: //显示 月
183 2 Select_led2();
184 2 Send74ls164(Sag_led234[DispBuf[7]]);
185 2 Delay(2500);
186 2
187 2 Select_led1();
188 2 Send74ls164(Sag_led1[DispBuf[8]]);
189 2 Delay(2500);
190 2 break;
191 2
192 2 case 0x6: //显示 日
193 2 Select_led4();
194 2 Send74ls164(Sag_led234[DispBuf[5]]);
195 2 Delay(2500);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -