仿真版本:Proteus8.6及以上版本
程序编译:Keil5 C51
编程语言:C语言
设计编号:【I02】
1. 简介
本文提出了一种基于51单片机的电子时钟系统。该系统由单片机系统、数码管显示系统、键盘、蜂鸣器等组成,通过单片机自身的定时计数器溢出标志产生最小计时单元,经过变量的累加和判断后,将数据送入数码显示屏显示。通过按键来控制单片机实现数字时钟的时分秒、闹钟等功能,并通过P0口的输出在数码管上显示。
2. 主要功能
a.通过三极管驱动数码管显示时分秒、闹钟,初始状态:00-00-00。
b.通过独立按键设置时分秒、闹钟。
c.通过蜂鸣器显示闹钟状态。
3. 源程序(Keil5)
本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。
#include "Key.h"
#include "led.h"
uchar timeSetBuff[8]={'0','0',LED_MODE_COUNT,'0','0',LED_MODE_COUNT,'0','0'};//时钟数据缓冲区
uchar alarmSetBuff[8]={'0','0',LED_MODE_ALARM,'0','0',LED_MODE_ALARM,'0','0'};//闹钟时间数据缓冲区
uchar timeDisMod=0x24; //00100100
uchar secondTemp,minuteTemp,hourTemp;
uchar secondAlarm,minuteAlarm,hourAlarm;
uchar timer0Temp;
uint clock_value; //用作闹钟用的
uchar alarmKeyCount; //闹钟起停键计数
bit alarm_is_ok; //闹钟起停状态
bit time_is_ok; //时间是否到
bit interface_mod; // 显示界面模式,0为主时间界面,1为设置界面
/********************************************************************************************
* 函数名称:定时器0
* 功 能:定时器0初始化
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void initTimer0(void) //定时10ms
{
TMOD |= 0x01; //GATE=0,TR=1运行;C/T=1,counter,0,timer;01十六进制
TH0 = 0xdc;
TL0 = 0x00;
TR0 = 1; //timer0 控制位,为1时启动timer0
ET0 = 1; //timer0 中断使能
}
/********************************************************************************************
* 函数名称:时钟比较
* 功 能:比较时钟和闹钟的时间缓冲区,只比较时和分
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void timeCompare(void)
{
if((minuteTemp == minuteAlarm) && (hourTemp == hourAlarm) && (secondTemp == secondAlarm))
{
time_is_ok = 1;
alarm_is_ok = 0;
interface_mod = 1;
}
}
/********************************************************************************************
* 函数名称:主函数
* 功 能:调用并执行各个子函数
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void main()
{
uchar keyRead;
init_led();
init_key();
initTimer0();
timer0Temp = 0x00;
secondTemp = 0x00;
minuteTemp = 0x00;
hourTemp = 0x0c;
secondAlarm = 0x00;
minuteAlarm = 0x00;
hourAlarm = 0x00;
alarmKeyCount = 0x02;
alarm_is_ok = 0; //默认状态停止
time_is_ok = 0; //默认时间未到
interface_mod = 0;
sei();
4. 仿真proteus8.6
本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。
时钟界面:
闹钟设置:
5. 设计报告
设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考。
6. 资料清单
设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。
百度网盘下载链接:【I02】百度网盘下载链接
更多单片机仿真设计合集:单片机仿真设计合集