b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

51单片机+1602液晶万年历程序(带按键)

电脑杂谈  发布时间:2019-07-19 06:05:37  来源:网络整理

1602单片机显示程序_1602程序_lcd1602单片机万年历程序

//温度显示函数

void writetemp(uchar add,uint dat)//写入温度值函数指定位置

{

uchar gw,sw,xw;//个位,十位,小数位(注意得到为三位有效数)

gw=dat0/10;/*特别注意此处*/

sw=dat/100;

xw=dat;

writecom(h2+add);//h2为头文件规定的值0x80+0x40

writedata(0x30+sw);//数字+30得到显示码

writedata(0x30+gw);//个位数

writedata(0x2e);//小数点

writedata(0x30+xw);//小数位

writedata(0xdf);//显示“°”(度)

//writedata(0x43);//显示“C”符号,为液晶字符的地址码(考虑是否要)

}

//时分秒显示函数

void writetime(uchar add,uchar dat)//写入时分秒

{

uchar gw,sw;

gw=dat;//取得个位数

sw=dat/10;//取得十位数

writecom(h2+add);//第二行显示

writedata(0x30+sw);//显示该数字

writedata(0x30+gw);

}

//年月日显示函数

void writeday(uchar add,uchar dat)//写入年月日函数

{

uchar gw,sw;

gw=dat;//取得个位数字

sw=dat/10;//取得十位数字

writecom(h1+add);//在第一行显示

writedata(0x30+sw);

writedata(0x30+gw);//显示

}

void writeweek(uchar week)//写星期函数

{

writecom(h1+0x0e);/*巨注意:第一行是从0位开始的*/

switch(week)

{

case 1:writedata('1');//括号内写入1注意是单引号

break;

case 2:writedata('2');

break;

case 3:writedata('3');

break;

case 4:writedata('4');

break;

case 5:writedata('5');

break;

case 6:writedata('6');

break;

case 7:writedata('7');

break;

}

}

//按键扫描函数

void keyscan()

