基于单片机的电子时钟设计
- 前言
- 一、课设任务是什么?
- 二、系统总体方案硬件设计
- 2.1 系统硬件总体设计
- 2.2 键盘电路设计
- 2.3 DS1302实时时钟芯片电路设计
- 2.4 复位电路
- 2.5 LCD电路设计
- 三、软件设计
- 3.1 主程序流程图
- 3.2 主要程序设计代码
- 3.3 修改时间函数
- 3.4 扫描键盘函数
- 四、仿真源码下载
前言
这篇文章是自己写的单片机课设,发这篇文章就当留个小纪念;如果说有什么不太好的地方还请大神请指出
Keil C51的代码以及Proteus的仿真的百度网盘链接放在文章最后,需要的人可以自取
提示:以下是本篇文章正文内容,下面案例可供参考
一、课设任务是什么?
- 用LCD液晶作为显示设备
- 可以分别设定小时,分钟和秒,复位后时间为:00:00:00
- 能实现日期的设置,年、月、日
- 其他创新内容,如:闹钟功能;显示星期;整点音乐报时等。
二、系统总体方案硬件设计
2.1 系统硬件总体设计
将设计的通信系统硬件进行模块化设计,主要由以下模块构成:
A:AT89C51单片机,控制的核心部件;
B:键盘电路;
C:LCD1602液晶显示电路;
D:复位电路;
E:DS1302实时时钟芯片
2.2 键盘电路设计
本设计共有6个设置按键,分别为年,月,日,时,分,秒,复位时间,启动时间与日期的修改。如图4-5 键盘电路
2.3 DS1302实时时钟芯片电路设计
DS1302是DALLAS公可推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM通过简单的申行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和同年的天数可自功调整。时钟操作可通过AMPM指示决定采用24或12小时格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信。
2.4 复位电路
见报告
2.5 LCD电路设计
见报告
三、软件设计
3.1 主程序流程图
见报告
3.2 主要程序设计代码
main函数代码
3.3 修改时间函数
void adjust(void)
{
if(key_scan()&&key_flag1)
switch(key_value())
{
case '0':sec_add++;break;
case '1':min_add++;break;
case '2':hou_add++;break;
case '3':day_add++;break;
case '4':mon_add++;break;
case '5':yea_add++;break;
case '6':fuwei();break;
default: break;
}
adjusted.Second+=sec_add;
adjusted.Minute+=min_add;
adjusted.Hour+=hou_add;
adjusted.Day+=day_add;
adjusted.Month+=mon_add;
adjusted.Year+=yea_add;
if(adjusted.Second>59)
{
adjusted.Second=adjusted.Second%60;
adjusted.Minute++;
}
if(adjusted.Minute>59)
{
adjusted.Minute=adjusted.Minute%60;
adjusted.Hour++;
}
if(adjusted.Hour>23)
{
adjusted.Hour=adjusted.Hour%24;
adjusted.Day++;
}
if(adjusted.Day>31)
adjusted.Day=adjusted.Day%31;
if(adjusted.Month>12)
adjusted.Month=adjusted.Month%12;
if(adjusted.Year>100)
adjusted.Year=adjusted.Year%100;
}
3.4 扫描键盘函数
int key_scan() //扫描是否有键按下
{
int i=0;
uint temp;
P1=0xf0;
temp=P1;
if(temp!=0xf0)
{
i=1;
}
else
{
i=0;
}
return i;
}
四、仿真源码下载
这篇文章是自己写的单片机课设,发这篇文章就当留个小纪念;如果说有什么不太好的地方还请大神请指出。
下载链接🔐:点击跳转下载➡️单片机课设-基于单片机的电子时钟设计(仿真+代码+报告)
能力有限,欢迎指正