📄 time.lst
字号:
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TIME
OBJECT MODULE PLACED IN time.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE time.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <stdio.h>
2 #include <reg51.h>
3 #include <math.h>
4 //#include "eeprom.h"
5 #define uchar unsigned char
6 #define uint unsigned int
7 #define BUSY 0x80 //lcd忙检测标志
8 #define LCD_DATA P0 //定义P0口为LCD通讯端口
9 sbit RS=P1^0; //数据/命令端
10 sbit RW=P1^1; //读/写选择端
11 sbit E=P1^3;
12 sbit speaker=P1^2;
13 char second=0,minite=0,hour=0; //定义并初始化时钟变量
14 uint day=1,month=1,year=2000; //定义并初始化日期变量
15 uint k,k1,k2,s1,s2,s3,s4,m,n,x,y;
16 int set=0,set1,set2;
17 uchar mstcnt0=0,mstcnt1=0, status=0,ss=0,view=0;disturb=0,week1,next=0;
18 //uchar *week[]={"SUN","MON","TUE","WEN","THU","FRI","SAT"};
19 uchar code *week[]={"Today is Sunday ","Today is Monday ","Today is Tuesday ","Today is Wednesday","T
-oday is Thursday ","Today is Friday ","Today is Saturday "};
20 uchar idata string1[18];
21 //uchar idata string2[22];
22 uchar idata string2[]="is a leap year";
23 uchar idata string3[]="isn't a leap year";
24 //uchar idata time[]={0x00,0x00,0xFC,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00
-,0x00,0x07,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00};
25 /*uchar code datechina[3][8]= {{0x08,0x0f,0x12,0x0f,0x10a,0x1f,0x02,0x02},
26 {0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00},
27 {0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00}}; */
28 //char code gd[200];
29 char code dateclock[7]={0x40,0x02,0x04,0x08,0x10,0x20,0x01};
30 char idata clockjudge[32]={0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
31 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
32 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
33 0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,
34 };
35 //char idata stopwatchjudge[1][3];
36 char idata hourjudge[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
37 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
38 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
39 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
40 char idata minitejudge[32]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
41 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
42 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
43 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
44 void delay(uint k);
45 void init_timer0(void);
46 void init_timer1(void); //LCD延时子程序
47 void LCDInit(void); //LCD初始化子程序
48 void ReadStatus(void); //LCD检测忙子程序
49 void WriteCommand(uchar WC); //写指令到ICM子函数
50 void WriteData(uchar WD); //写数据到LCM子函数
51 void DisplayOneChar(uchar X,uchar Y,uchar DData); //显示指定坐标的一个字符子函数
52 void DisplayListChar(uchar X,uchar Y,uchar *DData); //显示指定坐标的一串字符子函数
53 void init_timer0(void);
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 2
54 void LCDchina(void);
55 void displaytime(void);
56 void displaydate(void);
57 void displayclock(void);
58 void displaystopwatch(void);
59 void changehour(void);
60 void changeminite(void);
61 void changeyear(void);
62 void changemonth(void);
63 void changeday(void);
64 void displaytimejudge(void);
65 void displayclockjudge(void);
66 //void displaystopwatchjudge(void);
67 //void displaydateclock(void);
68 //void displayhourjudge(void);
69 //void displayminitejudge(void);
70 void keyscan(void );
71 void menu_key(void);
72 void tab_key(void);
73 void inc_key(void);
74 void dec_key(void);
75 void inc_time(void);
76 void dec_time(void);
77 void inc_stopwatch(void);
78 void dec_stopwatch(void);
79 void changesecond(void);
80 void inc_clock(void);
81 void dec_clock(void);
82 void inc_stopwatch(void);
83 void dec_stopwatch(void);
84 int dayjudge(int year,int month);
85 int date(int year,int month);
86 int yearchange(int year);
87
88 //void dishz(uint chn);
89 //uchar inva(uchar m);
90 /*********延时K*1ms,12.000mhz**********/
91
92 void delay(uint k)
93 {
94 1 uint i,j;
95 1 for(i=0;i<k;i++)
96 1 {
97 2 for(j=0;j<60;j++);
98 2
99 2 }
100 1 }
101 /**********写指令到LCD子函数************/
102
103 void WriteCommand(uchar WC)
104 {
105 1
106 1 ReadStatus();
107 1 LCD_DATA=WC;
108 1 RS=0; // 选中指令寄存器
109 1 RW=0; // 写模式
110 1 E=1;
111 1 E=0;
112 1 }
113
114 /**********写数据到LCD子函数************/
115
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 3
116 void WriteData(uchar WD)
117 {
118 1 ReadStatus(); //检测忙信号
119 1 LCD_DATA=WD;
120 1 RS=1; // 选中数据寄存器
121 1 RW=0; // 写模式
122 1 E=1;
123 1 E=0;
124 1 }
125
126 /***********LCD内部等待函数*************/
127
128
129 void ReadStatus(void)
130 {
131 1 LCD_DATA=0xff;
132 1 E=1;
133 1 RS=0;
134 1 RW=1;
135 1
136 1 while(LCD_DATA&BUSY)
137 1 { E=0;
138 2 E=1;
139 2 }
140 1 E=0;
141 1 }
142
143
144 /**********LCD初始化子函数***********/
145
146 void LCDInit(void) //LCM初始化
147 {
148 1 LCD_DATA=0;
149 1 WriteCommand(0x38); //8bit数据传送,2行显示,5*7字型,检测忙信号
150 1 WriteCommand(0x08); //关闭显示,检测忙信号
151 1 WriteCommand(0x01); //清屏,检测忙信号
152 1 //WriteCommand(0x06); //显示光标右移设置,检测忙信号
153 1 WriteCommand(0x0c); //显示屏打开,光标不显示,不闪烁,检测忙信号
154 1 }
155
156 /****************显示指定坐标的一个字符子函数*************/
157
158 void DisplayOneChar(uchar X,uchar Y,uchar DData)
159 {
160 1 Y&=1;
161 1 X&=15;
162 1 if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40
163 1 X|=0x80; //指令码为地址码+0X80
164 1 WriteCommand(X);
165 1 WriteData(DData);
166 1 }
167
168 /***********显示指定坐标的一串字符子函数***********/
169
170 void DisplayListChar(uchar X,uchar Y,uchar *DData)
171 {
172 1 uchar ListLength=0;
173 1 Y&=0x01;
174 1 X&=0x0f;
175 1 while(DData[ListLength]!=0x00)
176 1 {
177 2 DisplayOneChar(X,Y,DData[ListLength]);
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 4
178 2 ListLength++;
179 2 X++;
180 2 }
181 1 }
182 /*
183 void LCDchina(void)
184 {
185 unsigned char i=0;
186 for(i=0;i<8;i++)
187 { //也是CGRAM的地址AC不能到0,进行了这样的处理
188 WriteCommand(0x40+i);
189
190 WriteData(datechina[j][i]);
191 }
192 }
193 */
194
195 /***************液晶显示时间子函数1*****************/
196
197 void displaytimejudge(void)
198 {
199 1 DisplayOneChar(5,1,hour/10+0x30); //液晶上显示小时
200 1 DisplayOneChar(6,1,hour%10+0x30);
201 1 // DisplayOneChar(7,1,0x3A);
202 1 DisplayOneChar(8,1,minite/10+0x30); //液晶上显示分
203 1 DisplayOneChar(9,1,minite%10+0x30);
204 1 // DisplayOneChar(10,1,0x3A);
205 1 DisplayOneChar(11,1,second/10+0x30); //液晶上显示秒
206 1 DisplayOneChar(12,1,second%10+0x30);
207 1 yearchange(year);
208 1 DisplayOneChar(10,0,month/10+0x30); //液晶上显示月
209 1 DisplayOneChar(11,0,month%10+0x30);
210 1 // DisplayOneChar(12,0,0x2D);
211 1 DisplayOneChar(13,0,day/10+0x30); //液晶上显示日
212 1 DisplayOneChar(14,0,day%10+0x30);
213 1 DisplayOneChar(5,0,s1+0x30); //液晶上显示年
214 1 DisplayOneChar(6,0,s2+0x30);
215 1 DisplayOneChar(7,0,s3+0x30);
216 1 DisplayOneChar(8,0,s4+0x30);
217 1 // DisplayOneChar(9,0,0x2D);
218 1 }
219
220
221 /************液晶显示时间子函数3***************/
222
223 void changeminite(void)
224 {
225 1 DisplayOneChar(5,1,hour/10+0x30);
226 1 DisplayOneChar(6,1,hour%10+0x30);
227 1
228 1 DisplayOneChar(8,1,minite/10+0x30); //液晶上显示分
229 1 DisplayOneChar(9,1,minite%10+0x30);
230 1
231 1 delay(250);
232 1 DisplayOneChar(8,1,0x20);
233 1 DisplayOneChar(9,1,0x20);
234 1 delay(250);
235 1 }
236
237 /**************液晶显示时间子函数2*****************/
238
239
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 5
240 void changehour(void)
241 {
242 1
243 1 DisplayOneChar(5,1,hour/10+0x30); //液晶上显示小时
244 1 DisplayOneChar(6,1,hour%10+0x30);
245 1
246 1 delay(250);
247 1 DisplayOneChar(5,1,0x20);
248 1 DisplayOneChar(6,1,0x20);
249 1 delay(250);
250 1 }
251
252 /**************液晶显示日期子函数1*****************/
253 void changesecond(void)
254 {
255 1 DisplayOneChar(8,1,minite/10+0x30); //液晶上显示分
256 1 DisplayOneChar(9,1,minite%10+0x30);
257 1 DisplayOneChar(11,1,second/10+0x30); //液晶上显示秒
258 1 DisplayOneChar(12,1,second%10+0x30);
259 1 delay(250);
260 1 DisplayOneChar(11,1,0x20);
261 1 DisplayOneChar(12,1,0x20);
262 1 delay(250);
263 1 }
264
265 /**************液晶显示日期子函数2*****************/
266 void changeday(void)
267 {
268 1 DisplayOneChar(10,0,month/10+0x30); //液晶上显示月
269 1 DisplayOneChar(11,0,month%10+0x30);
270 1
271 1 DisplayOneChar(13,0,day/10+0x30); //液晶上显示日
272 1 DisplayOneChar(14,0,day%10+0x30);
273 1
274 1 delay(250);
275 1 DisplayOneChar(14,0,0x20);
276 1 DisplayOneChar(13,0,0x20);
277 1 delay(250);
278 1 }
279 /**************液晶显示日期子函数3*****************/
280 void changemonth(void)
281 {
282 1 yearchange(year);
283 1 DisplayOneChar(5,0,s1+0x30); //液晶上显示年
284 1 DisplayOneChar(6,0,s2+0x30);
285 1 DisplayOneChar(7,0,s3+0x30);
286 1 DisplayOneChar(8,0,s4+0x30);
287 1 DisplayOneChar(10,0,month/10+0x30); //液晶上显示月
288 1 DisplayOneChar(11,0,month%10+0x30);
289 1 delay(250);
290 1 DisplayOneChar(11,0,0x20);
291 1 DisplayOneChar(10,0,0x20);
292 1 delay(250);
293 1 }
294 /**************液晶显示日期子函数4*****************/
295 void changeyear(void)
296 {
297 1 DisplayOneChar(11,1,second/10+0x30); //液晶上显示秒
298 1 DisplayOneChar(12,1,second%10+0x30);
299 1 yearchange(year);
300 1 DisplayOneChar(5,0,s1+0x30); //液晶上显示年
301 1 DisplayOneChar(6,0,s2+0x30);
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 6
302 1 DisplayOneChar(7,0,s3+0x30);
303 1 DisplayOneChar(8,0,s4+0x30);
304 1 delay(250);
305 1 DisplayOneChar(6,0,0x20);
306 1 DisplayOneChar(7,0,0x20);
307 1 DisplayOneChar(8,0,0x20);
308 1 DisplayOneChar(5,0,0x20);
309 1 delay(250);
310 1 }
311 void displayclockjudge(void)
312 {
313 1 DisplayOneChar(9,1,hourjudge[set]/10+0x30);
314 1 DisplayOneChar(10,1,hourjudge[set]%10+0x30);
315 1 DisplayOneChar(12,1,minitejudge[set]/10+0x30);
316 1 DisplayOneChar(13,1,minitejudge[set]%10+0x30);
317 1 DisplayListChar(8,0,"SMTWTFS");
318 1 delay(250);
319 1 for(m=0;m<7;m++)
320 1 {
321 2 if((clockjudge[set]&dateclock[m])==0)
322 2 {DisplayOneChar(8+m,0,0x20);}
323 2 }
324 1 if(set1==1)
325 1 {
326 2 DisplayOneChar(9,1,0x20);
327 2 DisplayOneChar(10,1,0x20);
328 2 }
329 1 if(set1==2)
330 1 {
331 2 DisplayOneChar(12,1,0x20);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -