电子时钟单片机完整版

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

烟台南山学院单片机课程设计题目电子时钟
姓名:
所在学院
所学专业:
班级:
学号:
指导教师:
达成时间:
纲要
随时代的发展,生活节奏的加速,人们的时间观点愈来愈强;随自动化、智能化技术
的发展,机电产品的智能度愈来愈高,用到时间提示、准时控制的地方也会愈来愈多,所
以,设计开发数字时钟拥有优秀的应用远景。

因为单片机价钱的低成本、高性能,在自动控制产品中获得了宽泛的应用。

本设计利
用 Atmel 企业的 AT89S52单片机对电子时钟进行开发,设计了实现所需功能的硬件电路,
应用汇编语言进行软件编程,并用实验板进行演示、考证。

在介绍本单片机的发展状况基础上,说了然本设计实现的功能,以及实验板硬件状况,并对各功能电路进行了剖析。

主要工作放在软件编程上,用实验板实现时间、日期、准时
及它们的设定功能,详尽对软件编程流程以及调试进行了说明,并对计时偏差进行了剖析
及校订,提出了准时音与显示相矛盾问题及解决方案。

实考证明成效优秀,能够投入使用。

本次仿真设计的目的就是让同学们在理论学习的基础上,经过达成一个波及MCS— 51
单片机都种资源应用并拥有综合功能的小系统目标板的设计与编程应用,使学生不只能够
将讲堂上学到的理论知识与实质应用联合起来,并且能够对电子电路、电子元器件、印制
电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、有关仪器
设施的使用技术等方面获得较全面的锻炼和提升,为此后能够独立进行某些单片机应用系
统的开发设计工作打下必定的基础。

在本学期的开始我们进行了计算机工程实践,在实践
中我们以微机原理与接口技术课程中所学知识为基础,设计了电子时钟系统。

本系统为多
功能数字钟的系统。

本设计以单片机AT89c51为控制核心,采纳DS1302串行时钟芯片,RT1602液晶显示器实现液晶显示目前时间、日期、礼拜。

本电子时钟拥有日期、时、分、秒的显示、调整功能,采纳的时间制式为24 小时制,时间显示格式为时(十位、个位)、分(十位、个位)、秒(十位、个位)。

重点词:单片机AT89S52电子时钟汇编语言
目录
绪论 . ............................................错误! 不决义书签。

1.整体设计 . ......................................错误! 不决义书签。

设计目的 . .....................................错误! 不决义书签。

整体设计 . .....................................错误! 不决义书签。

2.硬件设计 . ......................................错误! 不决义书签。

整体接线 . .....................................错误! 不决义书签。

2.2 硬件连结 . ................................错误! 不决义书签。

3.软件设计 . ......................................错误! 不决义书签。

主程序流程图及程序设计 ........................错误! 不决义书签。

键盘非法性检测 . ...............................错误! 不决义书签。

断服务程序流程 . ...............................错误! 不决义书签。

4.仿真调试 . .....................................错误! 不决义书签。

总结 . ............................................错误! 不决义书签。

参照文件 . ........................................错误! 不决义书签。

绪论
单片机因为其细小的体积和极低的成本,宽泛的应用于家用电器、工业控制等领域中。

在工业生产中,电流、电压、温度、压力和流量也都是常用的被控参数。

单片机电子
时钟系统,是利用单片机作为系统的主控制器,采纳 AT89S52单片机作为控制核心对时钟芯片 DS1302的控制,同时读取时间,并队输入信号作出办理。

该单片机拥有集成度高,
运算迅速快,体积小、运转靠谱,价值便宜的特色。

鉴于这样的重要性 , 我们打算设计一种鉴于单片机的电子时钟系统 , 实现对时间的调整。

本设计以单片机 AT89C51为控制核
心,由实不时钟模块,键盘模块构成此中实不时钟采纳DS1302可实现对时间的显示,设置,计时等功能
在平常生活和工作中,我们经常用到准时控制,如扩印过程中的曝光准时等。

