欢迎来到天天文库
浏览记录
ID:20512170
大小:83.98 KB
页数:10页
时间:2018-10-11
《智能电子钟(lcd显示)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、注:本程序并没有显示星期,如有需要,可自行添加。/*******************************************************实验名称:智能电子钟(LCD显示)*实验效果:1602显示时钟,按K1进入时间设置,K2分别选择秒*分时日月星期年,按K3时间加一/******************************************************/#include#include"ds1302.h"#include"lcd1602.h"#defineuin
2、tunsignedint#defineucharunsignedchar/********************************************************声明:本实验所有IO口只与“1302时钟按键设置”仿真图配套**/******************************************************/sbitK1=P3^2;//接的是INT0K1时钟设置(按一下开始调节时间,再按一下退出调节时间)sbitK2=P3^3;//接的是INT1K2选择秒分时日月星期年sb
3、itK3=P3^4;//接的是TOK3加时间voidCursor();//设置时光标闪烁voidDelay10ms();voidInt0Configuration();//外部中断0设置voidLcdDisplay();//显示函数ucharSetState,SetPlace;//设置状态、光标位置voidmain()//主函数{uchari;Int0Configuration();//外部中断0设置lcd1602Init();//1602初始化ds1302Init();//1302初始化while(1){if(SetSta
4、te==0)//如果没有键按下,就显示时间{//SetState的高低由中断控制,按下K1则为1,再次按下则为0ds1302readtime();}else{if(K2==0)//消除抖动{Delay10ms();if(K2==0)//如果K2被按下,则光标移动{SetPlace++;if(SetPlace>=7)//年月日星期时分秒共7个时间SetPlace=0;}while((i<50)&&(K2==0))//松手检测{Delay10ms();i++;}i=0;}if(K3==0)//如果K3被按下,则时间每次加1{De
5、lay10ms();//消除抖动if(K3==0){TIME[SetPlace]++;if((TIME[SetPlace]&0x0f)>9)//换成BCD码{TIME[SetPlace]=TIME[SetPlace]+6;}if((TIME[SetPlace]>0x60)&&(SetPlace<2))//分秒只能到59{TIME[SetPlace]=0;}if((TIME[SetPlace]>0x24)&&(SetPlace==2))//小时只能到23{TIME[SetPlace]=0;}if((TIME[SetPlace]
6、>0x32)&&(SetPlace==3))//日只能到31{TIME[SetPlace]=0;}if((TIME[SetPlace]>0x13)&&(SetPlace==4))//月只能到12{TIME[SetPlace]=0;}if((TIME[SetPlace]>0x7)&&(SetPlace==5))//周只能到7{TIME[SetPlace]=0;}if((TIME[SetPlace]>0x99)&&(SetPlace==6))//年只能到2099{TIME[SetPlace]=0;}}while((i<50)&&
7、(K3==0))//松手检测{Delay10ms();i++;}i=0;}}LcdDisplay();//Lcd1602显示时间}}voidLcdDisplay()//显示函数{writecom(0x80+0x40);writedata('T');writedata('I');writedata('M');writedata('E');writedata(':');writedata('0'+TIME[2]/16);//时writedata('0'+(TIME[2]&0x0f));writedata(':');writeda
8、ta('0'+TIME[1]/16);//分writedata('0'+(TIME[1]&0x0f));writedata(':');writedata('0'+TIME[0]/16);//秒writedata('0'+(TIME[0]&0x0f));writecom(0x80);writ
此文档下载收益归作者所有