12864LCD显示倒计时程序_第1页
12864LCD显示倒计时程序_第2页
12864LCD显示倒计时程序_第3页
12864LCD显示倒计时程序_第4页
12864LCD显示倒计时程序_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、12864LCD显示倒计时程序 简介:第一行显示,距离系统爆炸时间 第二行显示,还剩 第三行显示, 00 时,00分,00秒 第四行显示,周林 按下旋钮开关,开始设定秒,秒编辑位闪动。左右旋转设定数值, 在按下开关,秒确定,设定分,分编辑位闪动左右调数值, 再按下,分确定,小时位闪动。左右转调小时,再按一下。时间确定,开始倒计时。到达定 时时间后停止,并闪动。 #include #include /* #define LCD_data P0 定义 */ / 数据口 sbit LCD_RS = P2人0; /寄存器选择输入 sbit LCD_RW = P2人1; 液晶读/写控制 sbit LCD

2、_EN = P2八2; /液晶使能控制 sbit LCD_ PSB = P2 人 3; /串 / 并方式控制 sbit LCD_RST = P2人5; /液晶复位端口 sbit sset= P3M;/ 设置按钮 sbit spk=P 1人4; sbit sadd=卩2人7; sbit sdel=卩2人6; signed char second=0,minute=0,hour=0,count=0,keycount=0; signed char key=0; unsigned char code DIS1 = 距离系统爆炸时间 ; unsigned char code DIS2 = 还剩: ; u

3、nsigned char code DIS31 = 时 ; unsigned char code DIS32 = 分 ; unsigned char code DIS33 = 秒 ; unsigned char code DIS4 = 周林 ; unsigned char code table2=0123456789; char code reserve3_at_ 0 x3b; / 保留 0 x3b 开始的 3 个字节 /* 延时子函数 */ void delayNOP()/us 延时子函数 (4.34us) _nop_(); _nop_(); _nop_(); _nop_(); void d

4、elayms(unsigned int ms)/ms 延时子函数 unsigned char y; while (ms-) for (y = 0; y 114; y+) LCD,忙状* /* bit lcd_busy()/检查LCD忙状态 1忙,0闲 bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0 LCD_EN = 0; return (result); /* 写指令数据 * void lcd_wcmd(unsigned char cmd)/ 写指令数据到 LCD while (lcd_

5、busy() LCD_RS = 0; LCD_RW = 0; LCD_EN = 1; P0 = cmd; delayNOP(); LCD_EN = 0; void lcd_wdat(unsigned char dat)/ 写显示数据到 LCD while (lcd_busy() LCD_RS = 1; LCD_RW = 0; LCD_EN = 1; P0 = dat; delayNOP(); LCD_EN = 0; void writesmh(unsigned char add,unsigned char date)/ 显示个位和十位数据 unsigned char shi,ge; shi=d

6、ate/10; ge=date%10; lcd_wcmd(0 x80+add); delayms(5); lcd_wdat(table2shi); delayms(5); lcd_wdat(table2ge); delayms(5); /* 初始化设定 * 3 / 12 12864LCD显示倒计时程序 X = 0 x90; 5 / 12 void lcd_init() LCD_PSB = 1; /并口方式 LCD_RST = 0; /液晶复位 delayms(5); / 液晶复位 LCD_RST = 1; /液晶复位 delayms(5); / 液晶复位 lcd_wcmd(0 x34); /

7、扩充功能设定,扩充指令,选 delayms(5); lcd_wcmd(0 x30); / 功能设定,基本指令操作,选 delayms(5); 8 位数据 8 位数据 lcd_wcmd(0 x0C); / 显示开,关光标,关光标反白允许。 delayms(5); lcd_wcmd(0 x04); / 光标的移动方向 delayms(5); lcd_wcmd(OxO1); /清除LCD的显示内容 delayms(5); TMOD=0 x01; TH0=0 x3C; TL0=0 xB0; EA=1; ET0=1; TR0=0; EXO=O; /外部中断0允许 IT0=1; /外部中断0为边沿触发方式

8、 /* 设定显示位置子函数 * void lcd_pos(unsigned char X, unsigned char Y)/ 设定显示位置 unsigned char pos; if (X = 1) X = 0 x80; else if (X = 2) 12864LCD显示倒计时程序 else if (X = 3) X = 0 x88; else if (X = 4) X = 0 x98; pos = X + Y; /确定显示地址 lcd_wcmd(pos); / 写显示地址 /* 清屏子函数 * 7 / 12 void clr_screen()/ 清屏子函数 lcd_wcmd(0 x34)

9、; / delayms(5); lcd_wcmd(0 x30); / delayms(5); lcd_wcmd(0 x01); / delayms(5); 扩充指令操作 基本指令操作 清屏 /* 闪烁子函数 * void lcdflag() lcd_wcmd(0 x08); / delayms(500); lcd_wcmd(0 x0c); / delayms(500); lcd_wcmd(0 x08); delayms(500); lcd_wcmd(0 x0c); delayms(500); lcd_wcmd(0 x08); delayms(500); lcd_wcmd(0 x0c); del

10、ayms(500); 关闭显示 开启显示 /* 写字符串子函数 * 12864LCD显示倒计时程序 9 / 12 void wr_string(unsigned char str)/ 写字符串子函数 unsigned char num = 0; while (strnum) lcd_wdat(strnum+); / 写数据 /*按键设置时间 * void keyscan()/ 按键设置时间 if(sset=0) delayms(10); if(sset=0) EX0=1; keycount+; while(sset=0) if(keycount=1) / 停止计时 TR0=0; key=1;

11、keycount=2; lcd_wcmd(0 x8e); lcd_wcmd(0 x0d);/ 秒位闪烁 if(keycount=2) if(keycount=3)keycount=4; 分位闪烁 光标左移一位 时位闪烁 lcd_wcmd(0 x8c); lcd_wcmd(0 x0d);/ /lcd_wcmd(0 x04); if(keycount=4) if(keycount=5) keycount=6; lcd_wcmd(0 x8a); lcd_wcmd(0 x0d);/ if(keycount=6) if(keycount=7) keycount=0; lcd_wcmd(0 x0c);/

12、停止闪烁 TR0=1;/ 开始计时 EX0=1; if(keycount!=0) if(keycount=2)/ 编辑秒 if(sadd=0)/ 数值加 1 delayms(10); if(sadd=0) second+; 12864LCD和引厘斗肆敲 if(secondHH60) 宀 second。- sadcM 八 wmesmh(oxoeysecond)八 -Cdlwc3d(ox8e)八 -Cdlwc3d(oxod)y/ |3拿 if(sde帀Ho)/、達血蓦 宀 de-aymsuo= if(sde-HHO) 宀 if(secondHHO) 宀 secondH6q 1 second丄 sd

13、e-巴八 wmesmh(oxoeysecond)八 -Cdlwc3d(ox8e)八 -Cdlwc3d(oxod)y/ if(keycounfHH4)v 舒輸步霁 宀 if(saddHHO)/、蒲血莒 1 宀 de-aymsuo)八八 if(saddH0) 宀 3inufe+八 if(minufeHH60) 宀 minufeua saddur wmes3h(OXOG3inufe)八 -Cdlwc3d(ox8c)八 -Cdlwc3d(oxod)y/ 拿 jf(sde-HHO)w 達曲溥 1 宀 de-aymsuo)八 if(sde 帀 H0) 宀 if(3inufeHH0) 宀 minufeH60

14、 八 minufe!八 Sde-Hl 八 wmes3h(OXOG3inufe)八 -Cdlwcrnd(ox8c= 一Cdlwc3d(oxod)y、拿 if(keycounfHH6=/ 舒輸、4 宀 if(saddHHO)/、蒲血莒 宀 de-aymsuo)八 if(saddHHO) 宀 hour+八 if(hourHH24) 宀 RlinufeHa saddur wmesmh(oxophour)八 -Cdlwc3d(ox8a)八 -Cdlwc3d(oxod)y/ 肆3拿 12864LCD显示倒计时程序 if(sdel=0)/ 数值减 1 delayms(10); if(sdel=0) if(h

15、our=0) hour=24; hour-; sdel=1; writesmh(0 x0a,hour); lcd_wcmd(0 x8a); lcd_wcmd(0 x0d);/ 时位闪烁 / 主函数主函数主函数主函数主函数主函数主函数主函数主函数主函数主函数主函数主函 数主函数 void main() delayms(100); / 上电,等待稳定 lcd_init(); / 初始化 LCD lcd_pos(1, 0); / 设置显示位置为第一行 wr_string(DIS1); lcd_pos(2, 0); / 设置显示位置为第二行 wr_string(DIS2); lcd_pos(3, 3)

16、; / 设置显示位置为第四行 wr_string(DIS31); lcd_pos(3, 5); / 设置显示位置为第四行 wr_string(DIS32); lcd_pos(3, 7); / 设置显示位置为第四行 wr_string(DIS33); lcd_pos(4, 6); / 设置显示位置为第四行 10 / 15 12864LCD显示倒计时程序 wr_string(DIS4); writesmh(0 x0e,second); delayms(5); writesmh(0 x0c,minute); delayms(5); writesmh(0 x0a,hour); delayms(5);

17、while (1) keyscan(); 中断 * /* void time0() interrupt 1 using 0/ 倒计时中断 TH0=0 x3C; TL0=0 xB0; count+; if(count=20) count=0; second-; if(second0) second=59; minute-; if(minute0) minute=59; hour-; if(hour0) hour=24; lcd_pos(3, 2); / 设置显示位置为第三行,第七列 writesmh(0 x0a,hour); 12864LCD显示倒计时程序 lcd_pos(3, 4); / 设置显示位置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论