初期常用
的一些时间控制单元都使用模拟电路设计制作的,其准时正确性和重复精度都不是很理想,
此刻基本上都是鉴于数字技术的新一代产品,跟着单片机性价比的不停提升,新一代
产品的应用也愈来愈宽泛。

大则能够构成复杂的工业过程控制系统,达成复杂的控制功能;小则能够用于家电控制,甚至能够用于少儿电子玩具。

它功能强盛、体积小、质量轻、灵
活好用,配以合适的接口芯片,可以构成各种各种、功能各异的微电子产品。

最近几年来跟着计算机在社会领域的浸透和大规模集成电路的发展,单片机的应用正
在不停地走向深入,因为它拥有功能强,体积小,功耗低,价钱廉价,工作靠谱,使用方
便等特色,所以特别合适于与控制有关的系统,愈来愈宽泛地应用于自动控制,智能化仪
器,仪表,数据收集,军工产品以及家用电器等各个领域,单片机常常是作为一个核心零
件来使用,在依据详细硬件构造,以及针对详细应用对象特色的软件联合,以作完美。


子时钟在平常生活中最常有,应用也最宽泛。

本次设计以硬件软件化为指导思想,充足发挥单片机功能,大多数功能经过软件编程
来实现,电路简单了然,系统稳固性高。

同时,该时钟系统还拥有功耗小、成本低的特色,
拥有很强的适用性,并且系统拥有必定的可扩展性。

1.整体设计
设计目的
应用单片机控制技术,设计出以 89c51 单片机为核心的电子时钟,电子时钟能够显示时、分、秒显示时间的功能,还能够进行时和分的校订,并且其片选的灵巧性强。

设计一个电子时钟,能够查问日历,能够设置时间,掉电时间不丢掉;时钟一定有
定闹功能,定闹设置掉电不丢掉。

整体设计
该电子时钟由89C51,BUTTON,1602 LCD液晶屏等构成,采纳晶振电路作为驱
动电路,利用单片机内部准时计数器 0 经过软件扩展产生的一秒准时,达到时分秒的计时,
六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。

闹钟和时钟的时分秒的调理
是由一个按键控制,而此外一个按键控制时钟和闹钟的时间的调理。

时钟电路
AT89C51单LED显示电
片机路
闹钟电路
独立按键输
入电路
图 1 系统构造框图
该电子时钟由 STC89C51, BUTTON, 1602 LCD液晶屏等构成,采纳晶振电路作为驱动电路,晶振电路的晶振频次为12MHZ,使用的准时器/ 计数器工作方式0,经过软件扩展产生的一秒准时,达到时分秒的计时, 60 秒为一分钟, 60 分钟为一小时, 24 小时为一天,
又重 00:00:00 开始计时。

没有按键按下时,时钟正常运转,当按下调理时钟按键 K1,就会封闭时钟,当按下闹钟按键 K3 不时钟就会进入设置时间界面,可是时钟不会停止工作,
按 K2 键,,就能够对时钟和闹钟要设置的时间进行调整。

2.硬件设计
整体接线
装有 UNSPTMIDE仿真软件的 PC机一台,UNSPTM十六位单片机实验箱一台 8pin 排线两根、短路块若干。

本程序用到的实验箱硬件模块为:SPCE061A核心及实验箱中供给的 4*4 键盘模块和 6位 LED 数码管显示模块。

SPE061A共供给两个 16 位通用的并行 I/O 口: IOA0-IOA15 IOB0-IOB15。

两个口的每一位都能够经过编程独自定义为输入或输出口,本实验采纳 IOA15
— IOA8连结 4*4 键盘, IOA0— IOA7、IOA0—IOA15 连结数码管。

IOAD-7IOB1
DD0-7
IOB2
SPLC051液晶
IOB3
显示模组
IOB3IOB4
EP
IOB2IOB5
R/W
IOB1 IOA9-15
DAC1
A0
VCC OND
调试
电源
图整体接线图
这部分的主要接线以下:
IOA8-15 接液晶显示模块DB0-DB7
IOB4 接液晶显示模块AO
IOB5 接液晶显示模块的R/W
IOB6 接液晶显示模块的EP
DB0-DB7为双向数据口, AO为数据 / 使命控制位, R/w 为读 / 写信号, EP是全能端(低电平有效)
要这部分工作时 Key 接线与 IOA 低八位相连就能够了。

本实验中,定义每个键的功能,包含数字键、功能键和一些保存键,此中标“ 0-9 ”为数字键,标“ F2-F4”为保存键,标“ F1”为从头设置时间键,标“ ENT”为确认键,标
“ DEL”为删除键。

运转程序后,按惯例的显示方法,从数码管的第一位开始显示,六位
数码管一次显示时、分、秒的十位、个位。

设置错误按 DEL键即可从头设置,设置达成按ENT键,从头设置按 F1 键。

2. 2 硬件连结
利用 4*4 键盘和 6 位 LED数码管分别与 SPCE061A单片机 IOA 口、IOB 口的有关引脚相接, IOA0~IOA7连结和 6 位数码管的 a~g、 dp,IOA 口的高八位 IOA15~IOA8连结 4x4 键盘的 L1~L4、 C1~C4,IOB15~IOB12连结数码管的位信号 1~4,IOB2~IOB1 连结数码管的位
信号 5~6,IOB0 连结数码管的分开符信号 DD。

几把 JP4、JP5 的引脚所有用跳线短接起来,用一根排线连结 J27 和 JP7。

时间的设置能够经过 4*4 键盘的数字键来达成,时间的显示经过6 位数码管来达成,以实现计时的功能。

硬件连结图以下:
a IOA0
b IOA1
c IOA2
6 d IOA3L1
位 e IOA4L2
数 f IOA14L3
码 g IOA5L4
管 DP IOA134X4 键盘
1IOA6C1
2IOA12C2
3IOA7C3
4SPCE061A C4
5IOB15
6IOA11
图硬件接线图
3.软件设计
主程序流程图及程序设计
本系统软件设计程序主要分为主程序(此中包含键盘非法性检测、时钟数据办理、键值变换等子模块)、中止服务子程序、键盘子程序、数码管显示子程序及中止定义子程序。

主程序对程序框架进行设计在调用各个子程序实现系统时钟的设置及重置功能,下边分别详尽介绍。

