当前位置:首页 > 基于C51单片机为主控芯片的电子表(内附完整程序源码)
4.2按键交互部分
按键交互部分采用如下电路图:
S1Key = SpaceS2Key = SpaceS3Key = SpaceS4Key = Space 图3.3.2.1 按键交互原理图
按键交互部分由四个独立按键构成,四个独立按键一端接地,另一端口链接单片机上的四个I/O口,当单片机检测到其中的I/O口为低电平时,将会触发按键功能。
按键功能简述:
S1:选择时间日期将要调节的数位 S2:当前数位数值加一 S3:当前数位数值减一 S4:无功能,备用按键
4.3液晶显示部分
液晶显示部分采用如下电路图:
U1VCCCVGNDERSRWR110kΩ50 %Key=AVCC5VGNDD7D6D5D4D3D2D1D0
图3.3.3.1 液晶显示部分原理图
液晶显示部分为1602液晶屏提供基本的工作环境,并且负责液晶屏与单片机的数据交互,D0~D7八个数据端链接单片机上的一组I/O口,E、RS连接单片机P3.4、P3.5口。供单片机操作液晶显示屏
5 软件程序编程
STC89C51RC芯片是基于C语言可编程芯片,只有硬件电路还无法正常工作 因此还需要编程,并且将程序烧录至单片机中,才能使其正常工作。
由于代码过于繁杂,将选取重要代码加以论述,本章最后将给出全部源代码。
5.1计算类函数代码
本电子时钟可以按照年份和月份计算当月共有多少天,并且星期将由电子时钟自动给定,无需手动调节。
计算函数主要包括:闰年计算函数、日期清零函数(用来计算日期最后一天,超出后日期置一,重新叠加。)、星期计算函数。
5.1.1闰年计算函数
源代码如下
/**********************************************************************************/ /* */ /* */ /* 闰年计算函数 */ /* */ /* 是闰年返回值为1 */ /**********************************************************************************/ int isleapyear(int year) {
year=year+2000;
return (year%4==0&&year0)||year@0==0;
当年份可以被4整除并且不可以被100整除或者可以被400整除的年份是闰年。是闰年则函数返回值为1,反之则返回0.
当其他函数引用该函数时,则可以方便的判断该年是否是闰年。 5.1.2日期清零函数
源代码如下
/**********************************************************************************/ /* */ /* */ /* 日期清零计算函数 */ /* */ /* 日期需要清零时返回值为1 */ /**********************************************************************************/ int delete_riqi(int ri) { }
if(ri>28&&yue==2&&!isleapyear(nian)) return 1;
if(ri>29&&yue==2) return 1;
if(ri>30&&(yue==4||yue==6||yue==9||yue==11)) return 1; if(ri>31) return 1; return 0;
通过多个if语句进行判断,判断当前日期是否已经超过当月的最后一天,如果是,则返回1,否则返回0.
当其他函数引用该函数时,可以判断日期是否需要重新计数 5.1.3星期计算函数
源代码如下
/**********************************************************************************/ /* */ /* */ /* 星期计算函数 */ /* */ /* 星期日返回值为0 */ /**********************************************************************************/ int week(int nian,int yue,int ri) {
iWeek = y + y / 4 + c / 4 - 2 * c + 26 * ( m + 1 ) / 10 + d - 1; //蔡勒公式 iWeek = iWeek >= 0 ? ( iWeek % 7 ) : ( iWeek % 7 + 7 );
//iWeek为负时取模
int iWeek,y,c,m,d;
c=nian/100; y=nian0; m=yue; d=ri;
共分享92篇相关文档