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