完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用51跟24c02写了一个时钟 有一个问题就是掉电以后秒钟会乱码然后从零开始 下面是代码#include
#include"24c02.h" #define uchar unsigned char #define uint unsigned int ***it wela=P2^7; ***it dula=P2^6; ***it lcden=P3^4; //液晶使能端 ***it rs=P3^5; //液晶读写端 ***it s1=P3^0; //键盘 ***it s2=P3^1; ***it s3=P3^2; ***it rd=P3^7; ***it beep=P2^3; uchar count , s1num; char miao,shi,fen; uchar table[]=" 2014-10-25 SUN"; //初始化液晶显示 void delay(uint z) //延时程序 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void beep1() //程序发声 { beep=0; delay(100); beep=1; } void write_com(uchar com) //液晶写命令函数 { rs=0; lcden=0; delay(5); P0=com; lcden=1; delay(5); lcden=0; } void write_date(uchar date) //液晶写数据函数 { rs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; } void write_sfm(uchar add,uchar date) //写时分秒函数 { uchar shi,ge; shi=date/10; ge=date%10; write_com(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); } void init() { uchar num; rd=0; //将第4列一端置低 分离4个独立按键 dula=0; //将锁存器关闭 防止出现乱码 wela=0; lcden=0; fen=0; //初始化分钟变量 miao=0; shi=0; count=0; s1num=0; init_24c02(); write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); for(num=0;num<15;num++) { write_date(table[num]); delay(5); } write_com(0x80+0x40+6); write_date(':'); delay(5); write_com(0x80+0x40+9); write_date(':'); delay(5); miao=read_add(1); fen=read_add(2); shi=read_add(3); write_sfm(10,miao); write_sfm(7,fen); write_sfm(4,shi); TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void keyscan() { if(s1==0) { delay(5); if(s1==0); { s1num++; while(!s1); beep1(); if(s1num==1) { TR0=0; write_com(0x80+0x40+11); //光标到秒的位置 write_com(0x0f); //光标闪烁 } if(s1num==2) { write_com(0x80+0x40+7); //光标到分的位置 } if(s1num==3) { write_com(0x80+0x40+4); //光标到时的位置 } if(s1num==4) { write_com(0x0c); //光标消失 s1num=0; TR0=1; } } } if(s1num!=0) { if(s2==0) { delay(5); if(s2==0) { while(!s2); beep1(); if(s1num==1) { miao++; if(miao==60) miao=0; write_sfm(10,miao); //每调试一下就送入液晶 write_com(0x80+0x40+9); write_add(1,miao); //将数据存入24c02中 } if(s1num==2) { fen++; if(fen==60) fen=0; write_sfm(7,fen); write_com(0x80+0x40+7); write_add(2,fen); } if(s1num==3) { shi++; if(shi==24) shi=0; write_sfm(4,shi); write_com(0x80+0x40+4); write_add(3,shi); } } } if(s3==0) { delay(5); if(s3==0) { while(!s3); beep1(); if(s1num==1) { miao--; if(miao==-1) miao=59; write_sfm(10,miao); write_com(0x80+0x40+10); write_add(1,miao); } if(s1num==2) { fen--; if(fen==-1) fen=59; write_sfm(7,fen); write_com(0x80+0x40+7); write_add(2,fen); } if(s1num==3) { shi--; if(shi==-1) shi=23; write_sfm(4,shi); write_com(0x80+0x40+4); write_add(3,shi); } } } } } void main() { init(); while(1) { keyscan(); if(count==20) { count=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; } write_sfm(4,shi); write_add(3,shi); } write_sfm(7,fen); write_add(2,fen); } write_sfm(10,miao); write_add(10,miao); } } } void time_0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; } |
|
相关推荐
5个回答
|
|
|
|
|
|
喔。刚接触51的我要抓紧喽
|
|
|
|
|
|
|
|
上电后读取寄存器里面的时间,如果不为零,把读出来的时间赋值给时间变量,如果为零就赋初值给时间变量 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
199 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
748 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1122 浏览 0 评论
874 浏览 0 评论
910 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11836 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 14:35 , Processed in 0.727944 second(s), Total 85, Slave 66 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号