完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 niupai0409 于 2015-7-9 20:42 编辑
求大神指点!!!!!急~ 程序见附件!!! #include #include #define LCDDATE P0 #define LCD P0 #define NOP()_nop_() ***it RW=P2^5; ***it RS=P2^6; ***it LCDE=P2^7; unsigned char string[]="I LOVE COMPUTER!"; unsigned char time[]="TIME:15:35:42"; unsigned char hou=15,min=32,sec=36,num=0; void LcdDelay(unsigned int i) { unsigned char a; for(i;i>0;i--) { for(a=2;a>0;a--); } } void LcdWriteCommand(unsigned char com) { LCDE=0; RW=0; RS=0; LCD=com; LcdDelay(5); LCDE=1; NOP(); NOP(); LCDE=0; } void LcdWriteData(unsigned char dat) { LCDE=0; RW=0; RS=1; LCD=dat; LcdDelay(5); LCDE=1; NOP(); NOP(); LCDE=0; } void LcdInit() { LcdWriteCommand(0x38); LcdWriteCommand(0x0c); LcdWriteCommand(0x06); LcdWriteCommand(0x01); } void time0()interrupt 1 { unsigned char num=0; unsigned char i; TH0=55536/256; TL0=55536%256; num=num+1; if(num>99) { num=0; sec=sec+1; if(sec>59) { sec=0; min=+1; if(min>59) { min=0; hou=+1; if(hou>23) { hou=0; } } } Time[5]=hou/10+0x30; Time[6]=hou%10+0x30; Time[7]=min/10+0x30; Time[8]=min%10+0x30; Time[9]=sec/10+0x30; Time[10]=sec%10+0x30; LcdWriteCommand(0x80); for(i=0;i<13;i++) { LcdWriteData(Time); } } } void main() { unsigned char i; TMOD=0x01; TH0=55536/256; TL0=55536%256; ET0=1; EA=1; TR0=1; LcdInit(); LcdDelay(100); LcdWriteCommand(0x80); for(i=0;i<13;i++) { LcdWriteData(Time); } LcdWriteCommand(0xc0); for(i=0;i<16;i++) { LcdWriteData(string); } while(1); }
|
|
相关推荐
16个回答
|
|
你这个是 用到DS1302吗?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
不好意思,我也不知道下载还有积分,求大神指点!!! |
|
|
|
for(i=0;i<13;i++)
{ LcdWriteData(Time); } 这是什么意思? 你写的是数据中的具体数据 不是数组的地址 程序 在自己好好整理一下 有点乱 |
|
|
|
本帖最后由 hongyanj 于 2015-7-10 10:13 编辑
unsigned char Time[]="TIME:15:35:42"; 这是往屏幕上面写时间Time[]共13个,故 for(i=0;i<13;i++)写13次,全部写到屏幕去! for(i=0;i<13;i++) { LcdWriteData(Time[ i ]); } 这样写就比较容易明白! 也就是再屏幕上显示TIME时间要变化,就要不停的写. 你得while(1)怎么是再最后! 应该: LcdWriteCommand(0xc0); for(i=0;i<16;i++) { LcdWriteData(string); } while(1){ LcdWriteCommand(0x80); for(i=0;i<13;i++) { LcdWriteData(Time); } void time0()interrupt 1中执行写屏可能是无法完成的 } |
|
|
|
本帖最后由 hongyanj 于 2015-7-10 10:23 编辑
还有你的计时太麻烦! void time0()interrupt 1 { num=num+1; TH0=55536/256; TL0=55536%256; } 下面的其它位置计算; if(num==3600){ 小时=小时+1; num=0; }(或者 小时=num/3600;) 分钟=num/60; 秒=num%60; 中断中执行这么多会严重影响计时间精度!你时钟频率是多少? |
|
|
|
还是那样,时间不会变化,怎么办? |
|
|
|
现在关键是执行中断时间不会变化,老是显示数组定义的时间,应该怎么修改?谢谢~ |
|
|
|
是你的中断以后改的时间没有送到要显示的位置
|
|
|
|
在 中断的 末尾 加一些 送位置的句子 void panduan() //判断函数
{ if ( count == 20 ) //当int_cnt计时100毫秒 { miao++; count =0; //秒+1 if(s1_num==1) write_sfm(28,miao); else write_sfm(8,miao);//秒若变化则重新写入 if( miao>59 ) //当秒=60 {fen++;miao=0; //分加一秒清零 if(s1_num==1) write_sfm(25,fen); else write_sfm(5,fen);//分钟若变化则重新写入 if (fen>59) //同上 {shi++;fen=0; if(s1_num==1) write_sfm(22,shi); else write_sfm(2,shi);//小时若变化则重新写入 if (shi>23) //同上 不过小时只有24 {ri++;shi=0; write_year_month_day(9,ri); if (ri==31&&(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)) //大月的时候一个月有31天 yue++;ri=1; write_year_month_day(9,ri); if (ri==30&&(yue==4||yue==6||yue==9||yue==11)) //小月的时候一个月30天 yue++;ri=1; write_year_month_day(9,ri); if (ri==29&&yue==2&&(nian%4==0)) //闰年的2月29天 yue++;ri=1; write_year_month_day(9,ri); if (ri==28&&yue==2&&(nian%4!=0)) //平年的2月28天 yue++;ri=1; write_year_month_day(6,yue); if (yue>12) //当月为12月时年+1年没有设置上限 nian++;yue=1; 类似于下面这个这种 把每次更新的时间送到位置去 不然它还是显示 以前的时间 write_year_month_day(3,nian); }}}} } |
|
|
|
中断程序耗时太长!中断没有返回!最有可能!
|
|
|
|
你的定时器一直在初始化。死循环的定时器怎么计数啊。
|
|
|
|
不错的文档,顶一下
|
|
|
|
卡在了while(1)了吧
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11771 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 17:35 , Processed in 0.723169 second(s), Total 73, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号