#include"reg52.h"
//#include"AT24C02.h"
#include"DS18B20.h"
#include"LCD1602.h"
sbit key1=P1^0;//module
sbit key2=P1^1;//add
sbit key3=P1^2;//minus
sbit key4=P1^3;//pause,confirm
sbit beeper=P1^4;
unsigned int k1=0;
unsigned int num0,num,sec,min,hour; int wendu;
char code tableup[]="2018-05-19";
int *p1=&hour;int *p2=&min;int *p3=&sec;//全局变量即使写在main函数中也不行,必须写在预编译区
void delayms(unsigned int xms)
{
int m,n;
for(m=xms;m>0;m--)
for(n=113;n>0;n--);
}
void beep()
{
beeper=1;
delayms(250);
beeper=0;
}
void Timer0_init()
{
TMOD=0x01;
TH0=0xee;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;//attention,the initial value should be set to "1"!
}
void write_hms(unsigned char addr,unsigned char dat)
{
unsigned char shi,ge;
shi=dat/10;
ge=dat%10;
write_com(0x80+0x40+addr);
write_com(0x0f);//cursor located
write_data(0x30+shi);
write_data(0x30+ge);
}
int jiajian(int *hms) //hms是形参,hms的改变无法引起hour的改变
{
if(key2==0)
{
delayms(5);
if(key2==0)
{
while(!key2);
beep();
(*hms)--;//形参运算,实参并未发生改变,形参hms只是从hour实参获得了值
if(k1==3)//hour
{
if(hms==-1)*hms=23;
}
else
{
if(hms==-1)*hms=59;
}
}
}
if(key3==0)
{
delayms(5);
if(key3==0)
{
while(!key3);
beep();
(*hms)++;
if(k1==3)//hour
{
if(hms==24)*hms=0;
}
else
{
if(hms==60)*hms=0;
}
}
}
return *hms;
}
void keyscan()
{
//key1为功能键,设计时需要根据key1按下的次序来完成对hms的设置,以及何时开关定时器TR0
//先按key1》》k1=1》》关TR0,暂停计时》》设置时分秒》》退出设置,清零k1
if(key1==0)//功能
{
delayms(5);
if(key1==0)
{
while(!key1);
beep();
k1++;
if(k1==5)//退出时间设置的同时顺便清零k1
{
TR0=1;
k1=0;
}
}
}
if(k1!=0)
{
switch(k1)
{
case 4://sec
write_com(0x80+0x40+5);
write_com(0x0f);
hour=jiajian(p1);
write_hms(4,hour);
break;
case 3:
// write_hms(7,min);
// delayms(2);
write_com(0x80+0x40+8);
write_com(0x0f);
min=jiajian(p2);
write_hms(7,min);
break;
case 2:
// int *p3=&sec
write_com(0x80+0x40+11);
write_com(0x0f);
sec=jiajian(p3);
write_hms(10,sec);
break;
case 1://暂停计时
TR0=0;
write_com(0x0f);
break;
}
}
}
//void disp_wendu()
//{
//
// write_com(0x80+11);
// write_data(wendu/1000%100);//十位0316
// write_data(wendu%100/10);//个位
// write_data('.');
// write_data(wendu%10);//小数点一位
// write_data('C');
//}
void main()
{
// int *p1=&hour;int *p2=&min;int *p3=&sec;// invalid extern statement!
Timer0_init();
// DS18B20_init();
lcd1602_init();
write_com(0x80);
hour=12;min=0;sec=0;
// wendu=get_temp();
// for(num0=0;num0++;num0<=10) //vital FAILURE!!!
for(num0=0;num0<=10;num0++)//切记:if、for内部的顺序以及是否多余分号
{
write_data(tableup[num0]);
delayms(5);
}
write_com(0x80+0x40+6);
write_data(':');
write_com(0x80+0x40+9);
write_data(':');
write_hms(4,hour);write_hms(7,min);write_hms(10,sec);
while(1)
{
keyscan();
// disp_wendu();
}
}
void T0_time()interrupt 1
{
TH0=0x4c;
TL0=0xcf;
num++;
if(num==50)
{
sec++;
// wendu=get_temp();
// disp_wendu();//write_data(wendu); //wendu不能作为参数,因为他是字符串而非char型
num=0;
if(sec==60)
{
sec=0;
min++;write_hms(7,min);
if(min==60)
{
min=0;
hour++;write_hms(4,hour);
}
}write_hms(10,sec);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
基于51单片机的电子钟设计及Proteus仿真
共36个文件
lst:6个
obj:6个
__i:4个
5星 · 超过95%的资源 需积分: 31 23 下载量 96 浏览量
2018-09-29
21:31:55
上传
评论 5
收藏 118KB RAR 举报
温馨提示
本设计利用stc89c51单片机,独立键盘,lcd1602显示屏,通过按键输入选择功能,修改时间,开启、暂停等。内含Proteus仿真文件,可为新手入门制作提供参考
资源推荐
资源详情
资源评论
收起资源包目录
e-clock.rar (36个子文件)
e-clock
AT24C02.lst 5KB
e-clock.M51 23KB
DS18B20.c 2KB
e-clock.lnp 97B
Last Loaded e-clock.DBK 181KB
figure7.2.1.lst 885B
STARTUP.OBJ 749B
e-clock_uvopt.bak 60KB
STARTUP.A51 6KB
figure7.2.1.obj 5KB
e-clock 16KB
main_clock.LST 10KB
e-clock.uvopt 60KB
e-clock.uvproj 13KB
figure7.2.1.__i 174B
e-clock.uvgui.HP 70KB
LCD1602.LST 3KB
e-clock_uvproj.bak 13KB
LCD1602.OBJ 3KB
STARTUP.LST 14KB
e-clock.plg 155B
LCD1602.__i 37B
e-clock.build_log.htm 0B
AT24C02.obj 6KB
main_clock.__i 40B
e-clock.PWI 1KB
LCD1602.h 160B
e-clock.DSN 181KB
DS18B20.__i 37B
LCD1602.c 985B
DS18B20.OBJ 5KB
main_clock.c 4KB
e-clock.hex 6KB
DS18B20.LST 4KB
main_clock.OBJ 10KB
DS18B20.h 331B
共 36 条
- 1
资源评论
- yxldr2023-07-28作者的说明很清晰,通过简单的实例和步骤,让读者可以轻松理解和实践这个项目。
- 73232023-07-28文章中给出了详细的电子钟设计方案,包括硬件的选取和软件的编写,对于初学者来说很实用。
- 白羊的羊2023-07-28文件中的Proteus仿真部分很实用,通过仿真让读者可以更好地理解电子钟的运行原理,是一个很好的补充。
- 明儿去打球2023-07-28这个文件提供了一个基于51单片机的电子钟设计及Proteus仿真的详细教程,对于想要学习和实践的人来说是一个很好的教材。
- 天眼妹2023-07-28面向初学者的这个文件非常易懂,并且使用的语言质朴自然,非常适合我这样的新手理解。
realspacepen
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- SAP常用事务代码,涉及到MM板块
- A Pathfinding Project Pro v5.0.5.unitypackage
- 糖尿病并发症预警数据集
- All In 1 Sprite Shader v3.6.unitypackage
- 基于深度学习的电影推荐系统源代码,数据集采用MovieLens1M,实现了AE、VAE、BERT提取电影名特征3种方法
- 联通支付注册-滑动验证-selenium+Opencv 自动化测试程序-pc端
- UGUI Super ScrollView v2.5.4.unitypackage
- 锅炉腐蚀炉管穿孔 炉水发红蒸汽冷凝水铁超标一招化解.docx
- 从效率角度看6种MySQL批量更新方式的优劣.zip
- Behavior Designer - Behavior Trees for Everyone v1.7.9.unitypack
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功