📄 液晶显示电子时钟1.lst
字号:
C51 COMPILER V7.20 液___允_电子时钟1 10/09/2008 18:51:13 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE 液___允_电子时钟1
OBJECT MODULE PLACED IN 液晶显示电子时钟1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 液晶显示电子时钟1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 //Name of this design: LCD show Electric Clock
3 //Author: xuqian zhangmengcheng
4 //Date: 2008-10-02
5 /*******************************************************************/
6
7 #include <reg51.h>
8 #include <intrins.h>
9 #include <absacc.h>
10 #define uchar unsigned char
11 #define uint unsigned int
12
13 #define BUSY 0x80 //lcd忙检测标志
14 #define DATAPORT P0 //定义P0口为LCD通讯端口
15
16 //sbit light=P1^3;
17 sbit LCM_RS=P2^0; //数据/命令端
18 sbit LCM_RW=P2^1; //读/写选择端
19 sbit LCM_EN=P2^2;
20 sbit sounder=P2^5;
21
22 sbit p1_0=P1^0;
23 sbit p1_1=P1^1;
24 sbit p1_2=P1^2;
25 sbit p1_3=P1^3;
26 sbit p1_4=P1^4;
27 sbit p1_5=P1^5;
28 sbit p1_6=P1^6;
29 sbit p1_7=P1^7;
30
31 uchar second; //定义并初始化时钟变量
32 uchar minite;
33 uchar hour;
34 uchar sminite;
35 uchar shour;
36 uchar mstcnt=0;
37 uchar t,set=0;
38 uchar code str0[]={"DATE :2008-10-11"};
39 uchar code str1[]={"TIME : : : "};
40 uchar code str2[]={"clock: : : "};
41
42 void delay_LCM(uint); //LCD延时子程序
43 void initLCM( void); //LCD初始化子程序
44 void lcd_wait(void); //LCD检测忙子程序
45 void WriteCommandLCM(uchar WCLCM,uchar BusyC); //写指令到ICM子函数
46 void WriteDataLCM(uchar WDLCM); //写数据到LCM子函数
47 void DisplayOneChar(uchar X,uchar Y,uchar DData); //显示指定坐标的一个字符子函数
48 void DisplayListChar(uchar X,uchar Y,uchar code *DData); //显示指定坐标的一串字符子函数
49 void init_timer0(void); //定时器初始化
50 void displayfun1(void);
51 void displayfun2(void);
52 void displayfun3(void);
53 void displayfun4(void);
54 void displayfun5(void);
55 void displayfun6(void);
C51 COMPILER V7.20 液___允_电子时钟1 10/09/2008 18:51:13 PAGE 2
56 void keyscan(void ); //键盘扫描子程序
57 void set_adj(void);
58 void inc_key(void);
59 void dec_key(void);
60 void inc_clock(void);
61 void dec_clock(void);
62 void set_sure(void); //确认键函数,set=0
63
64
65
66
67 /*********延时K*1ms,12.000mhz**********/
68
69 void delay_LCM(uint k)
70 {
71 1 uint i,j;
72 1 for(i=0;i<k;i++)
73 1 {
74 2 for(j=0;j<60;j++)
75 2 {;}
76 2 }
77 1 }
78 /**********写指令到LCM子函数************/
79
80 void WriteCommandLCM(uchar WCLCM,uchar BusyC)
81 {
82 1 if(BusyC)lcd_wait();
83 1 DATAPORT=WCLCM;
84 1 LCM_RS=0; // 选中指令寄存器
85 1 LCM_RW=0; // 写模式
86 1 LCM_EN=1;
87 1 _nop_();
88 1 _nop_();
89 1 _nop_();
90 1 LCM_EN=0;
91 1 }
92
93 /**********写数据到LCM子函数************/
94
95 void WriteDataLCM(uchar WDLCM)
96 {
97 1 lcd_wait( ); //检测忙信号
98 1 DATAPORT=WDLCM;
99 1 LCM_RS=1; // 选中数据寄存器
100 1 LCM_RW=0; // 写模式
101 1 LCM_EN=1;
102 1 _nop_();
103 1 _nop_();
104 1 _nop_();
105 1 LCM_EN=0;
106 1 }
107
108 /***********lcm内部等待函数*************/
109
110
111 void lcd_wait(void)
112 {
113 1 DATAPORT=0xff;
114 1 LCM_EN=1;
115 1 LCM_RS=0;
116 1 LCM_RW=1;
117 1 _nop_();
C51 COMPILER V7.20 液___允_电子时钟1 10/09/2008 18:51:13 PAGE 3
118 1 while(DATAPORT&BUSY)
119 1 { LCM_EN=0;
120 2 _nop_();
121 2 _nop_();
122 2 LCM_EN=1;
123 2 _nop_();
124 2 _nop_();
125 2 }
126 1 LCM_EN=0;
127 1
128 1 }
129
130
131 /**********LCM初始化子函数***********/
132
133 void initLCM( )
134 {
135 1 DATAPORT=0;
136 1 delay_LCM(15);
137 1 WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
138 1 delay_LCM(5);
139 1 WriteCommandLCM(0x38,0);
140 1 delay_LCM(5);
141 1 WriteCommandLCM(0x38,0);
142 1 delay_LCM(5);
143 1
144 1 WriteCommandLCM(0x38,1); //8bit数据传送,2行显示,5*7字型,检测忙信号
145 1 WriteCommandLCM(0x08,1); //关闭显示,检测忙信号
146 1 WriteCommandLCM(0x01,1); //清屏,检测忙信号
147 1 WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号
148 1 WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
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 WriteCommandLCM(X,0);
160 1 WriteDataLCM(DData);
161 1 }
162
163 /***********显示指定坐标的一串字符子函数***********/
164
165 void DisplayListChar(uchar X,uchar Y,uchar code *DData)
166 {
167 1 uchar ListLength=0;
168 1 Y&=0x01;
169 1 X&=0x0f;
170 1 while(X<16)
171 1 {
172 2 DisplayOneChar(X,Y,DData[ListLength]);
173 2 ListLength++;
174 2 X++;
175 2 }
176 1 }
177
178
179
C51 COMPILER V7.20 液___允_电子时钟1 10/09/2008 18:51:13 PAGE 4
180 /***************液晶显示子函数1正常显示*****************/
181
182 void displayfun1(void)
183 {
184 1 WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
185 1 DisplayListChar(0,0,str0);
186 1 DisplayListChar(0,1,str1);
187 1
188 1 DisplayOneChar(7,1,hour/10+0x30); //液晶上显示小时
189 1 DisplayOneChar(8,1,hour%10+0x30);
190 1
191 1 DisplayOneChar(10,1,minite/10+0x30); //液晶上显示分
192 1 DisplayOneChar(11,1,minite%10+0x30);
193 1
194 1 DisplayOneChar(13,1,second/10+0x30); //液晶上显示秒
195 1 DisplayOneChar(14,1,second%10+0x30);
196 1 }
197
198
199 /************液晶显示子函数2***************/
200
201 void displayfun2(void)
202 {
203 1 WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
204 1 DisplayListChar(0,0,str0);
205 1 DisplayListChar(0,1,str1);
206 1
207 1 DisplayOneChar(7,1,hour/10+0x30);
208 1 DisplayOneChar(8,1,hour%10+0x30);
209 1
210 1 DisplayOneChar(13,1,second/10+0x30);
211 1 DisplayOneChar(14,1,second%10+0x30);
212 1
213 1
214 1 WriteCommandLCM(0x0f,1); //显示屏打开,光标显示,闪烁,检测忙信号
215 1 DisplayOneChar(10,1,minite/10+0x30);
216 1 DisplayOneChar(11,1,minite%10+0x30);
217 1
218 1
219 1
220 1 }
221 /*************液晶显示子函数3****************/
222
223 void displayfun3(void)
224 {
225 1 WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
226 1 DisplayListChar(0,0,str0);
227 1 DisplayListChar(0,1,str1);
228 1
229 1 DisplayOneChar(10,1,minite/10+0x30);
230 1 DisplayOneChar(11,1,minite%10+0x30);
231 1
232 1 DisplayOneChar(13,1,second/10+0x30);
233 1 DisplayOneChar(14,1,second%10+0x30);
234 1
235 1 WriteCommandLCM(0x0f,1); //显示屏打开,光标显示,闪烁,检测忙信号
236 1 DisplayOneChar(7,1,hour/10+0x30);
237 1 DisplayOneChar(8,1,hour%10+0x30);
238 1 }
239 /**************液晶显示子函数闹钟1*****************/
240 void displayfun4(void)
241 {
C51 COMPILER V7.20 液___允_电子时钟1 10/09/2008 18:51:13 PAGE 5
242 1 WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
243 1 DisplayListChar(0,0,str0);
244 1 DisplayListChar(0,1,str2);
245 1
246 1 DisplayOneChar(7,1,shour/10+0x30); //液晶上显示闹钟小时
247 1 DisplayOneChar(8,1,shour%10+0x30);
248 1
249 1 DisplayOneChar(10,1,sminite/10+0x30); //液晶上显示闹钟分
250 1 DisplayOneChar(11,1,sminite%10+0x30);
251 1
252 1 DisplayOneChar(13,1,second/10+0x30); //液晶上显示秒
253 1 DisplayOneChar(14,1,second%10+0x30);
254 1 }
255
256 /**************液晶显示子函数闹钟2*****************/
257 void displayfun5(void)
258 {
259 1 WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
260 1 DisplayListChar(0,0,str0);
261 1 DisplayListChar(0,1,str2);
262 1
263 1 DisplayOneChar(7,1,shour/10+0x30);
264 1 DisplayOneChar(8,1,shour%10+0x30);
265 1
266 1 DisplayOneChar(13,1,second/10+0x30);
267 1 DisplayOneChar(14,1,second%10+0x30);
268 1
269 1
270 1 WriteCommandLCM(0x0f,1); //显示屏打开,光标显示,闪烁,检测忙信号
271 1 DisplayOneChar(10,1,sminite/10+0x30);
272 1 DisplayOneChar(11,1,sminite%10+0x30);
273 1
274 1 }
275 /**************液晶显示子函数闹钟3*****************/
276 void displayfun6(void)
277 {
278 1 WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
279 1 DisplayListChar(0,0,str0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -