📄 22.lst
字号:
C51 COMPILER V6.12 22 11/27/2008 09:54:37 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 22
OBJECT MODULE PLACED IN .\22.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE .\22.c DEBUG OBJECTEXTEND
stmt level source
1
2 #include"reg51.h"
3 #define uchar unsigned char
4 #define uint unsigned int
5
6
7 sbit rs=P3^0;
8 sbit rw=P3^1;
9 sbit e=P3^2;
10 sbit ds=P1;
11 sbit key=P2^0;
12 sbit bf=P1^7;
13
14 uint ms=0;
15 uint second=0;
16 uint min=0;
17 uint hr=0;
18 uint day=0;
19 uint keytime=0;
20
21
22
23 uchar code tab[]={"***FM1602A--3***"};
24 uchar code tab1[]={0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11,
25 0x1F,0x11,0x11,0x11,0x1F,0x11,0x11,0x1F}; // 月日
26 uchar code number[]={"0123456789"};
27
28 uchar code inti0[]={"11 26 00:00:00"};
29
30
31
32 void nop(){}
33
34 void delaym(uint q) //延时
35 {uchar n;
36 1 while(q--)
37 1 {for(n=0;n<24;n++){;;}}
38 1 }
39
40 void delay(unsigned int n)
41
42 {
43 1
44 1 unsigned int i,j;
45 1
46 1 for(j=n;j>0;j--)
47 1
48 1 for(i=112;i>0;i--);
49 1
50 1 } /////// 精确MS,
51
52
53
54 void check() // 判忙
55 {rs=0;
C51 COMPILER V6.12 22 11/27/2008 09:54:37 PAGE 2
56 1 rw=1;
57 1 e=0;
58 1 P1=0xff;
59 1 e=1;
60 1 nop();
61 1 nop();
62 1 while(P&0x80){};
63 1 delaym(10);
64 1 }
65
66 void sendc(uchar com) // 发命令字
67 {check();
68 1
69 1
70 1 rs=0;
71 1 rw=0;
72 1 e=1;
73 1 P1=com;
74 1
75 1 nop();
76 1 e=0;
77 1 nop();
78 1 }
79
80 void sendd(uchar word) // 发显示字
81 {check();
82 1
83 1
84 1 rs=1;
85 1 rw=0;
86 1 e=1;
87 1 P1=word;
88 1 nop();
89 1 e=0;
90 1 nop();
91 1 }
92
93 void inti() // 初始化
94 {uchar d;
95 1 sendc(0x01);
96 1 sendc(0x38);
97 1 sendc(0x0c);
98 1 sendc(0x06);
99 1 delaym(10);
100 1
101 1 sendc(0x80);
102 1 for(d=0;d<16;d++)
103 1 {sendd(*(inti0+d));};
104 1 sendc(0x82);
105 1 sendd(0x00);
106 1 sendc(0x85);
107 1 sendd(0x01);
108 1 sendc(0xc0);
109 1 for(d=0;d<16;d++)
110 1 {sendd(*(tab+d));};
111 1 }
112
113 void cpuinti() //////////CPU开中断
114 {
115 1 TMOD=0x01;
116 1 TH0=0x3c;
117 1 TL0=0xb0;
C51 COMPILER V6.12 22 11/27/2008 09:54:37 PAGE 3
118 1 TR0=1;
119 1 EA=1;
120 1 ET0=1;
121 1 }
122
123
124 void displayday() //////显示天
125 {uchar do1,dt;
126 1 if(day>9)
127 1 {
128 2 dt=day/10;
129 2 do1=day%10;}
130 1 else{dt=0;do1=day;};
131 1
132 1 sendc(0x83);
133 1 sendd(*(number+dt));
134 1 sendc(0x84);
135 1 sendd(*(number+do1));
136 1 while(day==31)
137 1 {day=1;
138 2 };
139 1 }
140
141
142
143
144 void displayhr() //////显示小时
145 {uchar ho,ht;
146 1 if(hr>9)
147 1 {
148 2 ht=hr/10;
149 2 ho=hr%10;}
150 1 else{ht=0;ho=hr;};
151 1
152 1 sendc(0x88);
153 1 sendd(*(number+ht));
154 1 sendc(0x89);
155 1 sendd(*(number+ho));
156 1 while(hr==24)
157 1 {hr=0;
158 2 day++;
159 2 displayday();
160 2 };
161 1 }
162
163
164
165 void displaymin() ///////////显示 分
166 {uchar mo,mt;
167 1 if(min>9)
168 1 {
169 2 mt=min/10;
170 2 mo=min%10;}
171 1 else{mt=0;mo=min;};
172 1
173 1 sendc(0x8b);
174 1 sendd(*(number+mt));
175 1 sendc(0x8c);
176 1 sendd(*(number+mo));
177 1 while(min==60)
178 1 {min=0;
179 2 hr++;
C51 COMPILER V6.12 22 11/27/2008 09:54:37 PAGE 4
180 2 displayhr();};
181 1 }
182
183
184
185 void displaysec() /////////////显示 秒
186 {uchar o,t;
187 1 if(second>9)
188 1 {
189 2 t=second/10;
190 2 o=second%10;}
191 1 else{t=0;o=second;};
192 1
193 1 sendc(0x8e);
194 1 sendd(*(number+t));
195 1 sendc(0x8f);
196 1 sendd(*(number+o));
197 1 while(second==60)
198 1 {second=0;
199 2 min++;
200 2 displaymin();};
201 1 }
202
203 void keyt ()
204 {keytime=0; ///////// 键时
205 1 while(key==0){delay(1);keytime++;}; /////////// 按键计时
206 1 }
207
208
209 void dayshine() ////////////设置天位
210
211 {sendc(0x83);
212 1 sendc(0x84);
213 1 for(;;){
214 2 while(key==1){};
215 2 delaym(10);
216 2 keyt();
217 2 if(keytime>1000)
218 2 {TR0=1;sendc(0x0c);sendc(0x06);while(1){};};
219 2
220 2 day++;if(day==31){day=0;};displayday();
221 2 };
222 1
223 1 }
224
225
226
227
228
229 void hrshine() ////////////设置小时位
230 {sendc(0x88);
231 1 sendc(0x89);
232 1 for(;;){
233 2 while(key==1){};
234 2 delaym(10);
235 2 keyt();
236 2 if(keytime>1000)
237 2 {displayhr();dayshine();};
238 2
239 2 hr++;if(hr==24){hr=0;};displayhr();
240 2 };
241 1 }
C51 COMPILER V6.12 22 11/27/2008 09:54:37 PAGE 5
242
243
244
245 void minshine() ///////// 设置分位
246 {sendc(0x8b);
247 1 sendc(0x8c);
248 1 for(;;){
249 2 while(key==1){};
250 2 delaym(10);
251 2 keyt();
252 2 if(keytime>1000){displaymin();hrshine();};
253 2 min++;if(min==60){min=0;};displaymin();
254 2 };
255 1
256 1 }
257
258
259 void secshine() ///////// 设置秒位
260 {sendc(0x8e);sendc(0x0f);
261 1 sendc(0x04);
262 1 sendc(0x8f);
263 1 for(;;){
264 2 while(key==1){};
265 2 delaym(10);
266 2 keyt();
267 2 if(keytime>1000){displaysec();minshine();};
268 2 second++;if(second==60){second=0;};displaysec();};
269 1 }
270
271
272
273
274 void longkey()
275 {for(;;){if(key==0){TR0=0;keyt();if(keytime>1000){ secshine(); }
276 3 };};
277 1
278 1 }
279
280 void setcgram() ///////////// 设置CGRAM
281 {uchar x;
282 1 sendc(0x40);
283 1 for(x=0;x<16;x++)
284 1 {sendd(*(tab1+x));}
285 1 }
286
287
288 void timer() interrupt 1 ///////////中断入口
289 {
290 1 ms++;
291 1
292 1 displaysec();
293 1 while(ms==15){;TH0=0x3c;TL0=0xb0;
294 2 ms=0;
295 2 second++;}
296 1 }
297
298
299
300
301 void main()
302 {setcgram();
303 1 inti();
C51 COMPILER V6.12 22 11/27/2008 09:54:37 PAGE 6
304 1 cpuinti();
305 1 longkey();
306 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1000 ----
CONSTANT SIZE = 61 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 7
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -