版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2010年10月26111,完成三个按键控制年月”时分的加减
2,完成时分年月日的进位转换,测试成功。(注意闰年二月的转换)
3,增加液晶调整提示。
4,增加星期换算,未成功(待完成)。
5,调整年份显示方法,只调整后2位,前2位固定,显示正确(偷懒做法)
#include<AT89X52.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitCS=P00
sbitSCK=P(T2
sbitSID二P0」
charyear=l1;mon=12;day=31;hour=23,min=59,sec=56,yqian=0;/*时、分、秒
单元清零*/
charDATA7SEG[10]=〃0123456789〃;
charweek[7][7]={〃星期一〃,〃星期二〃,〃星期三〃,〃星期四〃,〃星期五〃,〃星期六〃,〃星期日
〃};
uchardeda=O,shan=O,wd=l,wp;/*5mS计数单元清零*/
ucharj=2,i=l;〃在此设定时间显示的位置
ucharrqh=l,rql=0;
uchars[7]={0};
bitd05s=0;1*0.5秒标志*/
ucharset=O,te=O;/*模式设定标志*/
ucharm=O;
ucharflag=O;ARAM掉电标志*/
voiddelay(uintk);/*延时?函数*/
voidconv();/*走时单元转换*/
voiddisp();
unsignedcharcodeACTABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
);
voidSendByte(unsignedcharDbyte)
unsignedchari;
for(i=0;i<8;i++)
(
SCK=0;
Dbyte=Dbyte«l;
SID=CY;
SCK=1;
SCK=0;
}
unsignedcharReceiveByte(void)
(
unsignedchari,tempi,temp2;
templ=temp2z:0;
for(i=0;i<8;i++)
(
templ=templ«l;
SCK=0;
SCK=1;
SCK=0;
if(SID)templ++;
)
for(i=0;i<8;i++)
(
temp2=temp2<<l;
SCK=0;
SCK=1;
SCK=0;
if(SID)temp2++;
}
return((OxfO&templ)+(0x0f&temp2));
}
voidCheckBusy(void)
(
doSendByte(Oxfc);//lllll,RW(1),RS(0),0
while(0x80&ReceiveByte());
}
voidWriteCommand(unsignedcharCbyte)
CS=1;
CheckBusy();
SendByte(0xf8);//lllll,RW(O),RS(0),0
SendByte(OxfO&Cbyte);
SendByte(0xf0&Cbyte«4);
CS=0;
)
voidWriteData(unsignedcharDbyte)
(
CS=1;
CheckBusy();
SendByte(Oxfa);//lllll,RW(0),RS(1),0
SendByte(OxfO&Dbyte);
SendByte(0xf0&Dbyte«4);
CS=0;
)
unsignedcharReadData(void)
(
CheckBusy();
SendByte(Oxfe);//lllll,RW(1),RS(1),0
returnReceiveByteO;
)
voiddelay(unsignedintMS)
(
unsignedcharus,usn;
while(MS!=0)//for12M
{USD=2;
while(usn!=0)
(
us=0xf5;
while(us!=0){us一;};
usn——;
)
MS—;
)
)
voidLcmlnit(void)
WriteCommand(0x30);〃基本动作指令
WriteCommand(0x03);〃光标归位
WriteCommand(OxOC);〃现实状态
WriteCommand(OxOl);〃清屏
WriteCommand(0x06);
)
voidLcmClearTXT(void)
(
unsignedchari;
WriteCommand(0x30);
WriteCommand(0x80);
for(i=0;i<64;i++)
WriteData(0x20);
)
voidPutStr(unsignedcharrow,unsignedcharcol,unsignedchar*puts)
(
WriteCommand(0x30);
WriteCommand(AC_TABLE[8*row+col]);
while(*puts!='\0')
(
if(col==8)
(
col=0;
row++;
)
if(row-4)row=0;
WriteCommand(ACTABLE[8*row+co1]);
WriteData(*puts);
puts++;
WriteData(*puts);
puts++;
col++;
)
)
/*------------------------走时?函数部分-----------------------*/
/*定时器TO5nls初始化*/
voidinit_timer0
(
TM0D=0x01;
TH0=-(4800/256);
TL0=-(4800%256);
IE=0x82;
TRO=1;
/*5mS定时中断服务?函数*/
voidT0_srv(void)interrupt1
(
THO-(4800/256);
TL0=-(4800%256);
deda++;
}
/*----------------------------------*/
/*时、分、秒单元及走时单元转换*/
voidconv()
{yqian=year+2000;
if(deda<=100)d05s=0;
elsed_05s=l;
if(deda>=200){sec++;deda=0;shan=^shan;}
if(sec=60){min++;sec=0;}
if(min==60){hour++;min=0;}
if(hour==24){hour=0;day++;}
if(mon==lI!mon==31|mon=5!;mon==7||mon==8,|mon==10:mon=二⑵
{if(day==32){mon++;day=l;}
)
elseif(mon==2){
if(yqian%100==0){
if(yqian%400=0){if(day==30){mon++;day=1;}}
elseif(day==29){mon++;day=l;}
else{
if(yqian%4==0){if(day==30){mon++;day=l;}}
elseif(day==29){mon++;day=l;}
elseif(day=31){mon++;day=l;}
if(mon==13){year++;mon=l;}
if(day!=wp){wd++;
if(wd>=7)wd=0;
wp二day;
}
/*-------------------------显示?函数部分------------------------*/
/*走时时间显示?函数*/
voiddispO
(
s[0]=DATA_7SEG[year/10];
s[l]=DATA_7SEG[year%10];
PutStr(rqh,rql+1,s);
s[0]=DATA7SEG[mon/10];
s[l]=DATA_7SEG[mon%10];
PutStr(rqh,rql+3,s);
s[0]=DATA_7SEG[day/10];
s[l]=DATA_7SEG[day%10];
PutStr(rqh,rql+5,s);
s[0]=DATA_7SEG[hour/10];
s[l]=DATA_7SEG[hour%10];
PutStr(j,i,s);
s[0]=DATA7SEG[min/10];
s[l]=DATA_7SEG[min%10];
PutStr(j,i+2,s);
s[0]=DATA_7SEG[sec/10];
s[l]=DATA.7SEG[sec%10];
PutStr(j,i+4,s);
PutStr(3,l,week[wd]);
}
/*----------------------调整时间?函数部分--------------------*/
/*调整走时时间*/
voidset_time()
{ucharm;
if(te==2){
if(P2_l==0)delay(1);
if(P2_l==0){hour++;
if(hour==24)hour=0;}
if(P2_0=0){hour—;
if(hour==-l)hour=23;}
for(m=0;m<30;m++)
(
dispO;
if(P2_2==0)P0_7=0;
elseP0_7=l;
delay(1);
PutStr(0,0,〃时〃);
)
)
if(te==l){
if(P2」=0)delay(1);
if(P2,1=0){min++;
if(min==60)min=0;}
if(P2_0=0){min—;
if(min==-l)min=59;}
for(m=0;m<30;m++)
(
dispO;
if(P2j==0)P07=0;
elseP0_7=l;
delay(1);
PutStr(0,0,〃分“);
)
)
if(te==3){
if(P2_l==0)delay(l);
if(P2l==0){year++;if(year=100)year=0;}
if(P2_0-0){year-;if(year==-1)year=99;}
for(m=0;m<30;m++)
(
dispO;
if(P2_2==0)P0_7=0;
elseP0_7=l;
delay(1);
PutStr(O,0,〃年〃);
)
}
if(te==4){
if(P2_l==0)delay(1);
if(P2_l==0){mon++;
if(mon==13)mon=l;}
if(P2_0=0){mon--;
if(mon==0)mon=12;}
for(m=0;m<30;m++)
(
dispO;
if(P2_2==0)P0_7=0;
elseP0_7=l;
delay(1);
PutStr(0,0,“月");
)
)
if(te==5){
if(P2」=0)delay(1);
if(P2,1=0){day++;
if(day==32)day=l;}
if(P2_0=0){day—;
if(day-0)day=31;}
for(m=0;m<30;m++)
(
dispO;
if(P2_2==0)P0_7=0;
elseP0_7=l;
delay(1);
PutStr(0,0,〃日〃);
/*------------------按键扫描、延时等?函数部分--------------------*/
/*走时时间程序?函数*/
voidtime()
(
conv();/*走时单元转换?函数*/
dispO;/*走时时间显示?函数*/
}
/*.*/
/*扫描按键?函数*/
voidscan_key()
(
delay⑴;
if(P2_2==0){set=l;te++;}
if(te>=6){set=0,te=O;PutStr(0,0,〃");}
if(te==l)flag=0x55;
F0:if(P2_2=0)gotoF0;/*按键未释放,在此等候*/
)
/*-------------------------------*/
/*延时?函数*/
/*--------------------------主函数------------------------------*/
/*主函数*/
voidmain()
{Lcmlnit();
LcmClearTXT();
PutStr(0,2,〃现在时间是〃);
PutStr(rqh,rql,,z20z,);
PutStr(rqh,rql+2,"年");
PutStr(rqh,rql+4,〃月〃);
PutStr(rqh,rql+6,〃日“);
PutStr(j,i+1,〃时〃);
PutStr(j,i+3,"分”);
PutStr(j,i+5,〃秒〃);
wp=day;
//PutStr(3,6,〃当前时间〃);
init_timer();/*定时器T0初始化*/
while(l)/*无限循环*/
if(P2_2==0)scan_key();/*有按键,调用按键扫描?函数*/
switch(set)/*根据set键值散转*/
case0:time();break;/*走时时间程序*/
case1:set_time();break;/*走时时间调整*/
default:break;/*其它退出*/
)
if(flag!=0x55)/*判断掉电标志*/
PO=OxcO;P2=0xc0;delay(100);
P2=0xff;delay(400);
)
)
)
2010年10月30日:改进为利用1602做万年历,调试成功
#include<at89x52.h>
#include<intrins.h>
#definenop_nop_()
#defineDBP0
#defineucharunsignedchar
#defineuintunsignedint
*****/
charyear=10;mon=10;day=30;hour=21,min=6,sec=56,yqian=0;/*时、分、秒
单元清零*/
char
//,,
DATA_7SEG[10]=0123456789)week[7][3]={"Mom","Tue","Wed","Thu","Fri","Sat","Sun"
};
uchardeda=0,shan=0,wd=l,wp;
ucharnl=2,nh=2,sl=4,sh=l;
uchars[7]={0};
bitd_05s=0;/*0.5秒标志*/
ucharset=0,te=0;/*模式设定标志*/
ucharUFO;
ucharflag=0;/*RAM掉电标志*/
voiddelay(uintk);/*延时?函数*/
voidconv();/*走时单元转换*/
voiddisp();
sbitE=P2c2;
sbitRW=P21;
sbitRS=P2P;
voidinit(void);
voidwrite_com(unsignedcharcommand);
voidwritedata(unsignedchardat);
voiddisp_char(unsignedcharx,unsignedchary,unsignedchardat);
voidcheckbusy(void);
voiddelay_n40us(unsignedintn);
voidinit(void)
(
write_com(0x38);
delayn40us(500);
write_com(0x38);
delayn40us(500);
write_com(0x38);
writecom(0x0c);
write_com(0x01);
write_com(0x0f);
write_com(0x06);
write_com(0x01);
delay_n40us(100);
)
voidwrite_com(unsignedcharcommand)
DB=command;
RS=O;
RW=O;
E=1;
nop;
E=0;
delay_n40us(l);
}
voidwrite_data(unsignedchardat)
(
DB=dat;
RS=1;
RW=0;
E=l;
nop;
E=0;
delay_n40us(l);
)
voiddisp_char(unsignedcharx,unsignedchary,unsignedchardat)
(
unsignedcharaddress;
if(y==l)address=0x80+x;
elseaddress=0xc0+x;
writecom(address);
write_data(dat);
)
voiddisp_s(unsignedcharx,unsignedchary,unsignedcharwd)
(
disp_char(x,y,week[wd][0]);
dispchar(x+1,y,week[wd][1]);
disp_char(x+2,y,week[wd][2]);
)
voidcheck_busy(void)
(
do
(
E=0;
RS=O;
RW=1;
DB=0xff;
E=l;
}while((DB&0x80)==0x80);
}
voiddelay_n40us(unsignedintn)
unsignedinti,j;
for(i=n;i>0;i--)
for(j=2;j>0;j-);
/*------------------------走时?函数部分-----------------------*/
/*定时器TO5ms初始化*/
voidinit_timer()
(
TM0D=0x01;
TH0=-(4800/256);
TL0=-(4800%256);
IE=0x82;
TRO=1;
)
/*----------------------------------*/
/*5mS定时中断服务?函数*/
voidTOsrv(void)interrupt1
(
TH0=-(4800/256);
TL0=-(4800%256);
deda++;
)
/*-----------------------------------*/
/*时、分、秒单元及走时单元转换*/
voidconv()
{yqian=year+2000;
if(deda<=100)d05s=0;
elsed_05s=l;
if(deda>=200){sec++;deda=0;shan="shan;}
if(sec==60){min++;sec=0;}
if(min==60){hour++;min=0;}
if(hour==24){hour=0;day++;}
if(mon==l|imon==31|mon==51mon==7||mon==8,|mon==10,mon==12)
{if(day==32){mon++;day=l;}
}
elseif(mon==2){
if(yqian%100==0){
if(yqian%400=0){if(day==30){mon++;day=l;}}
elseif(day==29){mon++;day=1;}
}
else{
if(yqian%4=0){if(day==30){mon++;day=l;}}
elseif(day==29){mon++;day=1;}
}
)
elseif(day==31){mon++;day=l;}
if(mon=13){year++;mon=l;}
if(day!=wp){wd++;
if(wd>=7)wd=0;
wp=day;
)
}
/*-------------------------显示?函数部分-----------------------*/
/*走时时间显示?函数*/
voiddisp()
(
s[0]=DATA7SEG[year/10];
s[l]=l)ATA_7SEG[year%10];
dispchar(nl,nh,s[0]);
disp_char(nl+1,nh,s[l]);
s[0]=DATA_7SEG[mon/10];
s[l]=DATA_7SEG[mon%10];
disp_char(nl+3,nh,s[0]);
disp_char(nl+4,nh,s[l]);
s[0]=DATA_7SEG[day/10];
s[l]=DATA_7SEG[day%10];
disp_char(nl+6,nh,s[0]);
disp_char(nl+7,nh,s[l]);
s[0]=DATA_7SEG[hour/10];
s[l]=DATA_7SEG[hour%10];
disp_char(si,sh,s[0]);
disp_char(sl+1,sh,s[l]);
s[0]=DATA_7SEG[min/10];
s[l]=DATA_7SEG[min%10];
disp_char(sl+3,sh,s[0]);
disp_char(sl+4,sh,s[l]);
s[0]=DATA_7SEG[sec/10];
s[l]=DATA_7SEG[sec%10];
disp_char(sl+6,sh,s[0]);
disp_char(sl+7,sh,s[l]);
]*******************火***夕)z^j*****************************************/
if(d_05s){
disp_char(sl+2,sh,';
dispchar(sl+5,sh,'/);
)
else{
disp_char(sl+2,sh,'');
dispchar(sl+5,sh,'');
)八
disp_s(13,2,wd);
/*-----------------------调整时间?函数部分--------------------*/
/*调整走时时间*/
voidset_time()
{ucharm;
if(te==2){
if(P3_l==0)delay(1);
if(P3_l==0){hour++;
if(hour==24)hour=0;}
if(P3_0==0){hour--;
if(hour==-l)hour=23;}
for(m=0;m<30;m++)
(
dispO;
if(P3_2==0)P0_7=0;
elseP0_7=l;
delay(1);
}
)
if(te==l){
if(P3_l=0)delay(1);
if(P3_l==0){min++;
if(min==60)min=0;}
if(P3_0==0){min—;
if(min==-l)min=:59;}
for(m=0;m<30;m++)
(
dispO;
if(P3_2==0)P07=0;
elseP0_7=l;
delay(1);
if(te==3){
if(P3_l==0)delay(l);
if(P3l==0){year++;if(year=100)year=0;}
if(P3_0==0){year-;if(year==-1)year=99;}
for(m=0;m<30;m++)
(
dispO;
if(P3_2=0)P0_7=0;
elseP0_7=l;
delay(1);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淀粉产品在汽车工业行业的应用研究考核试卷
- 油炸食品的食品包装与市场销售考核试卷
- 水资源保护与可持续利用解决全球水危机考核试卷
- 电子靶技术在海水淡化处理中的应用考核试卷
- DB11T 889.4-2013 文物建筑修缮工程操作规程 第4部分:彩画作
- 瓦当陶艺课件教学课件
- 暖流课件图片教学课件
- s字母课件教学课件
- 自媒体写作技巧培训
- 淮阴工学院《精密机械基础》2021-2022学年第一学期期末试卷
- 小学六年级数学上册口算题300道(全)
- 《干粉灭火器检查卡》
- 校园监控值班记录表(共2页)
- 试桩施工方案 (完整版)
- 走中国工业化道路的思想及成就
- ESTIC-AU40使用说明书(中文100版)(共138页)
- 河北省2012土建定额说明及计算规则(含定额总说明)解读
- Prolog语言(耐心看完-你就入门了)
- 保霸线外加电流深井阳极地床阴极保护工程施工方案
- 蓝色商务大气感恩同行集团公司20周年庆典PPT模板
- 恒温箱PLC控制系统毕业设计
评论
0/150
提交评论