基于c8051f020的电子万年历

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includec8051f020.h#includestdio.h#includeintrins.hsbitRS=P1^0;sbitRW=P1^1;sbitE=P1^2;sbitPSB=P1^4;sbitRST=P1^3;#defineLCD_IOP2#defineucharunsignedchar#defineuintunsignedint#defineSET_DATARS=1;#defineSET_INCRS=0;#defineSET_READRW=1;#defineSET_WRITERW=1;#defineSET_EE=1;#defineCLR_EE=1;ucharcodeTAB1[]={欢迎使用系统};//第一行初始化ucharcodeTAB2[]={20年月日};//第二行初始化ucharcodeTAB3[]={星期::};//第三行初始化/*----------DS1302说明-------------*/charTAB_1302[]={0x00,0x21,0x0f,0x0a,0x09,0x03,0x0b};//定义向量组依次为秒、分、时、日、月、年ucharcodeTAB_XQ[]={一二三四五六日};//把DS1302数字日期转换为中文字符sbitT_CLK=P0^0;sbitT_IO=P0^1;sbitT_RST=P0^2;ucharbdatadatbyte;sbitdatbyte0=datbyte^0;sbitdatbyte7=datbyte^7;/*----------键盘说明------------*/sbitkey0=P0^3;sbitkey1=P0^4;sbitkey2=P0^5;//定义三个按键funtion_flag=0,temp_num=0;//调用时分秒标志,调用键盘处理标志/*----------函数说明-----------*/voidSYSCLK_Init(void);//系统时钟初始化函数voidPORT_Init(void);//端口初始化函数voidinit(void);//初始化函数voidLcdCheckBusy(void);//液晶读状态,忙检测处理函数voidLcdSendCmd(unsignedcharbyCmd);//液晶写命令子函数voidLcdSendData(unsignedcharbyDate);//液晶写数据函数voidDelayMs(unsignedintnDelay);//液晶延迟函数voidLcdInit(void);//液晶初始化voidw_1302byte(uchardate);//给1302写一个字节(上升沿)ucharr_1302byte(void);//读一个字节(下降沿)voidwrite_1302(ucharaddr,uchardate);//指定位置写数据ucharread_1302(ucharaddr);//指定位置读数据voidinit_1302(void);//初始化1302voidget_1302(void);//读取DS1302时钟信息voiddiv(ucharx,uchary,ucharval);voiddisplay(void);//显示函数voidscanner();//按键扫描函数/*---------主函数--------------*/main(){WDTCN=0xde;WDTCN=0xad;SYSCLK_Init();PORT_Init();init();while(1){scanner();//检测键盘if(!funtion_flag)//标志为0{display();//调用显示DelayMs(500);}}}voidinit(void)//初始化函数{uchari;LcdInit();DelayMs(50);init_1302();DelayMs(50);LcdSendCmd(0x80);while(TAB1[i]!='\0'){LcdSendData(TAB1[i]);i++;}i=0;DelayMs(100);LcdSendCmd(0x90);DelayMs(100);while(TAB2[i]!='\0'){LcdSendData(TAB2[i]);i++;DelayMs(50);}i=0;LcdSendCmd(0x88);DelayMs(100);while(TAB3[i]!='\0'){LcdSendData(TAB3[i]);i++;DelayMs(50);}//i=0;//LcdSendCmd(0x98);//DelayMs(100);//while(TAB4[i]!='\0')//{//LcdSendData(TAB4[i]);//i++;//DelayMs(50);//}i=0;DelayMs(50);display();DelayMs(500);}voidLcdCheckBusy(void)//忙检测函数{SET_INCSET_READCLR_ESET_Ewhile((LCD_IO&0x80)==0x80);CLR_ESET_INCSET_READ}voidLcdSendCmd(unsignedcharbyCmd)//发送命令{LcdCheckBusy();P2MDOUT|=0xff;SET_INCSET_WRITECLR_ELCD_IO=byCmd;_nop_();_nop_();SET_E;_nop_();_nop_();CLR_ESET_READSET_INCP2MDOUT=0x00;}voidLcdSendData(unsignedcharbyData)//发送数据{LcdCheckBusy();P2MDOUT|=0xff;SET_DATASET_WRITECLR_ELCD_IO=byData;_nop_();_nop_();SET_E;_nop_();_nop_();CLR_E;SET_READSET_INCP2MDOUT=0x00;}voidLcdInit(void){LcdSendCmd(0x30);//基本指令功能DelayMs(50);LcdSendCmd(0x0c);//显示打开,关光标DelayMs(50);LcdSendCmd(0x01);//清屏幕DelayMs(50);LcdSendCmd(0x06);//AC自动加一}voidw_1302byte(uchardate){uchari;datbyte=date;for(i=0;i8;i++){T_IO=datbyte0;T_CLK=0;T_CLK=1;datbyte=1;}}ucharr_1302byte(void){uchari;datbyte=0;for(i=0;i8;i++){datbyte7=T_IO;//读最低位T_CLK=1;T_CLK=0;datbyte=1;}return(datbyte);}voidwrite_1302(ucharaddr,uchardate)//指定位置写数据{T_RST=0;T_CLK=0;T_RST=1;w_1302byte(addr);w_1302byte(date);T_CLK=0;T_RST=0;}ucharread_1302(ucharaddr)//指定位置读数据{uchardat1,dat2,temp;T_RST=0;T_CLK=0;T_RST=1;w_1302byte(addr);temp=r_1302byte();T_RST=0;T_CLK=0;dat1=temp/16;dat2=temp%16;temp=dat1*10+dat2;return(temp);}voidinit_1302(void){uchari;ucharaddr=0x80;write_1302(0x8e,0x00);//打开写命令允许for(i=0;i7;i++){TAB_1302[i]=read_1302(addr);addr+=2;}write_1302(0x8e,0x80);//关闭写功能}voidget_1302(void){uchari,addr=0x81;for(i=0;i7;i++){TAB_1302[i]=read_1302(addr);addr+=2;}}voiddiv(ucharx,uchary,ucharval){ucharge,shi,addr,i=0;if(val==5){LcdSendCmd(0x88+2);DelayMs(100);for(i=0;i2;i++){if(TAB_1302[5]==0)LcdSendData(TAB_XQ[i]);DelayMs(20);if(TAB_1302[5]==1)LcdSendData(TAB_XQ[2+i]);DelayMs(20);if(TAB_1302[5]==2)LcdSendData(TAB_XQ[3+i]);DelayMs(20);if(TAB_1302[5]==3)LcdSendData(TAB_XQ[5+i]);DelayMs(20);if(TAB_1302[5]==4)LcdSendData(TAB_XQ[7+i]);DelayMs(20);if(TAB_1302[5]==5)LcdSendData(TAB_XQ[9+i]);DelayMs(20);if(TAB_1302[5]==6)LcdSendData(TAB_XQ[11+i]);DelayMs(20);}}else{shi=TAB_1302[val]/10;ge=TAB_1302[val]%10;if(x==1)x=0x80;if(x==2)x=0x90;if(x==3)x=0x88;if(x==4)x=0x98;addr=x+y;LcdSendCmd(addr);DelayMs(100);LcdSendData(0x30+shi);DelayMs(100);LcdSendData(0x30+ge);}}voiddisplay(void){get_1302();DelayMs(100);div(3,7,0);DelayMs(100);div(3,5,1);DelayMs(100);div(3,3,2);DelayMs(100);div(2,5,3);DelayMs(100);div(2,3,4);DelayMs(100);div(3,2,5);DelayMs(100);div(2,1,6);DelayMs(100);}voidscanner(){uinti,j;if(key0==0)DelayMs(50);if(key0==0){DelayMs(10);while(!key0);funtion_flag++;//当按一下0按键时,光标在秒钟上闪动if(funtion_flag==1){LcdSendCmd(0x0f);DelayMs(20);LcdSendCmd(0x88+7);}//当按两下0按键时,光标在分钟上闪动if(funtion_flag==2){LcdSendCmd(0x88+5);DelayMs(20);}//当按三下0按键时,光标在小时上闪动if(funtion_flag==3){LcdSendCmd(0x88+3);DelayMs(20);}//当按四下0按键时,光标在年上闪动if(funtion_flag==4){LcdSendCmd(0x90+1);DelayMs(20);}//当按五下0按键时,光标在月上闪动if(funtion_flag==5){LcdSendCmd(0x90+3);DelayMs(20);}//当按六下0按键时,光标在日上闪动if(funtion_flag==6){LcdSendCmd(0x90+5);DelayMs(20);}//当按七下0按键时,光标在星期上闪动if(funtion_flag==7){LcdSendCmd(0x88+2);DelayMs(20);}//当按八下0按键时,退出时间设定if(funtion_flag==8){LcdSend

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功