📄 1.lst
字号:
C51 COMPILER V8.05a 1 05/10/2009 13:23:45 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE 1
OBJECT MODULE PLACED IN 1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <intrins.h>
3 #define uchar unsigned char
4 void lcd_ini();
5 void ascii_change(void);
6 void delay();
7 void wri_add(uchar com);
8 void wri_dat(uchar com1);
9 void shan(void);
10 void disp();
11 void tkey(void);
12 sbit cs=P1^7;
13 sbit sid=P1^6;
14 sbit sclk=P1^5;
15 bit flag=1;
16 uchar dat,count,f=1;//f测试哪个单元为当前闪烁状态
17 uchar data clock[3]={23,45,12};
18 uchar code clockname[10]={"北京时间:"};
19 uchar data num[6];
20
21 /*******主程序*************/
22 void main()
23 {
24 1 lcd_ini();
25 1 count=10;//机器周期为1us,每次定时50ms,此变量用来控制循环次数,在下面赋值为20,共定时1秒
26 1 TMOD=0x01;
27 1 TL0=0XB0;
28 1 TH0=0X3C;
29 1 EA=1;
30 1 ET0=1;
31 1 IT0=1;
32 1 EX0=1;
33 1 TR0=1;
34 1 while(1)
35 1 {
36 2 back:ascii_change();
37 2 disp();
38 2 delay();
39 2 if(flag==1)
40 2 goto back;
41 2 tkey();
42 2 shan();
43 2 delay();
44 2 }
45 1 }
46
47 /****lcd初始化*******/
48
49 void lcd_ini()
50 {
51 1
52 1 wri_add(0x30);
53 1 delay();
54 1
55 1 wri_add(0x0c);
C51 COMPILER V8.05a 1 05/10/2009 13:23:45 PAGE 2
56 1 delay();
57 1
58 1 wri_add(0x01);
59 1 delay();
60 1
61 1 wri_add(0x06);
62 1 delay();
63 1 }
64
65
66
67 /********定时程序*************/
68 void timer1() interrupt 1 using 2
69 {
70 1 TL0=0XB0;
71 1 TH0=0X3C;
72 1 count--;
73 1 if(count==0)
74 1 {
75 2 count=10;
76 2 clock[2]++;//秒//
77 2 }
78 1 else
79 1 goto out;
80 1
81 1 if(clock[2]==60)
82 1 {
83 2 clock[2]=0;
84 2 clock[1]++;//分//
85 2 }
86 1
87 1 if(clock[1]==60)
88 1 {
89 2 clock[1]=0;
90 2 clock[0]++;
91 2 }
92 1
93 1 if(clock[0]==24)//时//
94 1 clock[0]=0;
95 1
96 1 out:_nop_();
97 1 }
98
99 /*******十位个位转换成ASCII码************/
100 void ascii_change(void)
101 {
102 1 num[5]=clock[2]-(clock[2]/10)*10+0x30;
103 1 num[4]=clock[2]/10+0x30;
104 1 num[3]=clock[1]-(clock[1]/10)*10+0x30;
105 1 num[2]=clock[1]/10+0x30;
106 1 num[1]=clock[0]-(clock[0]/10)*10+0x30;
107 1 num[0]=clock[0]/10+0x30;
108 1 }
109
110
111 /********廷时程序*************/
112 void delay()
113 {
114 1 uchar i,j;
115 1 for (i=250;i>0;i--)
116 1 for (j=250;j>0;j--);
117 1
C51 COMPILER V8.05a 1 05/10/2009 13:23:45 PAGE 3
118 1 }
119 /*****Write address*********/
120 void wri_add(uchar com)
121 {
122 1 uchar i,j,k;
123 1 cs=0;
124 1 cs=1;
125 1 dat=0xf8;
126 1
127 1 for(i=1;i<=8;i++)
128 1 {
129 2 sid=(bit)(dat&0x80);
130 2 sclk=0;
131 2 sclk=1;
132 2 sclk=0;
133 2 dat=dat<<1;
134 2 }
135 1 dat=com;
136 1 dat=dat&0xf0;
137 1 for(j=1;j<=8;j++)
138 1 {
139 2 sid=(bit)(dat&0x80);
140 2 sclk=0;
141 2 sclk=1;
142 2 sclk=0;
143 2 dat=dat<<1;
144 2 }
145 1
146 1 dat=com;
147 1 dat=_cror_(dat,4);// 此为高低四位交换
148 1 dat=dat&0xf0;
149 1
150 1 for(k=1;k<=8;k++)
151 1 {
152 2 sid=(bit)(dat&0x80);
153 2 sclk=0;
154 2 sclk=1;
155 2 sclk=0;
156 2 dat=dat<<1;
157 2 }
158 1
159 1 }
160
161 /*********Write data*************/
162 void wri_dat(uchar com1)
163 {
164 1 uchar i,j,k;
165 1 cs=0;
166 1 cs=1;
167 1 dat=0xfa;
168 1 for(i=1;i<=8;i++)
169 1 {
170 2 sid=(bit)(dat&0x80);
171 2 sclk=0;
172 2 sclk=1;
173 2 sclk=0;
174 2 dat=dat<<1;
175 2 }
176 1
177 1 dat=com1;
178 1 dat=dat&0xf0;
179 1 for(j=1;j<=8;j++)
C51 COMPILER V8.05a 1 05/10/2009 13:23:45 PAGE 4
180 1 {
181 2 sid=(bit)(dat&0x80);
182 2 sclk=0;
183 2 sclk=1;
184 2 sclk=0;
185 2 dat=dat<<1;
186 2 }
187 1
188 1 dat=com1;
189 1 dat=_cror_(dat,4);// 此为高低四位交换
190 1 dat=dat&0xf0;
191 1
192 1 for(k=1;k<=8;k++)
193 1 {
194 2 sid=(bit)(dat&0x80);
195 2 sclk=0;
196 2 sclk=1;
197 2 sclk=0;
198 2 dat=dat<<1;
199 2 }
200 1 }
201
202
203 /******display program***********/
204 void disp()
205 {
206 1 uchar i,k=0;
207 1 wri_add(0x80);
208 1
209 1 for (i=1;i<=9;i++)
210 1 wri_dat(clockname[i-1]);
211 1
212 1 wri_add(0x90);
213 1
214 1 for (i=1;i<=6;i++)
215 1 {
216 2 k++;
217 2 if(k==3||k==5)
218 2 wri_dat(clockname[8]);//时间之间的冒号。
219 2 wri_dat(num[i-1]);
220 2 }
221 1 }
222
223 /*******闪烁程序*************************/
224 void shan(void)
225 {
226 1 uchar i,k=0;
227 1 wri_add(0x90);
228 1 if(f==1)
229 1 {
230 2 num[0]=' ';
231 2 num[1]=' ';
232 2 }
233 1 else
234 1 goto next;
235 1 for (i=1;i<=6;i++)
236 1 {
237 2 k++;
238 2 if(k==3||k==5)
239 2 wri_dat(clockname[8]);//时间之间的冒号。
240 2 wri_dat(num[i-1]);
241 2 }
C51 COMPILER V8.05a 1 05/10/2009 13:23:45 PAGE 5
242 1 goto return1;
243 1
244 1 next: if(f==2)
245 1 {
246 2 num[2]=' ';
247 2 num[3]=' ';
248 2 }
249 1 else
250 1 goto next1;
251 1 for (i=1;i<=6;i++)
252 1 {
253 2 k++;
254 2 if(k==3||k==5)
255 2 wri_dat(clockname[8]);//时间之间的冒号。
256 2 wri_dat(num[i-1]);
257 2 }
258 1 goto return1;
259 1
260 1 next1: if(f==3)
261 1 {
262 2 num[4]=' ';
263 2 num[5]=' ';
264 2 }
265 1 else
266 1 goto return1;
267 1
268 1 for (i=1;i<=6;i++)
269 1 {
270 2 k++;
271 2 if(k==3||k==5)
272 2 wri_dat(clockname[8]);//时间之间的冒号。
273 2 wri_dat(num[i-1]);
274 2 }
275 1 return1:_nop_();
276 1
277 1 }
278
279
280
281 /*******外部中断***********/
282 void intr0() interrupt 0 using 2
283 {
284 1 flag=~flag;//判断是否闪烁位//
285 1 TR0=~TR0; //闪关定时否则开定时
286 1 f=1;
287 1 }
288
289 /**********按键程序************/
290 void tkey(void)
291 {
292 1 uchar judcekey;
293 1 judcekey=P1&0x0f;
294 1 if(judcekey==0x0f)
295 1 goto return2;
296 1
297 1 /*******移位键*********/
298 1 if (judcekey==0x0e)
299 1 f++;
300 1 if (f==4)
301 1 f=1;
302 1 /**********加一键*********/
303 1 if(judcekey==0x0d)
C51 COMPILER V8.05a 1 05/10/2009 13:23:45 PAGE 6
304 1 {clock[f-1]++;}
305 1
306 1 if (f==1)
307 1 { if (clock[f-1]==24){
308 3 clock[f-1]=0;}
309 2 }
310 1 else{ if (clock[f-1]==60)
311 2 clock[f-1]=0;
312 2 }
313 1
314 1 /******减一键***********/
315 1 if(judcekey==0x0b)
316 1 {clock[f-1]--;}
317 1
318 1 if (f==1)
319 1 { if (clock[f-1]==0xff){
320 3 clock[f-1]=23;}
321 2 }
322 1 else
323 1 { if (clock[f-1]==0xff)
324 2 clock[f-1]=59;
325 2 }
326 1
327 1 return2:_nop_();
328 1
329 1 }
330
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 708 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -