基于C51单片机为主控芯片的电子表(内附完整程序源码) 联系客服

发布时间 : 星期二 文章基于C51单片机为主控芯片的电子表(内附完整程序源码)更新完毕开始阅读94fbcb40814d2b160b4e767f5acfa1c7aa0082a2

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;