📄 51
字号:
185 函数功能:将数据(字符的标准ASCII码)写入液晶模块
186 入口参数:y(为字符常量)
187 ***************************************************/
188 void WriteData(unsigned char y)
189 {
190 1 while(BusyTest()==1);
191 1 RS=1; //RS为高电平,RW为低电平时,可以写入数据
192 1 RW=0;
193 1 E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,
194 1 // 就是让E从0到1发生正跳变,所以应先置"0"
195 1 P0=y; //将数据送入P0口,即将数据写入液晶模块
196 1 _nop_();
197 1 _nop_();
198 1 _nop_();
199 1 _nop_(); //空操作四个机器周期,给硬件反应时间
200 1 E=1; //E置高电平
201 1 _nop_();
202 1 _nop_();
203 1 _nop_();
204 1 _nop_(); //空操作四个机器周期,给硬件反应时间
205 1 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令
206 1 }
207 /*****************************************************
208 函数功能:对LCD的显示模式进行初始化设置
209 ***************************************************/
210 void LcdInitiate(void)
211 {
212 1 delaynms(15); //延时15ms,首次写指令时应给LCD一段较长的反应时间
213 1 WriteInstruction(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口
214 1 delaynms(5); //延时5ms ,给硬件一点反应时间
215 1 WriteInstruction(0x38);
216 1 delaynms(5); //延时5ms ,给硬件一点反应时间
217 1 WriteInstruction(0x38); //连续三次,确保初始化成功
218 1 delaynms(5); //延时5ms ,给硬件一点反应时间
219 1 WriteInstruction(0x0c); //显示模式设置:显示开,无光标,光标不闪烁
220 1 delaynms(5); //延时5ms ,给硬件一点反应时间
221 1 WriteInstruction(0x06); //显示模式设置:光标右移,字符不移
222 1 delaynms(5); //延时5ms ,给硬件一点反应时间
223 1 WriteInstruction(0x01); //清屏幕指令,将以前的显示内容清除
224 1 delaynms(5); //延时5ms ,给硬件一点反应时间
225 1
226 1 }
227 /**************************************************************
228 以下是1302数据的显示程序
229 **************************************************************/
230 /*****************************************************
231 函数功能:显示秒
232 入口参数:x
233 ***************************************************/
234 void DisplaySecond(unsigned char x)
235 {
236 1 unsigned char i,j; //j,k,l分别储存温度的百位、十位和个位
237 1 i=x/10;//取十位
238 1 j=x%10;//取个位
239 1 WriteAddress(0x49); //写显示地址,将在第2行第7列开始显示
240 1 WriteData(digit[i]); //将百位数字的字符常量写入LCD
241 1 WriteData(digit[j]); //将十位数字的字符常量写入LCD
C51 COMPILER V8.18 EX98 01/04/2010 16:37:15 PAGE 5
242 1 delaynms(50); //延时1ms给硬件一点反应时间
243 1 }
244
245 /*****************************************************
246 函数功能:显示分钟
247 入口参数:x
248 ***************************************************/
249 void DisplayMinute(unsigned char x)
250 {
251 1 unsigned char i,j; //j,k,l分别储存温度的百位、十位和个位
252 1 i=x/10;//取十位
253 1 j=x%10;//取个位
254 1 WriteAddress(0x46); //写显示地址,将在第2行第7列开始显示
255 1 WriteData(digit[i]); //将百位数字的字符常量写入LCD
256 1 WriteData(digit[j]); //将十位数字的字符常量写入LCD
257 1 delaynms(50); //延时1ms给硬件一点反应时间
258 1 }
259 /*****************************************************
260 函数功能:显示小时
261 入口参数:x
262 ***************************************************/
263 void DisplayHour(unsigned char x)
264 {
265 1 unsigned char i,j; //j,k,l分别储存温度的百位、十位和个位
266 1 i=x/10;//取十位
267 1 j=x%10;//取个位
268 1 WriteAddress(0x43); //写显示地址,将在第2行第7列开始显示
269 1 WriteData(digit[i]); //将百位数字的字符常量写入LCD
270 1 WriteData(digit[j]); //将十位数字的字符常量写入LCD
271 1 delaynms(50); //延时1ms给硬件一点反应时间
272 1 }
273 /*****************************************************
274 函数功能:显示日
275 入口参数:x
276 ***************************************************/
277 void DisplayDay(unsigned char x)
278 {
279 1 unsigned char i,j; //j,k,l分别储存温度的百位、十位和个位
280 1 i=x/10;//取十位
281 1 j=x%10;//取个位
282 1 WriteAddress(0x0c); //写显示地址,将在第2行第7列开始显示
283 1 WriteData(digit[i]); //将百位数字的字符常量写入LCD
284 1 WriteData(digit[j]); //将十位数字的字符常量写入LCD
285 1 delaynms(50); //延时1ms给硬件一点反应时间
286 1 }
287 /*****************************************************
288 函数功能:显示月
289 入口参数:x
290 ***************************************************/
291 void DisplayMonth(unsigned char x)
292 {
293 1 unsigned char i,j; //j,k,l分别储存温度的百位、十位和个位
294 1 i=x/10;//取十位
295 1 j=x%10;//取个位
296 1 WriteAddress(0x09); //写显示地址,将在第2行第7列开始显示
297 1 WriteData(digit[i]); //将百位数字的字符常量写入LCD
298 1 WriteData(digit[j]); //将十位数字的字符常量写入LCD
299 1 delaynms(50); //延时1ms给硬件一点反应时间
300 1 }
301 /*****************************************************
302 函数功能:显示年
303 入口参数:x
C51 COMPILER V8.18 EX98 01/04/2010 16:37:15 PAGE 6
304 ***************************************************/
305 void DisplayYear(unsigned char x)
306 {
307 1 unsigned char i,j; //j,k,l分别储存温度的百位、十位和个位
308 1 i=x/10;//取十位
309 1 j=x%10;//取个位
310 1 WriteAddress(0x06); //写显示地址,将在第2行第7列开始显示
311 1 WriteData(digit[i]); //将百位数字的字符常量写入LCD
312 1 WriteData(digit[j]); //将十位数字的字符常量写入LCD
313 1 delaynms(50); //延时1ms给硬件一点反应时间
314 1 }
315
316 /*****************************************************
317 函数功能:主函数
318 ***************************************************/
319 void main(void)
320 {
321 1 unsigned char second,minute,hour,day,month,year; //分别储存苗、分、小时,日,月,年
322 1 unsigned char ReadValue; //储存从1302读取的数据
323 1 LcdInitiate(); //将液晶初始化
324 1 WriteAddress(0x01); //写Date的显示地址,将在第1行第2列开始显示
325 1 WriteData('D'); //将字符常量写入LCD
326 1 WriteData('a'); //将字符常量写入LCD
327 1 WriteData('t'); //将字符常量写入LCD
328 1 WriteData('e'); //将字符常量写入LCD
329 1 WriteData(':'); //将字符常量写入LCD
330 1 WriteAddress(0x08); //写年月分隔符的显示地址, 显示在第1行第9列
331 1 WriteData('-'); //将字符常量写入LCD
332 1 WriteAddress(0x0b); //写月日分隔符的显示地址, 显示在第1行第12列
333 1 WriteData('-'); //将字符常量写入LCD
334 1 WriteAddress(0x45); //写小时与分钟分隔符的显示地址, 显示在第2行第6列
335 1 WriteData(':'); //将字符常量写入LCD
336 1 WriteAddress(0x48); //写分钟与秒分隔符的显示地址, 显示在第2行第9列
337 1 WriteData(':'); //将字符常量写入LCD
338 1 Init_DS1302(); //将1302初始化
339 1 while(1)
340 1 {
341 2 ReadValue = ReadSet1302(0x81); //从秒寄存器读数据
342 2 second=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F);//将读出数据转化
343 2 DisplaySecond(second); //显示秒
344 2 ReadValue = ReadSet1302(0x83); //从分寄存器读
345 2 minute=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
346 2 DisplayMinute(minute); //显示分
347 2 ReadValue = ReadSet1302(0x85); //从分寄存器读
348 2 hour=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
349 2 DisplayHour(hour); //显示小时
350 2 ReadValue = ReadSet1302(0x87); //从分寄存器读
351 2 day=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
352 2 DisplayDay(day); //显示日
353 2 ReadValue = ReadSet1302(0x89); //从分寄存器读
354 2 month=((ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
355 2 DisplayMonth(month); //显示月
356 2 ReadValue = ReadSet1302(0x8d); //从分寄存器读
357 2 year=((ReadValue&0xf0)>>4)*10 + (ReadValue&0x0F); //将读出数据转化
358 2 DisplayYear(year); //显示年
359 2 }
360 1 }
361
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 775 ----
C51 COMPILER V8.18 EX98 01/04/2010 16:37:15 PAGE 7
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -