📄 shizhong.lst
字号:
C51 COMPILER V8.08 SHIZHONG 09/16/2008 11:47:09 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE SHIZHONG
OBJECT MODULE PLACED IN shizhong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shizhong.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "reg51.h"
2 #define uchar unsigned char
3 sbit RW=P3^1;
4 sbit RS=P3^0;
5 sbit E=P3^2;
6 bit at=0;
7 //sbit busy_bit=P1^7;
8 uchar code shen[]={"CLOCK!"};
9 uchar code word[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20};
10 uchar dispbuf[8],h,m,s,counter;
11
12
13
14 void delay()
15 {
16 1 uchar i;
17 1 for(i=0;i<255;i++);
18 1 }
19
20
21
22 /*******写命令**********/
23 void lcd_wmc(uchar i)
24 {
25 1
26 1 P0=i;
27 1 RS=0;
28 1 RW=0;
29 1 E=0;
30 1 delay();
31 1 E=1;
32 1 }
33
34
35
36 /*******写数据***********/
37
38 void lcd_wmd(uchar i)
39 {
40 1
41 1 P0=i;
42 1 RS=1;
43 1 RW=0;
44 1 E=0;
45 1 delay();
46 1 E=1;
47 1 }
48
49
50
51
52 /*******初始化液晶*******/
53 void lcd_init()
54 {
55 1 uchar i;
C51 COMPILER V8.08 SHIZHONG 09/16/2008 11:47:09 PAGE 2
56 1 lcd_wmc(0x01);
57 1 lcd_wmc(0x38);
58 1 lcd_wmc(0x0c);
59 1 lcd_wmc(0x06);
60 1 lcd_wmc(0xc9);
61 1 for(i=0;i<6;i++)
62 1 lcd_wmd(shen[i]);
63 1 lcd_wmc(0xc0);
64 1 }
65
66
67
68
69
70 /*******更新缓冲区子程序*******/
71 void newbuf()
72 {
73 1 dispbuf[0]=s%10;
74 1 dispbuf[1]=s/10;
75 1 dispbuf[3]=m%10;
76 1 dispbuf[4]=m/10;
77 1 dispbuf[6]=h%10;
78 1 dispbuf[7]=h/10;
79 1 }
80
81
82
83 /*******显示子程序**********/
84 void disp(uchar dispadd)
85 {
86 1 uchar tmp;
87 1 lcd_wmc(dispadd);
88 1 tmp=dispbuf[7];
89 1 tmp=word[tmp];
90 1 lcd_wmd(tmp);
91 1 tmp=dispbuf[6];
92 1 tmp=word[tmp];
93 1 lcd_wmd(tmp);
94 1 tmp=dispbuf[5];
95 1 tmp=word[tmp];
96 1 lcd_wmd(tmp);
97 1 tmp=dispbuf[4];
98 1 tmp=word[tmp];
99 1 lcd_wmd(tmp);
100 1 tmp=dispbuf[3];
101 1 tmp=word[tmp];
102 1 lcd_wmd(tmp);
103 1 tmp=dispbuf[2];
104 1 tmp=word[tmp];
105 1 lcd_wmd(tmp);
106 1 tmp=dispbuf[1];
107 1 tmp=word[tmp];
108 1 lcd_wmd(tmp);
109 1 tmp=dispbuf[0];
110 1 tmp=word[tmp];
111 1 lcd_wmd(tmp);
112 1 }
113
114
115
116
117
C51 COMPILER V8.08 SHIZHONG 09/16/2008 11:47:09 PAGE 3
118 /*********************键盘子程序***********************/
119
120 uchar keypro(void)
121 {
122 1 uchar scanl,scanh;
123 1 P1=0xf0;
124 1 if((P1&0xf0)!=0xf0)
125 1 {
126 2 delay();
127 2 if((P1&0xf0)!=0xf0)
128 2 {
129 3 scanl=0xfe;
130 3 while((scanl&0x10)!=0)
131 3 {
132 4 P1=scanl;
133 4 if((P1&0xf0)!=0xf0)
134 4 {
135 5 scanh=(P1&0xf0)|0x0f;
136 5 return (~scanh)+(~scanl);
137 5 }
138 4 else scanl=(scanl<<1)|0x01;
139 4 }
140 3 }
141 2 }
142 1 return 0;
143 1 }
144
145
146 /********************时间调整子程序********************/
147 void adjustime()
148 {
149 1 uchar k;
150 1 static uchar add;
151 1 k=keypro();
152 1 switch(k)
153 1 {
154 2 case 0x88: if(!at){add=0xc1;EA=0;lcd_wmc(0xc1);lcd_wmc(0x0f);at=1;}
155 2 else {lcd_wmc(0xc0);lcd_wmc(0x0c);at=0;EA=1;} break;
156 2
157 2 case 0x48: if(at)
158 2 {
159 3 if(add==0xc1){add=0xc7; lcd_wmc(add);}
160 3 else {add=add-3;lcd_wmc(add);}
161 3 }
162 2 break;
163 2
164 2 case 0x28: if(at)
165 2 {
166 3 if(add==0xc7) {add=0xc1;lcd_wmc(add);}
167 3 else {add=add+3;lcd_wmc(add);}
168 3 }
169 2 break;
170 2
171 2 case 0x18: if(at)
172 2 {
173 3 if(add==0xc1) h++;
174 3 if(h==24)
175 3 h=0;
176 3 if(add==0xc4) m++;
177 3 if(m==60)
178 3 m=0;
179 3 if(add==0xc7) s++;
C51 COMPILER V8.08 SHIZHONG 09/16/2008 11:47:09 PAGE 4
180 3 if(s==60)
181 3 s=0;
182 3 newbuf();
183 3 disp(0xc0);
184 3 lcd_wmc(add);
185 3 }
186 2 break;
187 2 default: break;
188 2 }
189 1 if(k!=0)
190 1 {
191 2 while((P1&0xf0)!=0xf0)
192 2 P1=0xf0;
193 2 }
194 1
195 1 }
196
197
198
199
200
201
202
203 /*********************初始化子程序**********************/
204 void init()
205 {
206 1
207 1 TMOD=0x01;
208 1 TH0=0x4c;
209 1 TL0=0x00;
210 1 EA=1;
211 1 ET0=1;
212 1 TR0=1;
213 1 counter=0;
214 1 h=12;m=0;s=0;
215 1 dispbuf[2]=10;
216 1 dispbuf[5]=10;
217 1 }
218
219
220
221
222
223
224
225 /***************************主程序************************/
226
227 void main(void)
228 {
229 1 init();
230 1 lcd_init();
231 1
232 1 while(1)
233 1 {
234 2 adjustime();
235 2 if(!at)
236 2 {
237 3 //闪烁
238 3 if(counter<10)
239 3 {
240 4 dispbuf[2]=10;
241 4 dispbuf[5]=10;
C51 COMPILER V8.08 SHIZHONG 09/16/2008 11:47:09 PAGE 5
242 4 }
243 3 else
244 3 {
245 4 dispbuf[2]=11;
246 4 dispbuf[5]=11;
247 4 }
248 3 //更新显示缓冲区及调用显示程序
249 3 if(counter==0)
250 3 {
251 4 newbuf();
252 4 disp(0xc0);
253 4 }
254 3 else if(counter==10)
255 3 disp(0xc0);
256 3 }
257 2 }
258 1 }
259
260
261
262
263
264
265
266
267 /*************************定时器0的中断**********************/
268 void Time0() interrupt 1 using 2 //再次强调中断子程序执行时间越短越好
269 {
270 1 TH0=(65536-46075)/256;
271 1 TL0=(65536-46075)%256;
272 1 counter++;
273 1 if(counter==20)
274 1 {
275 2 s++;
276 2 counter=0;
277 2 if(s==60)
278 2 {
279 3 m++;
280 3 s=0;
281 3 if(m==60)
282 3 {
283 4 h++;
284 4 m=0;
285 4 if(h==24)
286 4 h=0;
287 4 }
288 3 }
289 2
290 2 }
291 1 }
292
293
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 588 ----
CONSTANT SIZE = 19 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
C51 COMPILER V8.08 SHIZHONG 09/16/2008 11:47:09 PAGE 6
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -