12864LCD显示倒计时程序Word格式文档下载.docx

上传人:b****5 文档编号:16504369 上传时间:2022-11-24 格式:DOCX 页数:17 大小:17.25KB
下载 相关 举报
12864LCD显示倒计时程序Word格式文档下载.docx_第1页
第1页 / 共17页
12864LCD显示倒计时程序Word格式文档下载.docx_第2页
第2页 / 共17页
12864LCD显示倒计时程序Word格式文档下载.docx_第3页
第3页 / 共17页
12864LCD显示倒计时程序Word格式文档下载.docx_第4页
第4页 / 共17页
12864LCD显示倒计时程序Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

12864LCD显示倒计时程序Word格式文档下载.docx

《12864LCD显示倒计时程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《12864LCD显示倒计时程序Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

12864LCD显示倒计时程序Word格式文档下载.docx

sbitspk=P1^4;

sbitsadd=P2^7;

sbitsdel=P2^6;

signedcharsecond=0,minute=0,hour=0,count=0,keycount=0;

signedcharkey=0;

unsignedcharcodeDIS1[]=

{

"

距离系统爆炸时间"

};

unsignedcharcodeDIS2[]=

还剩:

"

unsignedcharcodeDIS31[]=

时"

unsignedcharcodeDIS32[]=

分"

unsignedcharcodeDIS33[]=

秒"

unsignedcharcodeDIS4[]=

周林"

unsignedcharcodetable2[]="

0123456789"

;

charcodereserve[3]_at_0x3b;

//保留0x3b开始的3个字节

/*********************延时子函数**************************/

voiddelayNOP()//us延时子函数(4.34us)

_nop_();

}

voiddelayms(unsignedintms)//ms延时子函数

unsignedchary;

while(ms--)

{

for(y=0;

y<

114;

y++)

;

}

//******************检查LCD忙状态**************************

bitlcd_busy()//检查LCD忙状态1忙,0闲

bitresult;

LCD_RS=0;

LCD_RW=1;

LCD_EN=1;

delayNOP();

result=(bit)(P0&

0x80);

LCD_EN=0;

return(result);

//***********************写指令数据***********************

voidlcd_wcmd(unsignedcharcmd)//写指令数据到LCD

while(lcd_busy())

LCD_RW=0;

P0=cmd;

voidlcd_wdat(unsignedchardat)//写显示数据到LCD

LCD_RS=1;

P0=dat;

voidwritesmh(unsignedcharadd,unsignedchardate)//显示个位和十位数据

unsignedcharshi,ge;

shi=date/10;

ge=date%10;

lcd_wcmd(0x80+add);

delayms(5);

lcd_wdat(table2[shi]);

lcd_wdat(table2[ge]);

//*********************初始化设定****************************

voidlcd_init()

LCD_PSB=1;

//并口方式

LCD_RST=0;

//液晶复位

LCD_RST=1;

lcd_wcmd(0x34);

//扩充功能设定,扩充指令,选8位数据

lcd_wcmd(0x30);

//功能设定,基本指令操作,选8位数据

lcd_wcmd(0x0C);

//显示开,关光标,关光标反白允许。

lcd_wcmd(0x04);

//光标的移动方向

lcd_wcmd(0x01);

//清除LCD的显示内容

TMOD=0x01;

TH0=0x3C;

TL0=0xB0;

EA=1;

ET0=1;

TR0=0;

EX0=0;

//外部中断0允许

IT0=1;

//外部中断0为边沿触发方式

//*********************设定显示位置子函数**********************

voidlcd_pos(unsignedcharX,unsignedcharY)//设定显示位置

unsignedcharpos;

if(X==1)

X=0x80;

elseif(X==2)

X=0x90;

elseif(X==3)

X=0x88;

elseif(X==4)

X=0x98;

pos=X+Y;

//确定显示地址

lcd_wcmd(pos);

//写显示地址

//*****************清屏子函数***************************

voidclr_screen()//清屏子函数

//扩充指令操作

//基本指令操作

//清屏

//******************闪烁子函数**************************

voidlcdflag()

lcd_wcmd(0x08);

//关闭显示

delayms(500);

lcd_wcmd(0x0c);

//开启显示

//******************写字符串子函数*************************

voidwr_string(unsignedcharstr[])//写字符串子函数

unsignedcharnum=0;

while(str[num])

lcd_wdat(str[num++]);

//写数据

//********************按键设置时间*************************

voidkeyscan()//按键设置时间

if(sset==0)

delayms(10);

if(sset==0)

{

EX0=1;

keycount++;

while(sset==0)

{

;

}

if(keycount==1)

TR0=0;

//停止计时

key=1;

keycount=2;

lcd_wcmd(0x8e);

lcd_wcmd(0x0d);

//秒位闪烁

if(keycount==2)

if(keycount==3)

keycount=4;

lcd_wcmd(0x8c);

//分位闪烁

//lcd_wcmd(0x04);

光标左移一位

if(keycount==4)

if(keycount==5)

keycount=6;

lcd_wcmd(0x8a);

//时位闪烁

if(keycount==6)

if(keycount==7)

keycount=0;

lcd_wcmd(0x0c);

//停止闪烁

TR0=1;

//开始计时

EX0=1;

}

if(keycount!

=0)

if(keycount==2)//编辑秒

if(sadd==0)//数值加1

delayms(10);

if(sadd==0)

{

second++;

if(second==60)

{

second=0;

}

sadd=1;

}

writesmh(0x0e,second);

if(sdel==0)//数值减1

if(sdel==0)

if(second==0)

second=60;

second--;

sdel=1;

if(keycount==4)//编辑分钟

minute++;

if(minute==60)

minute=0;

writesmh(0x0c,minute);

if(minute==0)

minute=60;

minute--;

writesmh(0x0c,minute);

if(keycount==6)//编辑小时

hour++;

if(hour==24)

writesmh(0x0a,hour);

if(hour==0)

hour=24;

hour--;

writesmh(0x0a,hour);

//主函数主函数主函数主函数主函数主函数主函数主函数主函数主函数主函数主函数主函数主函数

voidmain()

delayms(100);

//上电,等待稳定

lcd_init();

//初始化LCD

lcd_pos(1,0);

//设置显示位置为第一行

wr_string(DIS1);

lcd_pos(2,0);

//设置显示位置为第二行

wr_string(DIS2);

lcd_pos(3,3);

//设置显示位置为第四行

wr_string(DIS31);

lcd_pos(3,5);

wr_string(DIS32);

lcd_pos(3,7);

wr_string(DIS33);

lcd_pos(4,6);

wr_string(DIS4);

writesmh(0x0e,second);

writesmh(0x0c,minute);

writesmh(0x0a,hour);

while

(1)

keyscan();

//**********************中断***************************

voidtime0()interrupt1using0//倒计时中断

count++;

if(count==20)

count=0;

second--;

if(second<

0)

second=59;

minute--;

if(minute<

minute=59;

hour--;

if(hour<

hour=24;

lcd_pos(3,2);

//设置显示位置为第三行,第七列

lcd_pos(3,4);

lcd_pos(3,6);

writesmh(0x0e,second);

if((second==0)&

&

(minute==0)&

(hour==0))//到点后响铃

TR0=0;

spk=0;

second=0;

minute=0;

hour=0;

lcdflag();

spk=1;

voidencoder(void)interrupt0//外部中断0旋转码开关中断程序

if(INT1==1)

{

sadd=0;

sdel=1;

if(INT1==0)

sdel=0;

sadd=1;

//*********************************************************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1