多功能电子钟设计 单片机课程设计报告东华理工_单片机课程设计电子钟
多功能电子钟设计 单片机课程设计报告东华理工由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机课程设计电子钟”。
单片机原理及应用设计课程
设计报告
课题名称:多功能电子钟设计 姓 名: 学 号: 班 级: 指导老师:
2017年6月13日
目录
一、设计任务
....................................................1 1.1 基本任务..................................................1 1.2 功能增强型任务
.........................................1
二、任务分析
....................................................1 2.1 计时方案分析
...............................................1 2.2显示方案分析
.................................................2 2.3 预期功能实现
............................................2
三、设计思路......................................................2 3.1 计时部分课程设计思路
..................................2 3.2 按键判断部分课程设计思路
..............................3 3.3 数码管显示部分..........................................3
四、电路图
....................................................3
五、程序流程图
..................................................6
六、调试结果
....................................................8 6.1 时钟模块调试结果..............................................8 6.2 秒表模块调试结果..........................................8 6.3 日历功能调试模块..........................................9
七、总结
........................................................9
八、程序代码.....................................................10
一、设计任务
1、基本任务:利用定时器/计数器中断和静态显示或动态显示,实现电子钟的时分秒精确走时和校准。时间显示用四个数码管分别显示时、分,秒用点表示,在时和分的中间闪动,时间显示格式:
时间校准用 2 个键实现:一个键 K1做移位选择键(选中要修改的位,选中的位用闪烁指示),一个键 K2做加 1 键(对选中的位进行加 1 修改)。
2、功能增强型任务:在基本任务的基础上日历功能、准点报时功能和跑表功能:
(1)日历功能:能实现时、分、秒和年、月、日计时,增加 1 个按键控制分 3 屏显示,例如开始的第 1 屏默认显示“时、分、秒”四位+秒点,按下 K3键显示“月和日”四位,再按下 K3键显示“年份”四位,再按下 K3 键显示“时、分、秒”,依次类推。程序要能处理闰年、闰月功能。
(2)准点报时功能:可以再增加一个键 K(4)设计具有闹钟功能,实现定点报时。具体操作是:按下 K4 键,进入闹钟设置功能,再通过 K1、K2键来完成定点报警时间的设置。
(3)跑表功能:再增加一个键 K5 设计跑表功能,实现启动毫秒计数,相当与田径运动比赛的跑表工作。
二、任务分析
本次设计时钟电路,使用ATC89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,用一蜂鸣器来进行定时提醒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、开关电路、报警电路、LED数码管显示即可满足设计要求。
1、计时方案分析:
使用单片机内部的可编程定时器。
利用单片机内部的定时计数器进行中端定时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,但程序设计较为复杂。
2、显示方案分析:
对于实时时钟而言,显示显然是另一个重要的环节。通常LED显示有两种方式:动态显示和静态显示。
静态显示的优点是程序简单、显示亮度有保证、单片机CPU的开销小,节约CPU的工作时间。但占有I/O口线多,每一个LED都要占有一个I/O口,硬件开销大,电路复杂。需要几个LED就必须占有几个并行口,比较适用于LED数量较少的场合。当然当LED数量较多的时候,可以使用单片机的串行口通过移位寄存器的方式加以解决,但程序编写比较麻烦。
LED动态显示硬件连接简单,但动态扫描的显示方式需要占有CPU较多的时间,在单片机没有太多实时测控任务的情况下可以采用。
本系统需要采用4位LED数码管来分别显示时、分、秒,因数码管个数较多,故本系统选择动态显示方式。
3、预期功能实现: 1.基本任务要求:
(1)时间走时准确,每天误差不能超过5秒。
(2)仿照电子表的校时功能,校时修改时,被修改位能闪烁显示,按键要灵敏。(3)若最高位为 0,高位能灭零显示。2.增强型任务要求:
(1)跑表功能计数误差 1ms。
(2)日历程序要能处理闰年、闰月功能。(3)准点报时能人工解除和自动解除。
三、设计思路
1、计时部分课程设计思路
该课程设计是利用80C51单片机内部的定时/计数器、中断系统、以及行列键盘,设计一个单片机电子时钟。设计的电子时钟通过数码管显示,并能通过按键实现设置时间、校时、启动控制等。
用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为62500ms(自己计算)。形成定时时间为62500ms。用片内RAM的2FH单元对62500ms计数,计16次产生秒计数器34H单元加1,秒计数器加到60则分计数器33H单元加1,分计数器加到60则时计数器32H单元加1,时计数器加到24则时计数器清0。然后把分、时、日、月计数器分成分单元和时单元放到4个数码管的显示缓冲区,通过数码管显示出来。显示格式为小时高位、小时低位---分高位、分低位和显示日期格式为月高位、月低位---日高位、日低位。
2、按键判断部分课程设计思路
当每十六微秒进位一次时,程序就进行一次判断按键是否有按下的(是否有校正键按下),判断是否与上次按键相同。
如果相同直接送入时间缓冲间送出显示,如果不相同就保存按下的按键再进行判断是不是切换键按下,如果是时间时期同时取反,将取反时间送入时间缓冲间送出显示同时将取反日期送入日期缓冲间送出显示。
如果不是,判断是否是校正键按下,如果不是重复将取反时间送入时间缓冲间送出显示同时将取反日期送入日期缓冲间送出显示。如果是校正键按下就进入校正状态,将校正指针初值设成(00,01、10、11、分别代表分、时日、月)同样判断校正指针中的值进入下面分、时、日、月四个子程序中执行,同时进入每个时间日期子程序中都要进行判断是否有键按下,每次按键任何一个键都要送入时间日期缓冲间显示。
3、数码管显示部分
把我们设计好的程序通过查表在数码管上显示出来,数码管上从左到右分别显示月、日/时、分,四个数码管分别显示高位和低位,切换时间显示时,要显示出小数点闪烁。
四、电路图
实验电路包括LED数码管显示、键盘和报警喇叭三部分电路,如下所示。
图4.1 按键电路部分
图4.2 拨键开关连接电路
图4.3 闹钟报警电路
图4.4 动态数码管显示电路
图4.6 晶振电路
本设计晶振电路采用12M的晶振。晶振的作用是给单片机正常工作提供稳定的时钟信号。单片机的晶振并不是只能用12M,只要不超过20M就行,在准许的范围内,晶振越大,单片机运行越快,还有用12M的就是好算时间,因为一个机器周期为1/12时钟周期,所以这样用12M的话,一个时钟周期为12us,那么定时器计一次数就是1us了,电容范围在20-40pF之间,这里连接的是30pF的电容。
机器周期=10*晶振周期=12*系统时钟周期
图4.7 上电按钮复位电路
本设计采用上电按钮复位电路:首先经过上电复位,当按下按键时,RST直接与VCC相连,为高电平形成复位,同时电解电容被电路放电;按键松开时,VCC对电容充电,充电电流在电阻上,RST依然为高电平,仍然是复位,充电完成后,电容相当于开路,RST为低电平,单片机芯片正常工作。其中电阻R2决定了电容充电的时间,R2越大则充电时间长,复位信号从VCC回落到0V的时间也长。
图4.8 总电路图
五、程序流程图
开始等待外部中断按键按下外部中断0判断是外部中断0还是外部中断1外部中断1从当前显示时间开始计时停止计时,等待设置时间扫描矩阵键盘,判断按键否是根据不同按键控制设置位,以及时间的加减
主函数程序流程图
键盘扫面程序流程图
定时器中断程序流程图
外部中断程序流程图
六、调试结果
图6.1 时钟模块调试结果
图6.2 秒表模块调试结果
图6.3 日历功能调试模块
七、总结
通过这几天的的单片机课程设计,有很多的心得体会,有关于单片机的,也有关于之前所学过模电数电等基础科目的。下面是我对这几天课程设计的总结:
1.本次课程设计我主要通过Proteus软件仿真得到实验结果。本次实验我完成了实验的基本设计任务,即电子钟的设计,也达到了其所有的设计要求。在这基础上,我还完成了功能增强型的几项任务,如日历功能,其中跑秒的误差控制在了1ms范围内。但美中不足的是,日历功能不太完善,我设计的程序并不能处理闰年和闰月,且并没有闹钟这个模块,这正是我有待改善的地方。
2.本次实验,我又加深了对单片机的记忆。有些知识会迁移和联系模电数电。课堂教学考虑到大多数同学的需求,主要强调“基本”——基本知识、基本理论、基本方法、基本技能。而这次设计正是为我们提供了一个深入学习、探索的机会,成为课堂教学的有益补充。
3.单片机理论的学习是为课程的设计作准备的,但有时学习的理论也解决不了实践中的问题。实践中获得的知识能让我对单片机的知识有更好的认识和理解。虽然这次的课程设计我参考了一些文献资料,没有做到创新,但在对程序的读写过程中我明白了许多。4.通过本次课程设计让我更加了解了单片机各模块的功能,包括数码管显示,4*4矩阵键盘,独立按键。实验过程让我更加了解并进一步掌握了中断,定时计数,4*4键盘输入等程序编写。以及掌握了通过Proteus构造自己所需要的外围电路,进行仿真实验。通过此次课程设计,初步掌握了使单片机多个模块进行工作的原理和方法。
八、程序代码
#include typedef unsigned int unint;unsigned char h_code,l_code,key_code;int i=0;
//定义全局变量
unsigned char code key[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb, 0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
//按键状态定义
unsigned char code number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40};unsigned char code which[]={0x00,0x01,0x03,0x04,0x06,0x07};unsigned int HH=0;hh=0;MM=0;mm=0;SS=0;=0;sbit P32=P3^2;//延迟函数
void delay(unint k)
{unint i,j,x;
for(x=1;x
for(i=0;i
for(j=0;j
}
//按键扫描
unsigned char Scan_keyboard()
{ unsigned char h_code,l_code,key_code;
P1=0xf0;
h_code =P1;
h_code = h_code &0xf0;
P1=0x0f;
l_code =P1;
l_code = l_code &0x0f;
key_code = h_code | l_code;
return key_code;
}
void timer0_int(void)interrupt 1 {
++;
if(>9)
{
SS++;
=0;
}
if(SS>5)
{
mm++;
SS=0;
}
if(mm>9)
{
MM++;
mm=0;
}
if(MM>5)
{
hh++;
MM=0;
}
if(hh>9&&HH
{
HH++;
hh=0;
}
if(HH==2&&hh>3)
{
HH=0;
hh=0;
}
TH0=0x3c;
TL0=0xb0;}
void P3_2()
{
TMOD=0x01;TH0=0x3c;TL0=0xb0;EA=1;
//总中断打开 TR0=1;
//中断标志位 ET0=1;
//中断允许位 while(1){
int k=0;
delay(2);P2=0x00;P0=number[5];
delay(2);P2=0x01;P0=number[hh];
delay(2);P2=0x02;P0=number[10];
delay(2);P2=0x03;P0=number[MM];
delay(2);P2=0x04;P0=number[mm];
delay(2);P2=0x05;P0=number[10];
delay(2);P2=0x06;P0=number[SS];
delay(2);P2=0x07;P0=number[];
}
} main(){
unsigned char keynumber;while(1){ int k=0;
delay(2);P2=0x02;P0=number[10];
delay(2);P2=0x05;P0=number[10];for(;k
delay(2);P2=which[k];P0=number[0];} // if(P32==0)14
P3_2();/* keynumber=Scan_keyboard();if(keynumber!=0xff)
{
switch(keynumber)
{
case 0xee:P2=0x07;P0=number[i++];break;
case 0xde:P2=0x07;P0=number[i--];break;
case 0xbe:P2=0x07;i=0;P0=number[i];break;
default:break;
}
delay(150);
} if(i>9)i=0;else if(i
单片机课程设计电子钟设计目录一、摘要二、设计任务三、基本原理数码管显示可以用静态显示或动态显示方法。静态显示需要数据锁存器等硬件,接口复杂,时钟显示用四个数码管。动......
课程设计任务书(指导教师填写)课程设计名称电子技术课程设计学生姓名专业班级设计题目数字钟一、课程设计的任务和目的任务:设计一台能显示“时”、“分”、“秒”的数字钟,周期......
ORG0000HLJMPMAINORG001BHLJMPLOOPORG0100HMAIN:MOV21H,#17HMOV22H,#3AHMOV23H,#00H;设定时间初值MOV36H,#10MOV39H,#10MOVR7,#14H;循环20次50*20=1000msMOVDPTR,#0F003HMOV......
单片机课程设计 题目专业 通信工程 班级 11级1班 学号 姓名 电 子 钟 设 计 单片机原理与应用课程设计电子钟设计功能要求:1、设计一个电子时钟,要求可以显示时、分、秒,用户......
单片机课程论文设计 ——电子钟一 课程设计的主要内容 1 设计思想 1.1硬件设计思想 1.1.1电路设计思想电路原理图见图1,由动态数码显示组成时、分、秒的显示。把“单片机系......
