![程序,51單片機實現(xiàn)的液晶時鐘萬年歷_第1頁](http://file4.renrendoc.com/view10/M00/0A/30/wKhkGWWbk-qAZ5gwAAFsoNwltoY671.jpg)
![程序,51單片機實現(xiàn)的液晶時鐘萬年歷_第2頁](http://file4.renrendoc.com/view10/M00/0A/30/wKhkGWWbk-qAZ5gwAAFsoNwltoY6712.jpg)
![程序,51單片機實現(xiàn)的液晶時鐘萬年歷_第3頁](http://file4.renrendoc.com/view10/M00/0A/30/wKhkGWWbk-qAZ5gwAAFsoNwltoY6713.jpg)
![程序,51單片機實現(xiàn)的液晶時鐘萬年歷_第4頁](http://file4.renrendoc.com/view10/M00/0A/30/wKhkGWWbk-qAZ5gwAAFsoNwltoY6714.jpg)
![程序,51單片機實現(xiàn)的液晶時鐘萬年歷_第5頁](http://file4.renrendoc.com/view10/M00/0A/30/wKhkGWWbk-qAZ5gwAAFsoNwltoY6715.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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計數(shù)單元清零*/
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);/*延時?函數(shù)*/
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);〃現(xiàn)實狀態(tài)
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++;
)
)
/*------------------------走時?函數(shù)部分-----------------------*/
/*定時器TO5nls初始化*/
voidinit_timer0
(
TM0D=0x01;
TH0=-(4800/256);
TL0=-(4800%256);
IE=0x82;
TRO=1;
/*5mS定時中斷服務?函數(shù)*/
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;
}
/*-------------------------顯示?函數(shù)部分------------------------*/
/*走時時間顯示?函數(shù)*/
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]);
}
/*----------------------調整時間?函數(shù)部分--------------------*/
/*調整走時時間*/
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,〃日〃);
/*------------------按鍵掃描、延時等?函數(shù)部分--------------------*/
/*走時時間程序?函數(shù)*/
voidtime()
(
conv();/*走時單元轉換?函數(shù)*/
dispO;/*走時時間顯示?函數(shù)*/
}
/*.*/
/*掃描按鍵?函數(shù)*/
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;/*按鍵未釋放,在此等候*/
)
/*-------------------------------*/
/*延時?函數(shù)*/
/*--------------------------主函數(shù)------------------------------*/
/*主函數(shù)*/
voidmain()
{Lcmlnit();
LcmClearTXT();
PutStr(0,2,〃現(xiàn)在時間是〃);
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)/*無限循環(huán)*/
if(P2_2==0)scan_key();/*有按鍵,調用按鍵掃描?函數(shù)*/
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);/*延時?函數(shù)*/
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-);
/*------------------------走時?函數(shù)部分-----------------------*/
/*定時器TO5ms初始化*/
voidinit_timer()
(
TM0D=0x01;
TH0=-(4800/256);
TL0=-(4800%256);
IE=0x82;
TRO=1;
)
/*----------------------------------*/
/*5mS定時中斷服務?函數(shù)*/
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;
)
}
/*-------------------------顯示?函數(shù)部分-----------------------*/
/*走時時間顯示?函數(shù)*/
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);
/*-----------------------調整時間?函數(shù)部分--------------------*/
/*調整走時時間*/
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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版投資擔保合同風險控制條款3篇
- 如何記憶更多的知識點
- 二零二五年度鋰離子蓄電池銷售合同范本3篇
- 二零二五年度個人間家庭農場貸款合同3篇
- 零擔貨物運輸合同三篇
- 教師行業(yè)安全生產工作總結
- 二零二五年度影視制作公司演員個人聘用合同2篇
- 二零二五個人住宅租賃合同(含租賃保證金退還條件)2篇
- 二零二五年度個人擔保合同書范本:珠寶首飾抵押擔保
- 二零二五年度綠色快遞柜場地租賃與快遞代收協(xié)議書3篇
- 國際貿易地理 全套課件
- GB/T 20878-2024不銹鋼牌號及化學成分
- 某房屋建筑工程監(jiān)理大綱
- 英語考綱詞匯表3500詞
- 主題一:人文之美 第7課《天下第一大佛-樂山大佛》 課件
- 印度與阿拉伯的數(shù)學
- 會陰切開傷口裂開的護理查房
- 《鋼鐵是怎樣煉成的》選擇題100題(含答案)
- 2024年國新國際投資有限公司招聘筆試參考題庫含答案解析
- 食堂餐廳服務方案投標方案(技術標)
- Creo-7.0基礎教程-配套課件
評論
0/150
提交評論