开始初始化键盘初始化显示
取键值
取键变换
设置键运转键
关 2HZ开2HZ
设置标记置设置标记置
主程序代码:
#include ""
#include ""
#include "061A"
typedef unsigned char uchar;
#define KEY_DEL11
#define KEY_ENT12
#define KEY_F113
#define YESCarryFlag1
#define ClearCarryFlag 0
#define YESIntFlag1
#define ClearIntFlag0
#define true1
数字键删除键
键按下键按下
22
显示时钟时
清看门狗
图主程序流程图
#define false0
unsigned int INTflag;
unsigned int KeyVal;
unsigned int KeyDownTimes;
unsigned int KeycodeLED[6] ;
unsigned int EnterFg ;
unsigned int F1flag ;
unsigned int secFlag,minFlag,hourFlag;
void clockPro(void);
unsigned int SetKeyValPro(void);
unsigned int KeyDataChange(unsigned int Key_Data);
unsigned int g_Data[11] =
{0x003f,0x0006,0x005b,0x004f,0x0066,0x006d,0x007d,0x0007,0x007f,0x006f}; int main(){
unsigned int i;
KeyDownTimes = 0;
INTflag = 0;
EnterFg = 0;
i = 0;
DIG_Init();
Key_Init();
while(1)
KeyVal = Key_Get();
KeyVal = KeyDataChange(KeyVal)switch(KeyVal)
case KEY_F1:
INT_IRQ5();
if(KeyDownTimes>=6) KeyDownTimes=0;
F1flag = true;
EnterFg = false;
case KEY_DEL:
if (F1flag = true)
if ( KeyDownTimes>0)
KeyDownTimes--;
break;
case 0xff:
break;
case KEY_ENT:
if(KeyDownTimes==6)
SP_INT_IRQ5();
F1flag = false;
EnterFg = true
break;
default:
if(F1flag == true)
if(KeyDownTimes<6)
KeycodeLED[KeyDownTimes] = KeyVal;
if(SetKeyValPro()== true)
{
KeyDownTimes++;
break;
for(i=0;i<6;i++)
DIG_Set(i+1,g_Data[KeycodeLED[i]]);
clockPro();
F_ClearWatchdog();
键盘非法性检测
开始
判断数字键按下
的次数
数字键数字键数字键数字键数字键数字键按下次按下次按下次按下次按下次按下次数为 1数为 2数为 3数为 4数为 5数为 6
按下数假如前一次按下数按下数
字键小按下数字键字键小字键小
于 3 时2,按下的数于 6 时于 6 时
有效字键小于四有效有效
才有效
返回检测结果
图键盘非法性检测子程序流程图
void SetKeyValPro(void)
unsigned int SetKeyValPro(void)
uchar flag;
switch(KeyDownTimes){
case 0 : if(KeycodeLED[KeyDownTimes]<3)
{ flag = true;
else flag = false;
break;
case 1: if(KeycodeLED[KeyDownTimes-1]==2 )
{
if(KeycodeLED[KeyDownTimes]<5)
flag = true;
else
flag = false;
}
else
flag = true;
break;
if(KeycodeLED[KeyDownTimes]<6)
开始
N
秒的个位是否是9秒的个位加1
Y
N
秒的十位是否是5秒的十位加1,个位回零
Y
秒回零
N
分的个位是否是9分的个位加1
Y
N
分的十位是否是5分的十位加1,个位回零
Y
分回零
N Y
时的十位不为 2时的个位是否是 9
Y N
分的十位加1,个位回零
N
时的个位是否是3
Y时的个位加1
时回零
返回
图时钟数据办理子程序流程图
void clockPro(void)
while(INTflag==1)
INTflag = ClearIntFlag;
if(KeycodeLED[4] == 5 && KeycodeLED[5] == 9)
KeycodeLED[4] = 0;
KeycodeLED[5] = 0;
} secFlag = YESCarryFlag;
else
if(KeycodeLED[5]==9)
KeycodeLED[5]= 0;
KeycodeLED[4]++;
else KeycodeLED[5]++;
}
}
while(secFlag==1)
{
secFlag = ClearCarryFlag;
if(KeycodeLED[2] == 5 && KeycodeLED[3] ==9)
{
KeycodeLED[2] = 0;
KeycodeLED[3] = 0;
} minFlag = YESCarryFlag;
else
{
if(KeycodeLED[3]==9)
{
KeycodeLED[3]= 0;
KeycodeLED[2]++;
}
else KeycodeLED[3]++;
while(minFlag==1)
minFlag = ClearCarryFlag;
if(KeycodeLED[0]==2 && KeycodeLED[1] ==3)
{
KeycodeLED[0] = 0;
KeycodeLED[1] = 0;
} hourFlag = YESCarryFlag;
else
{
if(KeycodeLED[1]==9)
{
KeycodeLED[1]= 0;
KeycodeLED[0]++;
else KeycodeLED[1]++;
断服务程序流程
存放器入栈保护
是 IRQ4_1HZ中止
Y
清 IRQ4_1HZ中

调用数码管显示程

存放器出栈
中止返回
图 IRQ4 中止服务程序流程图
存放器入栈保护
是 IRQ5_2HZ中止
N
清 IRQ5_4HZ中止
中止计数器加1 N
中止计数器等于2
Y
保存信号
设置中止标记为1
[sum=0]
存放器出栈
中止返回
图 IRQ5 中止服务程序流程图
N
清 IRQ4 其余中止
Y
清 IRQ5_2HZ中止
存放器入栈保护
N
是 IRQ4_1HZ中止
Y
清 IRQ4_1HZ中止清 IRQ4其余中止
调用数码管显示程序
存放器出栈
中止返回
IRQ6 中止服务程序流程图
程序说明:在 IRQ5_2HZ中止里准时 1s 的时间,在 IRQ6_TMB2中止里调用键盘程序扫描键盘,而 IRQ4 的 1KHZ中止中间,进行数码管显示的动向扫描。

中止服务程序代码:
.INCLUDE 061A
.INCLUDE
.INCLUDE
.IRAM
.PUBLIC sum;
.VAR sum=0
.PUBLIC _IRQ5;
.PUBLIC _IRQ6;
xternal _INTflag;
.external F_Key_Scan
.PUBLIC _IRQ4
_IRQ4:
push r1,r5 to [sp]
r1 = C_IRQ4_1KHz
test r1,[P_INT_Ctrl]
jnz L_IRQ4_1KHz
r1 = C_IRQ4_2KHz
test r1,[P_INT_Ctrl]
jnz L_IRQ4_2KHz
L_IRQ4_4KHz:
call F_DIG_Drive
r1 = C_IRQ4_4KHz
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
L_IRQ4_2KHz:
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
L_IRQ4_1KHz:
[P_INT_Clear] = r1
pop r1,r5 from [sp]
reti
_IRQ5:push r1,r4 to [sp];
r1 =0x0008;
test r1,[P_INT_Ctrl];
jnz L_4Hz;
开始
仿真调试
判断键码
数字键对键码为图闹钟响铃键码为键码为其他
应的键码0X180X110X81状况
键值为键值为图仿真调试
键值为键值为键值为
0~91112130xff
图闹钟对时间的调整
返回
总结
本系统是经过 4*4 键盘的数字键来达成时、分、秒的正确计时,经过数码管显示出来。

按确认键达成设置,重置键从头设准时间,删除键删除上一步操作,从头设置。

单片机课程设计已经靠近结尾,留给我印象最深的不是我最后做成了什么或许我的设
计实现了什么功能,我以为最重要的是设计的过程。

因为设计的过程在整个过程中所占时
间最多,锻炼我们的价值也是最大的。

设计开始的时候我真的是毫无眉目,甚至有过放弃
的想法,但终于坚持了下来。

我理解了要设计一个成功的电路,除了有创新能力以外,一
定要有扎实的知识基础,要娴熟地掌握课本上的知识,只有这样才能对试验中出现的问题
进行剖析解决。

在整个电路的设计过程中,花销时间最多的方案设定,好多就属于那种想
法很好可是要实现特别困难的设计以及高出能力范围的。

开始的时候特别焦急,可是入选
好了方案后,小构成员的劲头就起来了。

同时经过此次对数字秒表的设计与制作,让我认识了设计电路的程序,也让我认识了对于电子时钟的原理与设计理念。

在此次的电子时钟设计过程中,更进一步地熟习了SPCE061A单片机芯片的构造及工作原理,提升了自己的自学能力以及团队合作的能力,这对此后的学习生活有很大的帮助。

到实验室连结电路,调试机器也使我得益匪浅。

时下大学生广泛缺点,就是着手能力
差,此次连结电路锻炼了我的着手能力。

固然最后的成就不太理想,有些遗憾,可是这也历练了我的蒙受能力,毕竟在此后走出校园后的生活不会是一帆风顺的。

这样使我们有了近似的经验,在碰到这类状况也不至于无所眉目。

整体来说,经过此次课程设计学习,让我单片机的很多课外知识都有了大体的认识,也学会了实验箱的使用,这对此后的找工作也是一个优势。

此次课程设计学习也是对平常理论学习的一个查验。

更重要的是培育了我对学习的兴趣,开辟了自己的眼界,为此后的学习打下了好的初步,我得益匪浅。

参照文件
1. 李晓白凌阳 16 位单片机 C 语言开发,北京航空航天大学第一版社2006
2.康华光电子技术基础,华中科技大学电子技术课程组 2005
3.李广第单片机基础,北京航空航天大学第一版社
4.朱兆优等.单片机原理与应用 . 北京电子工业第一版社 .
5.何立民.单片机应用系统设计 [M] .北京:北京航空航天大学第一版社, 1993.
6.楼然笛.单片机开发 [M] .北京:人民邮电第一版社, 1994.。

相关文档
最新文档