单片机原理课程设计基于AT89C52的电子时钟设计说明 下载本文

内容发布更新时间 : 2024/5/19 2:22:55星期一 下面是文章的全部内容请认真阅读。

驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。

2.3.3 键盘模块设计

图-3 键盘模块

如图-3,K1、K2、K3、K4均为多功能键。K1为秒表设置键,按K4键时为时钟确定键;K2在K4按下时为时钟下调键,在K3按下时为闹钟确定键,在K1按下时为秒表开始键;K3为闹钟设置键,在K4按下时为时钟上调键,在K1按下时为秒表暂停键;K4为时钟设置键,在K3按下时为闹钟移位键,在K1按下时为秒表退出键。

2.3.4蜂鸣器模块的设计

图-4 声音输出模块

闹铃时间到和整点时,P3_7给低电平,蜂鸣器响。

2.3.5显示模块的设计

图-5 LCD显示输出模块

如图—5,1脚VSS和3脚VEE为电源接地,第2管脚VDD接电源,第4管脚RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;RW为读写信号线,高电平1时进行读操作,低电平0时进行写操作;E(或EN)端为使能(enable)端; 第7~14脚D0~D7为8位双向数据端。控制和数据端都接了上拉电阻用来驱动。

3.系统的软件设计

3.1程序流程框图

图-A 主程序流程图

图-B 时间调整程序流程图

3.2 程序的设计

见附录

4.系统调试

4.1软件调试结果

时钟主界面 用户

设置闹铃界面 秒表界面

时钟仿真图

4.2 硬件调试结果

起初蜂鸣器有点问题不响,后来发现是定义错端口引起的。其他功能正常。

4.3 实验箱调试结果

实现功能的具体方法:

时钟主界面时按下K1键进入秒表功能,按K2秒表开始,再按K3秒表停,按键K4返回时间显示;按K4开始调试(移位“年→秒”),接着按K2、K3调节时间增减;按K2开启闹钟,K3调节时间,K4(移位“时分”);按“年→秒”的顺序移位,按键K2进行减运算,按键K3进行加运算,按键K1返回到主界面并显示设置值。

按下K3键,实现闹钟定时调整,按键K4进行“分-秒”移位,按键K3进行上调,按键K2返回到主界面。

主界面K2实现开启/关闭闹钟的功能。

按下K1键进入秒表,按键K2开始计时,K3暂停计时,K4返回到主界面。

5.总结心得体会:

这次实习我们组选择的是电子时钟设计。实习任务包括理论设计、调试与仿真、撰写设计报告等。其中理论设计又包括选择总体方案,硬件系统设计、软件系统设计;硬件设计包括单元电路,选择元器件及计算参数等;软件设计包括模块化层次结构图,程序流程图。程序设计是课程设计的关键环节,开始以为时钟会很简单,就算遇到问题应该也很好解决,但当自己真正去做的时候,发现了好多困难。于是查资料,问同学。经过和同学的探讨,通过调试进一步完善程序设计,最后虽然省电模式没实现但其他基本

达到课题所要求的指标。完成了实习任务。这次实习我更加了解了单片机的应用,更加牢牢的掌握了书本知识与现实的结合,总之这是实习收获很大,以后还需多动手实践,多练习编程,才能熟练掌握单片机。

附录一: 程序:

#include #include #include #include

#define uchar unsigned char #define uint unsigned int #define TIME (0X10000-50000) #define FLAG 0xf4 //闹钟标志

sbit rst=P1^2; //DS sbit clk=P1^0; sbit dat=P1^1;

sbit rs=P2^0; //LCD sbit rw=P2^1; sbit e=P2^2; sbit beep=P1^3; sbit mbkey=P1^4;

uchar k; uchar flag;

uchar i=20,j,time1[16];

uchar alarm[2],time2[15],time[3];time5[3];

uchar code Day[]={31,28,31,30,31,30,31,31,30,31,30,31}; //12(非闰年)

uchar key2num,ms=0,mbmiao=0,mbfen=0,mbkeynum,num; //msmbmiao.mbfen秒表的秒.分,key2num是key5的计数

uchar code table[]=%uchar code table1[]=%uchar code table4[]=\

void delay(uint z) { uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--); }

个月的最大日期秒表进数,