课程设计报告设计题目: 电子时钟设计指导教师:姓名:学号:班级:专业:日期: 2012-1-5目录摘要 (3)第一章系统设计要求 (4)1.1基本功能 (4)1.2扩展功能 (4)第二章硬件总体设计方案 (4)2.1系统功能实现总体设计思路 (4)2.2各部分功能实现 (6)2.3系统工作原理 (6)2.4时钟各功能分析及图解 (6)2.4.1电路各功能图解分析 (7)2.4.2电路功能使用说明 (10)第三章软件总体设计方案 (1)控制电路的C语言源程序 (10)第四章课程设计结果分析 (19)第五章总结 (20)参考文献 (21)单片机电子时钟摘要:单片机即单片微型计算机。
(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。
他体积小,成本低,功能强,广泛应用于工业自动化上和智能产品。
时钟,自从它被发明的那天起,就成为了人类的好朋友,但随着时间的推移,科学技术的不断发展,时钟的应用越来越广范,人们对时间计量的精度要求也越来越高。
怎样让时钟更好的为人民服务,怎样让我们的老朋友再次焕发青春呢?这就要求我们不断设计出新型的时钟,来不断满足人们的日常生活需要。
然而市场上的时钟便宜的比较笨重,简单实用的又比较昂贵。
那么,有没有一款既简单实用价格又便宜的时钟呢?我们课程设计小组设想:可不可以利用单片机功能集成化高,价格又便宜的特点设计一款结构既简单,价格又便宜的单片机电子时钟呢?基于这种情况,我们课程设计小组成员多方查阅资料,反复论证设计出了这款既简单实用,又价格便宜的——单片机电子时钟。
关键词:单片机时钟计时第一章系统设计要求1.1 基本功能(1)能够显示时分秒(2)能够调整时分秒1.2 扩展功能(1)能够任意设置定时时间(2)定时时间到闹铃能够报警(3)实现了秒表功能第二章硬件总体设计方案本次设计时钟电路,使用了STC89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,用一扬声器来进行定时提醒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、扬声器、显示屏即可满足设计要求。
2.1系统功能实现总体设计思路此设计原理框图如图2-1所示,此电路包括以下四个部分:单片机,键盘,闹铃电路及显示电路。
图2-1 设计原理框图经多方论证硬件我们小组采用AT89C51单片机和7SED 八位共阳极数码管等来实现单片机电子时钟的功能。
详细元器件列表如表2.1所示:表2.1 详细元器件列表2.2各部分功能实现(1)单片机发送的信号通过程序控制最终在数码管上显示出来。
(2)单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。
(3)为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正数码管上显示的时间。
(4)单片机通过控制闹铃电路来完成定时闹钟的功能。
2.3系统工作原理设计的电路主要由四模块构成:单片机控制电路,显示电路、闹铃电路以及校正电路。
详细电路功能图如图2-2:本设计采用C语言程序设计,使单片机控制数码管显示时、分、秒,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数。
时、分、秒的计数结果经过数据处理可直接送显示器显示。
当计时发生误差的时候可以用校时电路进行校正。
设计采用的是时、分、秒显示,单片机对数据进行处理同时在数码管上显示。
2.4时钟各功能分析及图解2.4.1电路各功能图解分析(1)时钟运行图仿真开始运行时,或按下key4键时,时钟从12:00:00开始运行,其中key2键对分进行调整,key3对小时进行调整,key6可以让时钟暂停。
时钟运行图如图2-3 所示:(2)秒表计时图当按下key1键进入秒表计时状态,key6是秒表暂停键,可按key4键跳出秒表计时状态。
如图2-4:(3)闹铃设置图及运行图当按下key5,开始定时,分别按key2调分,key3调时设置闹铃时间,然后按下key4键恢复时钟运行状态(图2-5)当闹铃设置时间到时,蜂鸣器将发出10秒中蜂鸣声(图2-6)。
该数字钟是用一片STC89C52单片机通过编程去驱动8个数码管实现的。
通过6个开关控制,从上到下6个开关KEY1-KEY6的功能分别为:KEY1,切换至秒表;KEY2,调节时间,每调一次时加1;KEY3, 调节时间,每调一次分加1;KEY4,从其它状态切换至时钟状态;KEY5,切换至闹钟设置状态,也可以对秒表清零;KEY6,秒表暂停.控制键分别与P1.0~P1.5口连接.其中:A通过P2口和P3口去控制数码管的显示如图所示P2口接数码管的a——g端,是控制输出编码,P3口接数码管的1——8端,是控制动态扫描输出.B从P0.0输出一个信号使二极管发光,二极管在设置的闹钟时间到了时候发光,若有乐曲可以去驱动扬声器实现。
2.4.2电路功能使用说明(1)各个控制键的功能:可对时间进行校准调节(只能加1);按下设置键数字时钟进入闹钟设置状态,设置闹钟的时间;时加1、分加1键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的;按下秒切换键就可以进入秒表模式,同时秒表也开始计时,按下秒表暂停、复位键就暂停、归零,如果要重新对秒计时则可以按秒表开始、复位;清零键可以对闹钟清零。
STC89C51单片机,通过编写程序对数码显示进行控制。
(2)八个7段数码管显示时钟和秒表信号。
第三章软件总体设计方案控制电路的C语言源程序#include <reg52.h>#include <intrins.h>unsigned char data dis_digit;unsigned char key_s, key_v;unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xbf};// 4, 5, 6, 7, 8, 9,—unsigned char data dis_buf[8];unsigned char data dis_index;unsigned char hour,min,sec;unsigned char sec100;sbit K1 = P1^1;sbit K2 = P1^2;bit scan_key();void proc_key();void inc_sec();void inc_min();void inc_hour();void display();void delayms(unsigned char ms);void main(void){P2 = 0xff;P3 = 0xff;TMOD = 0x11; // 定时器0, 1工作模式1, 16位定时方式TH1 = 0xdc;TL1 = 0;TH0 = 0xFC;TL0 = 0x17;hour = 12;min = 00;sec = 00;sec100 = 0;dis_buf[0] = dis_code[hour / 10]; // 时十位dis_buf[1] = dis_code[hour % 10]; // 时个位dis_buf[3] = dis_code[min / 10]; // 分十位dis_buf[4] = dis_code[min % 10]; // 分个位dis_buf[6] = dis_code[sec / 10]; // 秒十位dis_buf[7] = dis_code[sec % 10]; // 秒个位dis_buf[2] = 0xbf; // 显示"-"dis_buf[5] = 0xbf; // 显示"-"dis_digit = 0xfe;dis_index = 0;TCON = 0x01;IE = 0x8a; // 使能timer0,1 中断TR0 = 1;TR1 = 1;key_v = 0x03;while(1){if(scan_key()){delayms(10);if(scan_key()){key_v = key_s;proc_key();}}}}bit scan_key(){key_s = 0x00;key_s |= K2;key_s <<= 1;key_s |= K1;return(key_s ^ key_v); }void proc_key(){EA = 0;if((key_v & 0x01) == 0) // K1{inc_hour();// JJ=1;}else if((key_v & 0x02) == 0) // K2{min++;// JJ=0;if(min > 59){min = 0;}dis_buf[3] = dis_code[min / 10]; // 分十位dis_buf[4] = dis_code[min % 10]; // 分个位}EA = 1;}void timer0() interrupt 1// 定时器0中断服务程序, 用于数码管的动态扫描// dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量// dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,// 选通P2.0口数码管// dis_buf --- 显于缓冲区基地址{TH0 = 0xFC;TL0 = 0x17;P3 = 0xff; // 先关闭所有数码管P2 = dis_buf[dis_index]; // 显示代码传送到P0口P3= dis_digit; //dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管dis_index++; //dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描}void timer1() interrupt 3{TH1 = 0xdc;sec100++;if(sec100 >= 100){sec100 = 0;inc_sec();}}void inc_sec(){sec++;if(sec > 59){sec = 0;inc_min();}dis_buf[6] = dis_code[sec / 10]; // 秒十位dis_buf[7] = dis_code[sec % 10]; // 秒个位}void inc_min(){min++;if(min > 59){min = 0;inc_hour();}dis_buf[3] = dis_code[min / 10]; // 分十位dis_buf[4] = dis_code[min % 10]; // 分个位}void inc_hour(){hour++;if(hour > 23){hour = 0;}if(hour > 9)dis_buf[0] = dis_code[hour / 10]; // 时十位elsedis_buf[0] = 0xff; // 当小时的十位为0时不显示dis_buf[1] = dis_code[hour % 10]; // 时个位}void delayms(unsigned char ms)// 延时子程序{unsigned char i;while(ms--){for(i = 0; i < 120; i++);}}第四章课程设计结果分析此时钟设计是利用protues仿真软件进行仿真,基本上实现了课程设计要求实现的功能。