完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人编写有一个 年,月,日时钟,时钟没有问题了,就是在年,月,日有问题,不知为什么LCD1602写第以行有个黑点去不了,仿真时候黑点就不见了,就正常了。还有一个 问题是在判断日的时候老是出问题,if,switch语句都改过使用过。都不能正常判断年,月,日希望高手帮看下我程序哪出问题了,谢谢~~ #include #define uint unsigned int #define uchar unsigned char ***it rw=P2^5; ***it rs=P2^6; ***it re=P2^7; ***it key=P1^0; ***it key1=P1^1; ***it key2=P1^2; const uchar table1[]=" make in the maker is"; const uchar table2[]=" 2013-05-09 niu niu"; const uchar table3[]=" 00:00:00 "; char aa=0,miao,fen,shi,ri,yue,ii; int year; void delay(uint z) //延时函数 { uint i,j; for(i=0;i<110;i++) for(j=z;j>0;j--); } void wrint_com(uchar com) //写指令函数 { rs=0; rw=0; P0=com; re=0; delay(2); re=1; delay(5); re=0; } void wrint_dat(uchar dat) //写数据函数 { rs=1; rw=0; P0=dat; re=0; delay(2); re=1; delay(5); re=0; } void innt1(void) //液晶初始化函数1 { delay(5); wrint_com(0x38); delay(2); wrint_com(0x38); delay(2); wrint_com(0x38); wrint_com(0x38); wrint_com(0x08); wrint_com(0x01); wrint_com(0x06); wrint_com(0x0c); } void sfm(char ad,char datt) { char ge,si; ge=datt%10; si=datt/10; wrint_com(0x80+0x40+ad); wrint_com(0x0c); wrint_dat(0x30+si); wrint_dat(0x30+ge); } void nyr(char add,int date) { char ge, si, bai, qian,i; if(date<=32) { si=date/10; ge=date%10; wrint_com(0x80+add); wrint_dat(0x0c); wrint_dat(0xb0); wrint_dat(0x30+si); wrint_dat(0x30+ge); delay(10); } else { qian=date/1000; bai=date%1000/100; si=date%1000%100/10; ge=date%1000%100%10/1; wrint_com(0x80+add); wrint_dat(0x0c); for(i=0;i<2;i++) { wrint_dat(0x20); } wrint_dat(0x30+qian); delay(5); wrint_dat(0x30+bai); delay(5); wrint_dat(0x30+si); delay(5); wrint_dat(0x30+ge); } } void innt2(void) //液晶显示初始化函数2 { uchar num; wrint_com(0x80); for(num=0;num<26;num++) { wrint_dat(table1[num]); delay(1); } delay(1); wrint_com(0x80+0x40); for(num=0;num<26;num++) { wrint_dat(table2[num]); delay(1); } delay(1500); for(num=0;num<14;num++) { wrint_com(0x18); delay(30); } delay(2000); wrint_com(0x01); wrint_com(0x80); for(num=0;num<18;num++) { wrint_dat(table2[num]); delay(2); } wrint_com(0x80+0x40); for(num=0;num<16;num++) { wrint_dat(table3[num]); delay(1); } nyr(0x09,ri); nyr(0x06,yue); nyr(0x00,year); sfm(0x04,shi); sfm(0x07,fen); sfm(0x0a,miao); } void cursor(void) { if(ii!=0) { wrint_com(0x0f); if(ii==1) { wrint_com(0x80+0x40+0x0a+0x01); } if(ii==2) { wrint_com(0x80+0x40+0x07+0x01); } if(ii==3) { wrint_com(0x80+0x40+0x04+0x01); } if(ii==4) { wrint_com(0x80+0x09+0x03); } if(ii==5) { wrint_com(0x80+0x09); } if(ii==6) { wrint_com(0x80+0x6); } } } int pdt(char n, char y, char r) { switch(y<=12) { case 2: if((n%4==0&&n%100!=0)||(n%400==0)) { if(r==30) { ri=0; break; } else if (r==-1) {ri=29;break;} else{ri=r;break;} } else{ if(r==29) {ri=0;break;} else if (r==-1) {ri=28;break;} else {ri=r;break;} }break; case 4: case 6: case 9: case 11: if(r==31) {ri=0;break;} else if(r==-1) {ri=30;break;} else{ri=r;break;} case 1: case 3: case 5: case 7: case 8: case 10: case 12:if(r==32) {ri=0;break;} else if(r==-1) {ri=31;break;} else{ri=r;break;} } return ri; } void anj(void) { if(key==0) { delay(2); if(key==0) { TR0=0; ii++; while(!key); delay(5); while(!key); } } if(ii==7) { ii=0; TR0=1; wrint_com(0x0c); } if(ii!=0) { if(key1==0) { delay(5); if(key1==0) { while(!key1); delay(5); while(!key1); } if(ii==1) { miao++; if(miao==60) { miao=0; } sfm(0x0a,miao); } if(ii==2) { fen++; if(fen==60) { fen=0; } sfm(0x07,fen); } if(ii==3) { shi++; if(shi==24) { shi=0; } sfm(0x04,shi); } if(ii==4) { pdt(year,yue,ri); ri++; pdt(year,yue,ri); nyr(0x09,ri); nyr(0x06,yue); nyr(0x00,year); } if(ii==5) { yue++; if(yue==13) {} else { nyr(0x06,yue); nyr(0x00,year); } if(yue==13) { yue=0; nyr(0x06,yue); nyr(0x00,year); } } if(ii==6) { year++; if(year==9999) {year=0;} nyr(0x00,year); } } if(key2==0) { delay(5); if(key2==0) { while(!key2); delay(5); while(!key2); } if(ii==1) { miao--; if(miao==-1) { miao=59; } sfm(0x0a,miao); } if(ii==2) { fen--; if(fen==-1) { fen=59; } sfm(0x07,fen); } if(ii==3) { shi--; if(shi==-1) { shi=23; } sfm(0x04,shi); } if(ii==4) { pdt(year,yue,ri); ri--; pdt(year,yue,ri); nyr(0x09,ri); nyr(0x06,yue); nyr(0x00,year); } if(ii==5) { yue--; if(yue==-1) {} else { nyr(0x06,yue); nyr(0x00,year); } if(yue==-1) { yue=12; nyr(0x06,yue); nyr(0x00,year); } } if(ii==6) { year--; if(year==-1) {year=9999;} nyr(0x00,year); } } } } jishi(void) { if(aa==20) { aa=0; miao++; if(miao==60) {} else{sfm(0x0a,miao);} if(miao==60) { miao=0; sfm(0x0a,miao); fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; ri++; switch(12<=yue) { case 2: if((year%4==0&&year%100!=0)||(year%400==0)) { if(ri==30) { ri=0; yue++; break; } } else { if(ri==29) { ri=0; yue++; break; } } case 4: case 6: case 9: case 11: if(ri==30) {ri=0;yue++;} break; default: if(ri==32) {ri=0;yue++;} break; } nyr(0x09,ri); nyr(0x06,yue); nyr(0x00,year); if(yue==13) {} else { nyr(0x06,yue); nyr(0x00,year); } if(yue==13) { yue=0; nyr(0x06,yue); year++; if(year==9999) {year=0;} // nyr(0x09,ri); // nyr(0x06,yue); nyr(0x00,year); } } sfm(0x04,shi); } sfm(0x07,fen); } } } void zinit(void) { EA=1; //打开总中断 TMOD=0x01; //设置定时1工作方式 ET0=1; // 开启定时器1 TR0=0; // 启动定时器0 TH0=(65536-50000)/256;// 给定时器装载时间数据初值为50毫秒 给TH0高八位 TL0=(65536-50000)%256;//给TH0低八位 } int main(void) { miao=55;fen=58;shi=23; year=2012;yue=11;ri=30; zinit(); innt1(); innt2(); TR0=1; while(1) { jishi(); anj(); cursor(); } return 0; } void timer0(void) interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; }
|
|
相关推荐
1个回答
|
|
在写指令的最后加个清零指令就行0x01
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-spi编程示例之spi编写程序
677 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十七章 image图像对比实验
660 浏览 0 评论
791 浏览 1 评论
573 浏览 0 评论
关于RT-Thread studio添加freemodbus控件失败的问题
946 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11657 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-11 03:55 , Processed in 0.834811 second(s), Total 91, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号