{

if(key1==0)//设置键按下

{

delay(5);//延时

if(key1==0)

{

beep=0;//蜂鸣器短响一声

delay(20);

beep=1;

alarmflag=0;/*按下标志lcd1602单片机万年历程序,用于防止调节时间时鸣叫*/

while(!key1);

keynum++;

if(keynum==9)

keynum=1;//返回

switch(keynum)

{

case 1:TR0=0;//关闭定时器

writecom(h2+0x07);//秒的位置

writecom(0x0f);//设置为光标闪烁

temp=(miao)/10*16+(miao);//秒化为bcd码

write_1302(0x8e,0x00);

write_1302(0x80,0x80|temp);//秒数据写入

write_1302(0x8e,0x80);

break;

case 2:writecom(h2+4);//分的位置

break;//不用再次设置为闪烁状态了

case 3:writecom(h2+1);//时的位置

break;

case 4:writecom(h1+0x0e);//星期的位置

break;

case 5:writecom(h1+0x09);//日的位置

break;

case 6:writecom(h1+0x06);//月的位置

break;

case 7:writecom(h1+0x3);//年的位置

break;

case 8:writecom(0x0c);//第8次,光标不闪烁

alarmflag=1;/*设置标志重新设置为1*/

TR0=1;//重新打开定时器

temp=(miao)/10*16+(miao);

write_1302(0x8e,0x00);

write_1302(0x80,0x00|temp);//写入秒

write_1302(0x8e,0x80);

break;

}

}

}

if(keynum!=0)//当设置键按下时才能操作

{

if(key2==0)//加键

{

delay(5);

if(key2==0)

{

beep=0;//蜂鸣器短响

delay(20);

beep=1;

while(!key2);//按键松开

switch(keynum)

{

case 1:miao++;//

if(miao==60)miao=0;

writetime(0x06,miao);/*在十位的位置写入,因为为两位数,个位数自动再后面显示*/

temp=(miao)/10*16+(miao);//转换为bcd码

write_1302(0x8e,0x00);//允许写

write_1302(0x80,temp);// 写入秒

write_1302(0x8e,0x80);//打开保护

writecom(h2+0x07);//液晶模式为写入后自动右移,在此返回原来位置

break;

case 2:fen++;

if(fen==60) fen=0;

writetime(0x03,fen);//在十位数位置开始写入

temp=(fen)/10*16+(fen);//转换为bcd码

write_1302(0x8e,0x00);//允许写

write_1302(0x82,temp);//写入分

write_1302(0x8e,0x80);//打开保护

writecom(h2+4);//返回个位数的位置

break;

case 3:shi++;

if(shi==24) shi=0;

writetime(0,shi);//在0位开始写入

temp=(shi)/10*16+(shi);//转换为bcd码

write_1302(0x8e,0x00);//允许写

write_1302(0x84,temp);//写入时

write_1302(0x8e,0x80);//打开保护

writecom(h2+1);//返回到个位位置

break;

case 4:week++;

if(week==8) week=1;

writecom(h1+0x0e);//显示位置

writeweek(week);//写入星期

temp=(week)/10*16+(week);

write_1302(0x8e,0x00);//允许写入

write_1302(0x8a,temp);//写入周

write_1302(0x8e,0x80);//打开保护

writecom(h1+0x0e);/*此处有疑惑:返回原来位置?*/

break;

case 5:ri++;

if(ri==32) ri=1;

writeday(8,ri);//注意是在十位开始写入

temp=(ri)/10*16+(ri);//转换为bcd码

write_1302(0x8e,0x00);//允许写

write_1302(0x86,temp);//写入日

write_1302(0x8e,0x80);//打开保护

writecom(h1+9);//返回个位数

break;

case 6:yue++;

if(yue==13) yue=1;

writeday(5,yue);//在十位开始写入

temp=(yue)/10*16+(yue);//转换为bcd码

write_1302(0x8e,0x00);//允许写

write_1302(0x88,temp);//写入月

write_1302(0x8e,0x80);//打开保护

writecom(h1+6);//返回个位位置

break;

case 7:nian++;

if(nian==100) nian=0;

writeday(2,nian);//在第一行第三个字符开始写入

temp=(nian)/10*16+(nian);//转换为bcd码

write_1302(0x8e,0x00);//允许写

write_1302(0x8c,temp);//写入年

write_1302(0x8e,0x80);//打开保护

1602程序_lcd1602单片机万年历程序_1602单片机显示程序

writecom(h1+3);//返回个位位置

break;

}

}

}

//以下是减的函数

if(key3==0)

{

delay(5);//消抖

if(key3==0)

{

beep=0;//蜂鸣器短响一下

delay(20);

beep=1;

while(!key3);

switch(keynum)

{

case 1:miao--;/*此处有疑问:无符号数据是否要修改*/

if(miao==-1) miao=59;//减到-1返回59

writetime(0x06,miao);//在十位数写入

temp=(miao)/10*16+(miao);//转换为bcd码

write_1302(0x8e,0x00);//允许写

write_1302(0x80,temp);//写入秒

write_1302(0x8e,0x80);//打开保护

writecom(h2+0x07);//返回个位位置

break;

case 2:fen--;

if(fen==-1) fen=59;

writetime(0x03,fen);//在十位数位置写入

temp=(fen)/10*16+(fen);//转换为bcd码

write_1302(0x8e,0x00);//允许写入

write_1302(0x82,temp);//写入分

write_1302(0x8e,0x80);//打开保护

writecom(h2+4);//返回个位数位置

break;

case 3:shi--;

if(shi==-1) shi=23;

writetime(0,shi);//在0位开始写入

temp=(shi)/10*16+(shi);//转换为bcd码

write_1302(0x8e,0x00);//允许写入

write_1302(0x84,temp);//写入时

write_1302(0x8e,0x80);//打开保护

writecom(h2+1);//返回到个位位置

break;

case 4:week--;

if(week==0) week=7;

writecom(h1+0x0e);//显示位置

writeweek(week);//写入星期

temp=(week)/10*16+(week);//转换为bcd码

write_1302(0x8e,0x00);//允许写入

write_1302(0x8a,temp);//写入周

write_1302(0x8e,0x80);//打开保护

writecom(h1+0x0e);//返回原来位置

break;

case 5:ri--;

if(ri==0) ri=31;

writeday(8,ri);//在十位开始显示

temp=(ri)/10*16+(ri);//转换为bcd码

write_1302(0x8e,0x00);//允许写入

write_1302(0x86,temp);//写入日

write_1302(0x8e,0x80);//打开保护

writecom(h1+9);//返回个位数

break;

case 6:yue--;

if(yue==0) yue=12;

writeday(5,yue);//在十位数位置开始写入

temp=(yue)/10*16+(yue);//转换为bcd码

write_1302(0x8e,0x00);//允许写入

write_1302(0x88,temp);//写入月

write_1302(0x8e,0x80);//打开保护


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-114123-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 哥萨
      哥萨

      说的好听为了实业为实业你为什么存款利息和贷款利息降低的额度一样真为了实业贷款利息应该多降

    • 泰定帝也孙铁木儿
      泰定帝也孙铁木儿

      这蛆培养的这么肥

      • 井口裕香
        井口裕香

        但是都是顶级美食

    热点图片
    拼命载入中...