89C51单片机最小系统设计(电子时钟,秒表,按键计数地单片机设计)

合集下载

基于89C51系列单片机的电子钟设计

基于89C51系列单片机的电子钟设计
(4)断电走时 (5)亮度调节
电子钟原理框图
主要器件:
• STC89C51
• 电源
稳压芯片:7805、LM1117-2.85
• USB转串口芯片:PL2303HX • 通讯芯片:MAX232 • 储存芯片:IIC协议控制芯片AT24C02 (EEPROM) • 时钟芯片:SPI协议控制芯片DS1302 • 温度传感器:1-WIRE协议控制芯片DS18B20 • 液晶显示芯片:1602
储存芯片:EEPROM (AT24C02)
AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节, CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有 一个16字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门 的写保护功能。
PL2302(USB转RS232控制器)
//显示温度、秒、时、分数据: write_temp(12,flag);//显示温度,从第二行第12个字符后开始显示 write_sfm(8,miao); write_sfm(5,fen); write_sfm(2,shi);
//显示日、月、年数据: write_nyr(9,ri);//日期,从第二行第9个字符后开始显示 write_nyr(6,yue); write_nyr(3,nian); write_week(week);}
液晶显示1602
LCD1602初始化流程图
液晶写入指令、数据函数
液晶写入有关函数会在DS1302的函数中调用,所以液晶程序要放在前面 • • • • • • • • • • write_1602com(uchar com)//****液晶写入指令函数**** { rs=0;//数据/指令选择置为指令 rw=0; //读写选择置为写 P0=com;//送入数据 delay(1); en=1;//拉高使能端,为制造有效的下降沿做准备 delay(1); en=0;//en由高变低,产生下降沿,液晶执行命令 }

AT89C51单片机电子时钟的设计

AT89C51单片机电子时钟的设计

AT89C51单片机电子时钟的设计1.硬件设计首先,我们需要选择合适的外设硬件进行设计。

以下是一些常见的硬件组件:-AT89C51单片机-蜂鸣器-DS1302时钟模块-按键开关和对应的电阻液晶模块的连接方式如下:-VSS->GND-VDD->VCC-V0->电位器-RS->P0.7-R/W->P0.6-E->P0.5-DB0-DB7->P2.0-P2.7蜂鸣器的连接方式如下:-正极->P3.0-负极->GNDDS1302时钟模块的连接方式如下:-VCC->VCC-GND->GND-CE->P1.7-IO->P1.6-SCLK->P1.5按键开关的连接方式如下:-第一个按键->P3.1-第二个按键->P3.2-第三个按键->P3.32.软件设计在软件设计方面,我们将使用C语言编程来编写程序。

首先,我们需要定义和初始化必要的变量,例如小时、分钟和秒钟等计时变量。

然后,我们需要编写一个初始化函数来配置单片机的各种外设和寄存器。

在这个函数中,我们需要设置计时器/计数器、I/O口和中断等。

接下来,我们需要编写一个定时器中断函数,来更新计时变量并实现计时功能。

我们可以使用定时器中断来定期更新秒钟,并在需要时更新小时和分钟。

在主循环中,我们需要编写代码来控制液晶模块、蜂鸣器和按键开关等外设。

通过液晶模块,我们可以实现显示时间的功能。

通过蜂鸣器,我们可以实现头每秒发出一次滴答声的功能。

通过按键开关,我们可以实现设置时间的功能。

3.程序实现以下是AT89C51单片机电子时钟的程序框架:```c#include <reg51.h>#include <intrins.h>//定义和初始化计时变量unsigned char second = 0;unsigned char minute = 0;unsigned char hour = 0;//初始化函数void ini//配置计时器/计数器,设置定时器中断//配置I/O口和中断等//...//定时器中断函数//更新计时变量//...//主函数void mai//初始化init(;//主循环while (1)//控制液晶模块//控制蜂鸣器//控制按键开关//...}```在具体的代码实现中,我们需要根据液晶模块、蜂鸣器和按键开关等外设的具体规格和功能来编写相应的代码。

89C51单片机课程设计之秒表设计实验报告

89C51单片机课程设计之秒表设计实验报告

单片机课程设计报告单片机秒表系统课程设计班级:课程名称:秒表设计成员:实训地点:北校机房实训时间:6月4日至6月15日目录1课程设计的目的和任务1.1 单片机秒表课程设计的概述1.2课程设计思路及描述1.3 课程设计任务和要求2硬件与软件的设计流程2.1系统硬件方案设计2.2所需元器件3 程序编写流程及课程设计效果3.1源程序及注释3.2原理图分析3.3课程设计效果4 心得体会1. 课程设计的目的和任务1.1单片机秒表课程设计的概述一、课程设计题目秒表系统设计——用STC89C51设计一个4位LED数码显示“秒表”,显示时间为000.0~9分59.9秒,每10毫秒自动加一,每1000毫秒自动加一秒。

二、增加功能增加一个“复位”按键(即清零),一个“暂停”和“开始”按键。

三、课程设计的难点单片机电子秒表需要解决几个主要问题,一是有关单片机定时器的使用;二是如何实现LED的动态扫描显示;三是如何对键盘输入进行编程;四是如何进行安装调试。

四、课程设计内容提要本课程利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED数码管以及课程箱上的按键来设计计时器。

将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。

其中本课程设计有三个开关按键:其中key1按键按下去时开始计时,即秒表开始键,key2按键按下去时数码管清零,复位为“00.00”. key3按键按下去时数码管暂停。

五、课程设计的意义1)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。

2)掌握定时器、外部中断的设置和编程原理。

3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。

4)该课程通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义1.2课程设计思路及描述该课程设计要求进行计时并在数码管上显示时间,则可利用MCS-51系列单片机的芯片AT89C51的P3.2,P3.3,RST作为按键的入口;定时器T1作为每0.1秒加一的定时器。

单片机(微机原理)89c51电子时钟实验

单片机(微机原理)89c51电子时钟实验

天津**大学课程设计任务书课程名称:单片机原理及应用院(系、部、中心): *****专业: ******班级: ***姓名: *** 指导教师: ***电子时钟实验一、设计目的1、进一步掌握定时器的使用功能的使用和编程方法2、进一步掌握中断处理程序的编程方法3、进一步掌握数码显示电路的驱动方法二、设计要求利用CPU的定时器和试验仪上的提供的数码显示电路,设计一个电子时钟。

格式如下:XX XX XX 由左向右分别为:时、分、秒三、设备仪器1、LAB6000微控制器试验系统2、PC机一台3、试验导线若干四、试验步骤1、硬件电路设计本试验连接只需要接上显示/键盘的选择信号即可。

显示电路见附表中的键盘及LED显示电路或数码管显示试验。

2、程序框图电子钟程序框图3、程序流程图:OUTSEG EQU 08004H OUTBIT EQU 08002H ORG 0000HAJMP MAINORG 000BHAJMP TIMEORG 0300HMAIN:mov 20h,#00hMOV 21H,#00HMOV 22H,#00HMOV 23H,#00HMOV IP,#02H 、MOV IE,#82HMOV TMOD,#01H 、MOV TL0,#0B0HMOV TH0,#3CHSETB TR0 、MOV SP,#40H 、NEXT: LCALL DISP 、LCALL KEY 、JZ NEXT ;LCALL ANKEY 、SJMP NEXT 、NOPNOPNOPTIME: PUSH ACC PUSH PSWMOV TL0,#0B4H ;¸MOV TH0,#3CHINC 20H ;MOV A,20HCJNE A,#10,RETI1 MOV 20H,#00HMOV A,21HADD A,#01HDA AMOV 21H,ACJNE A,#60H,RETI1 MOV 21H,#00H MOV A,22HADD A,#01HDA AMOV 22H,ACJNE A,#60H,RETI1MOV 22H,#00HMOV A,23HADD A,#01HDA AMOV 23H,ACJNE A,#24H,RETI1MOV 23H,#00HRETI1: POP PSW ;POP ACCRETI ;NOPNOPDISP: ANL 2FH,#10H ; MOV A,21H ;´ANL A,#0FHORL A,2FHMOV 2FH,AMOV A,21HANL A,#0F0HSWAP AMOV 2EH,AANL 2DH,#10HMOV A,22H ;ANL A,#0FHORL A,2DHMOV 2DH,AMOV A,22HANL A,#0F0HSWAP AMOV 2CH,AANL 2BH,#10HMOV A,23H ;´ANL A,#0FHORL A,2BHMOV 2BH,AMOV A,23HANL A,#0F0HSWAP AMOV 2AH,AMOV R0,#2FHMOV R3,#06HMOV DPTR,#TABLEMOV A,#01HLOOP1: MOV B,A ;MOV DPTR,#OUTBITMOV A,#0MOVX @DPTR,AMOV A,@R0MOV DPTR,#TABLEMOVC A,@A+DPTRMOV DPTR,#OUTSEGMOVX @DPTR,AMOV DPTR,#OUTBITMOV A,BMOVX @DPTR,AMOV R2,#01H ;DJNZ R2,$DEC R0MOV A,BRL ADJNZ R3,LOOP1RETTABLE: db3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHKEY: MOV P3,#0FFH ;MOV A,P3CPL AANL A,#3CHJZ RETXLCALL DISP ;LCALL DISPMOV A,P3CPL AANL A,#3CH JZ RETXMOV R6,ALOOP2: LCALL DISP ; MOV A,P3CPL AANL A,#3CHJNZ LOOP2MOV A,R6RETX: RETNOPNOPANKEY: CLR EA ;LX: MOV A,R6JB ACC.2,L1 ;JB ACC.3,L2JB ACC.4,L3 ;JNB ACC.5,L12 ;JB 2BH.4,L6JB 2DH.4,L8JB 2FH.4,L9L12: LCALL DISP LCALL DISPLCALL KEY JZ L12 LJMP LXL2: MOV 25H,#00H ; CLR 2BH.4CLR 2DH.4CLR 2FH.4SETB EARETL3: JB 2BH.4,L61JB 2DH.4,L81JB 2FH.4,L91AJMP L12L1: MOV A,25HJZ LB1JB ACC.0,LB2JB ACC.1,LB3JNB ACC.2,L12LB1: MOV 25H,#01HSETB 2BH.4CLR 2DH.4CLR 2FH.4AJMP L12LB3: MOV 25H,#04H SETB 2FH.4CLR 2DH.4CLR 2BH.4AJMP L12LB2: MOV 25H,#02H SETB 2DH.4CLR 2BH.4CLR 2FH.4AJMP L12L61: AJMP L611 ; L81: AJMP L811 ; L91: AJMP L911L6: MOV A,23H ADD A,#01HDA AMOV 23H,ACJNE A,#24H,L15 L15: JC L112 MOV 23H,#00HL112: AJMP L12L8: MOV A,22H ; ADD A,#01HDA AMOV 22H,ACJNE A,#60H,L16 L16: JC L112 MOV 22H,#00H AJMP L12 L9: MOV A,21H ADD A,#01HDA AMOV 21H,ACJNE A,#60H,L17 L17: JC L112 MOV 21H,#00H AJMP L12L611: MOV A,23H ADD A,#99HDA AMOV 23H,ACJNE A,#99H,L112 MOV 23H,#23H AJMP L12L811: MOV A,22H ; ADD A,#99HDA AMOV 22H,ACJNE A,#99H,L112 MOV 22H,#59H AJMP L12L911: MOV A,21H ADD A,#99HDA AMOV 21H,ACJNE A,#99H,L112 MOV 21H,#59H AJMP L12NOPNOPEND4、程序调试:调试程序:打开LAB6000软件,录入程序以.ASM保存,编译,全速执行,观察试验结果。

基于AT89C51单片机的电子钟设计

基于AT89C51单片机的电子钟设计

重庆三峡学院《单片机原理及应用》课程设计报告书题目:基于AT89C51单片机的电子钟设计:学院(系)年级专业:号:学学生姓名:指导教师:教师职称:绩:成日2月12 年2012 制作日期基于AT89C51作息时间控制器的设计摘要:以单片机设计了一个基于AT89C51的作息时间控制器系统。

我们采用的是六位数码管静态显示方案来实现的。

该电子主要由A T89C51、74L164、六位数码管等构成的。

采用晶振电路作为驱动电路,有延时程序和循环程序作为一秒定时,达到时分秒的计时。

用keil进行代码编译,用proteus的ISIS软件进行仿真。

,单片机体积小设计成本低,且抗干扰能力很强,可以实现分式各分部控制的优点,让单片机很大的发展前景。

本次设计采用的就是现在性能最好的A T89C51单片机设计而成的最小系统。

它在我们生活中有很广泛的应用。

关键词:单片机电子钟静态显示目录第一章:引言1.1设计要求 (2)1.2设计目的 (2)1.3设计思路 (2)1.4主控制系统 (2)第二章:硬件系统2.1硬件原理图 (3)2.2晶振电路 (3)2.3复位电路 (4)2.4驱动电路 (4)2.5显示电路 (5)2.6硬件原理及说明 (6)2.7主要性能及参数 (6)第三章:软件系统设计 (7)3.1主程序 (7)3.2显示子程序 (8)3.3定时中断子程序 (10)3.4软件仿真 (12)第四章:系统调试 (14)4.1硬件调试 (14)第五章:实验心得 (14)参考文献 (14)附录……………………………………………………………………………………第15页- 1 -第一章引言1.1设计要求:系统上电和复位后能自动显示时间,能根据预先设定的时间进行打铃,响铃时间为15秒。

设计一个六位数码管的额显示电路,能够显示“时、分、秒”1.2设计目的:1.2.1通过课程设计能让我们更加深入的了解单片机的基本原理,各电路的设计及其仿真调试。

单片机课程设计_基于89C51的数字电子时钟的设计

单片机课程设计_基于89C51的数字电子时钟的设计

单片机系统课程设计成绩评定表设计课题基于89C51的数字电子时钟设计学院名称:电气工程学院专业班级:学生姓名:学号:指导教师:设计地点:设计时间:单片机系统课程设计课程设计名称:基于89C51的数字电子时钟设计专业班级:学生姓名:学号:指导教师:课程设计地点:课程设计时间:2014-01-01~2015-01-12单片机系统课程设计任务书目录1 引言 (5)2 设计目的 (5)3 系统方案与总体结构设计 (5)3.1系统方案设计 (5)3.2数字时钟框图设计 (6)4数字时钟的硬件构成 (8)4.1 选用芯片简介 (8)4.2 LED数码显示器简介 (12)5各个模块工作原理及原理图 (12)5.1计时模块 (13)5.2数字时钟控制模块 (13)5.3振荡模块 (14)5.4显示模块 (14)6系统软件设计 (15)6.1软件设计的要点 (15)6.2 AT89C51内部定时器/计数器0的使用方法 (15)6.3 程序设计流程图 (16)7系统调试与总结 (17)7.1电路调试 (17)7.2软件调试 (17)8结论与心得 (18)附录A系统原理图 (18)附录B 源程序 (20)参考文献 (26)1 引言数字时钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,无机械装置,具有更长的使用寿命。

数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字时钟的精度,远远超过老式钟表,使其得到了广泛的使用。

该课程设计为数字电子钟的设计。

以AT89C51为核心,配合8位7段共阴极LED数码管显示实时数据,按键可以进行数据调整,为用户提供长期、连续、可靠、稳定的工作环境。

该数字电子钟有时分秒显示功能以及时间的调整的功能。

系统软件设计主要实现参数设置、串行口数据接收、指令发送以及数据的显示和存储,并且实现键盘、液晶显示器等各模块的功能,采用汇编语言编程。

关键词:数字电子钟单片机汇编语言2 设计目的深化和扩充在单片机原理及相关课程方面的基本知识、基本理论和基本技能熟悉设计过程,了解设计步骤,掌握设计内容,培养设计电路、实现软件编程和编写设计说明书能力的目的,为今后从事相关方面的实际工作打下良好基础。

基于89C51单片机电子数字时钟的设计本科毕业论文

基于89C51单片机电子数字时钟的设计本科毕业论文

本科毕业论文基于89C51单片机电子数字时钟的设计目录第一章第一章 电子时钟的总体设计电子时钟的总体设计 ....................................................................................................... ...................................................................................................... 44 1.1 设计目的设计目的.......................................................................................................................... 4 1.1.1 课程设计课程设计 ............................................................................................................... 4 1.1.2 AT89C51芯片的串口功能芯片的串口功能.................................................................................... 4 1.1.3用keil 软件进行编程与调试 .................................................................................. 4 1.2 设计任务设计任务 .......................................................................................................................... 4 1.3 设计思路设计思路.......................................................................................................................... 4 第二章第二章 硬件系统的设计硬件系统的设计............................................................................................................... .............................................................................................................. 66 2.1 电路原理图设计电路原理图设计 .............................................................................................................. 6 2.1.1 电子钟的硬件电路框图电子钟的硬件电路框图...................................................................................... 6 2.2 AT89C51引脚及其功能 (6)2.2.1 AT89C51的原理及说明的原理及说明 ........................................................................................ 6 2.2.2 引脚功能引脚功能 ............................................................................................................... 7 2.3 驱动部件驱动部件 .......................................................................................................................... 8 2.4 显示部分显示部分.......................................................................................................................... 9 第三章第三章 软件系统的设计软件系统的设计............................................................................................................. ............................................................................................................ 110 3.1 电子钟的主程序电子钟的主程序............................................................................................................ 11 3.2 电子钟的显示子序电子钟的显示子序 ........................................................................................................ 12 3.3 定时器中断服务程序定时器中断服务程序 .................................................................................................... 13 3.4 电子时钟设计程序清单电子时钟设计程序清单 ................................................................................................ 15 3.5 程序进行编译仿真程序进行编译仿真........................................................................................................ 18 3.5.1 89C51程序 ......................................................................................................... 18 3.5.2 用PROTEUS ISIS 进行电子万年历的仿真测试 . (20)第四章第四章对89C51设计的电子时钟的总结................................................................................. 22 参考文献 ........................................................................................................................................ . (2)23摘要本次实训是基于AT89C51单片机电子钟的设计,对时、分、秒的显示的控制,时、分、秒用六位数码管显示LED 数码管时钟电路采用24小时计时方式。

基于at89c51的电子时钟设计

基于at89c51的电子时钟设计

课程设计2:设计一个数字时钟。

要求如下:1.利用51开发板上LED数码管,LED灯,按键等设备,设计一个电子时钟。

2.电子钟使用4位数码管显示小时(24小时制)和分钟,秒可以使用LED灯或其他形式表现。

3.具有设置时钟功能,设置时间时,时间停止计时。

需要设置的位置数码管处于闪烁状态,如你想设置小时的数值时,显示小时的数码管需要处于闪烁状态,而显示分钟的数码管不可以处于闪烁状态,应处于正常显示状态。

4.按键可以选择独立键盘或矩阵键盘。

5.其他扩展功能(选做,能力强的可以做):如闹钟,时制切换等。

一.key.c#include "reg52.h"#include "key.h"extern unsigned char min_flag ;//标志位,控制分数码管闪烁extern unsigned char hour_flag ;//标志位,控制时数码管闪烁extern unsigned char shi ;extern unsigned char fen ;unsigned char key_flag = 0;//标志位,有按键被按下unsigned char key_con = 0;//控制位,控制按键(K1)被按下/*独立按键P12连接到51单片机P1端口k1对应的端口为P1.3k2对应的端口为P1.2k3对应的端口为P1.1k4对应的端口为P1.0*/code unsigned char arr[]={0xf7,0xfb,0xfd,0xfe};unsigned char read_key(unsigned char key){unsigned char i;for(i=0;i<8;i++){if(!(key & 1)){return i+1;}key>>=1; //key = key >> 1 ;}return 0;}void key_scan2(void){unsigned char temp;//键盘扫描temp = key4_scan();if(temp){if(!key_flag){if(temp==4)//K1被按下{key_con++;if(key_con==1) //第一次按下调整小时的数值{hour_flag=1;min_flag =0;}else if(key_con==2) //第二次按下调整分的数值{hour_flag=0;min_flag =1;}else //第三次按下取消调整{hour_flag=0;min_flag =0;key_con = 0;}}if(temp == 3) //增加数值{if(hour_flag){shi++;if(shi>23){shi = 0;}}else if(min_flag){fen++;if(fen>59){fen = 0;}}}if(temp == 2) //减少数值{if(hour_flag){shi--;if(shi>250){shi = 23;}}else if(min_flag){fen--;if(fen>250) //非负数,减的时候不会小于0{fen=59;}}}}key_flag = 1;}else{key_flag = 0;}}/*扫描独立键盘,输入参数:无返回值:有键按下时:返回对应的数字没有按键:返回0*/unsigned char key4_scan(void){unsigned char temp;P1 = 0xf;if(P1 != 0xf)//有按键被按下{temp = P1 & 0xf;//1110return read_key(temp);}return 0;}unsigned char sub_key_scan(unsigned char key) {unsigned char temp;P1 = key; //判断第一行temp = P1 >> 4;if(temp != 0xf){return read_key(temp);}return 0;}/*矩阵键盘硬件连接:P13连接到51单片机P1端口P1.0对应P13的1脚P1.1对应P13的2脚P1.2对应P13的3脚……P1.7对应P13的8脚输入参数:无返回值:有键按下时:返回对应的数字没有按键:返回0*/unsigned char key16_scan(void){unsigned char temp;unsigned char i=0;P1 = 0xf0;if(P1 != 0xf0)//有按键被按下{for(i=0;i<4;i++)//用函数扫描4行{temp = sub_key_scan(arr[i]);if(temp){return temp+(i*4);}}}return 0;}二.Key.h#ifndef KEY_H#define KEY_Hunsigned char key4_scan(void); unsigned char key16_scan(void);void key_scan2(void);#endif三.Led_reg.c#include "reg52.h"/*P2连接位码,P2.0连接Q4B,P2.1连接Q3B,P2.2连接Q2B,P2.3连接Q1B P0端口连接段码,P0.0连接A,。

基于单片机AT89C51控制的电子时钟课程设计报告

基于单片机AT89C51控制的电子时钟课程设计报告

单片机电子时钟设计报告实现功能:显示时、分、秒,刚打开电源时,显示的数据为12:00:00,然后电路会自动开始计时。

电路中有时、分、秒各自单独的调整按钮,时间调整按钮每按一次,相应的显示时间加1。

所需材料:89C51单片机,多位数码管,数码管显示译码器74LS48,3线8线译码器74LS138,3个按钮,100Ω、22KΩ电阻若干,12MHZ晶振一个,30pf无极电容2个,10uf 有极电容一个,敷铜板。

电路设计:用P1端口的P1.0~P1.3来作为数码管显示数据的输出引脚,用P1.4~P1.6引脚作为3线8线译码器的控制输入引脚,用P0端口的P0.0~P0.2来分别作为时、分、秒的时间调整按钮。

当按下按钮时,相应的输入引脚上就会有低电平输入单片机。

3线8线译码器的控制端,Y0、Y1、Y2、Y3、Y4、Y5分别控制了数码管的显示控制线。

电路如下图1-1图1-1流程图:程序设计:ORG 00H 主程序起始地址JMP START 主程序STARTORG 0BH 定时器T0中断起始地址JMP TIM0 定时器T0中断子程序TIM0 START:MOV SP,#70H 设置堆栈指针MOV 28H,#00 设置显示位数扫描指针初值为0 MOV 2AH,#12H 设置时钟显示寄存器初值为12H MOV 2BH,#00 设置分钟显示寄存器初值为00H MOV 2CH,#00 设置秒钟显示寄存器初值为00H MOV TMOD,#01H 设置定时器T0工作在方式1 MOV TH0,#0F0H 定时4ms的初值,即0F060H MOV TL0,#60H 初值的低位MOV IE,#82H 定时器T0中断允许MOV R4,#250 保证后面实现中断250次,即1秒的延时SETB TR0 启动定时器T0LOOP:JB P0.0,N2 若没有按键,就转去下一步检查分CALL DELAY 延时5ms,消除抖动MOV A,2CH 将秒寄存器的值载入累加器AADD A,#01H A的内容加1DA A 十进制调整MOV 2CH,A A的值存入秒寄存器CJNE A,#60H,N1 看是否已经是60秒,若不是就继续检查MOV 2CH,#00 已经是60秒,就清空秒寄存器的值N1:JNB P0.0,$ 秒按键还没有放开就循环等待CALL DELAY 延时5ms,消除抖动N2:JB P0.1,N4 若分没有按键,就转去下一步检查分CALL DELAY 延时5ms,消除抖动MOV A,2BH 将分寄存器的值载入累加器AADD A,#01H A的内容加1DA A 十进制调整MOV 2BH,A A的值存入寄存器CJNE A,#60H,N3 看是否已经是60分,若不是就继续检查MOV 2BH,#00H 已经是60分,就清空寄存器的值N3:JNB P0.1,$ 分按键还没有放开就循环等待CALL DELAY 延时5ms,消除抖动N4:JB P0.2,LOOP 若时没有按键,就转回去继续检查看是否有按键CALL DELAY 延时5ms,消除抖动MOV A,2AH 将时寄存器的值载入累加器AADD A,#01H A的内容加1DA A 十进制调整MOV 2AH,A A的值存入时寄存器CJNE A,#24H,N5 看是否已经是24时,若不是就继续检查MOV 2AH,#00H 已经是24时,就清空是寄存器的值N5:JNB P0.2,$ 时钟按键还没有放开就循环等待CALL DELAY 延时5ms,消除抖动JMP LOOP 返回重新检查看是否有按键******定时器T0中断子程序*******TIM0:MOV TH0,#0F0H 定时初值重设MOV TL0,#60HPUSH ACC 将累加器A的值暂存于堆栈PUSH PSW 将PSW的值暂存于堆栈DJNZ R4,X2 计时中断不满1s就退出继续中断MOV R4,#250 计时1sCALL CLOCK 调用计时器子程序CLOCKCALL DISP 调用显示子程序DISPX2:CALL SCAN 调用扫描子程序SCANPOP PSW 到堆栈取回PSW的值POP ACC 到堆栈取回累加器ACC的值RETI 返回主程序******扫描子程序*******SCAN:MOV R0,#28HINC @R0 显示位数扫描值加1CJNE @R0,#6,X3 扫描位数不为6就准备控制输出MOV @R0,#0 扫描位数为6,就令其置为0X3:MOV A,@R0 扫描位数载入AADD A,#20H A加上20H(显示寄存器地址)=各时间显示区地址MOV R1,A 各时间显示区地址存入AMOV A,@R0 扫描位数存入ASWAP A 将A的高低4位交换(其高4位为扫描的位数,低4位为显示数值)ORL A,@R1 将扫描值与显示数据组合MOV P1,A 显示输出RET******计时子程序*******CLOCK:MOV A,2CH 秒寄存器值载入AADD A,#1 加1sDA A 十进制调整MOV 2CH,A A的值存入秒寄存器CJNE A,#60H,X4 A不等于60秒,就跳出程序去显示MOV 2CH,#00H 已经是60秒,就清0MOV A,2BH 分寄存器值载入AADD A,#1 加1分DA A 十进制调整MOV 2BH,A A的值存入分寄存器CJNE A,#60H,X4 A不等于60分,就跳出程序去显示MOV 2BH,#00H 已经是60分,就清0MOV A,2AH 时寄存器值载入AADD A,#1 加1小时DA A 十进制调整MOV 2AH,A A的值存入时寄存器CJNE A,#24H,X4 A不等于24时,就跳出程序去显示MOV 2AH,#00H 已经是24时,就清0X4:RET******显示子程序*******DISP:MOV R1,#20H 20H为显示寄存器单元MOV A,2CH 将秒寄存器的内容存入AMOV B,#10H 设B累加器的值为10HDIV AB A/B,商存入A(十位数),余数存入(个位数)MOV @R1,B 将显示的个位数存入20H显示寄存器单元INC R1MOV @R1,A 将显示的十位数存入21H显示寄存器单元INC R1MOV A,2BH 将分寄存器的内容存入AMOV B,#10H 设B累加器的值为10HDIV AB A/B,商存入A(十位数),余数存入(个位数)MOV @R1,B 将显示的个位数存入22H显示寄存器单元INC R1MOV @R1,A 将显示的十位数存入23H显示寄存器单元INC R1MOV A,2AH 将时寄存器的内容存入AMOV B,#10H 设B累加器的值为10HDIV AB A/B,商存入A(十位数),余数存入(个位数)MOV @R1,B 将显示的个位数存入24H显示寄存器单元INC R1MOV @R1,A 将显示的十位数存入25H显示寄存器单元RET******延时5ms消除抖动*******DELAY:MOV R6,#60D1:MOV R7,#248DJNZ R7,$DJNZ R6,D1RETEND原理图:PCB图:。

基于89C51的数字电子钟设计

基于89C51的数字电子钟设计

单片机系统课程设计目录1 概述 (3)1.1 研究背景 (3)1.2 设计思想及基本功能 (4)2 总体方案设计 (4)2.1 方案选取 (4)2.1.1显示模块选择方案和论证 (4)2.1.2时钟芯片的选择方案和论证 (5)2.2总体方案设计 (6)2.3 系统整体设计框图 (6)3 硬件电路设计 (6)3.1 电源电路设计 (6)3.2 晶振电路 (7)3.3 复位电路 (7)3.4 时钟电路 (8)3.4.1 DS1302芯片介绍 (8)3.4.2 DS1302在本设计中的应用 (12)3.5 键盘电路 (12)3.6 显示电路 (13)3.7 整点报时电路 (16)4 系统软件设计 (17)4.1 主程序软件设计 (17)4.2 键盘子程序设计 (18)4.3 日历时钟子程序设计 (19)4.4 显示子程序设计 (20)4.5 整点报时子程序的设计 (21)5 系统调试 (22)5.1软件调试 (22)5.2 硬件调试 (23)6 总结 (24)参考资料:.......................................... 错误!未定义书签。

附录一:系统原理图.................................. 错误!未定义书签。

附录二:元件清单.................................... 错误!未定义书签。

附录三:源程序代码.................................. 错误!未定义书签。

1 概述1.1 研究背景在日新月异的21世纪里,家用电子产品得到了迅速发展。

许多家电设备都趋于人性化、智能化,这些电器设备大部分都含有CPU控制器或者是单片机。

单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统、通讯设备、日常消费类产品和玩具等。

并且已经深入到工业生产的各个环节以及人民生活的各个方面,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等。

基于AT89C51单片机的定时闹钟设计

基于AT89C51单片机的定时闹钟设计

学号: 班级: 姓名:基于89C51单片机的电子闹钟设计一、设计要求(1)设计并实现一个具有计时功能的电子时钟系统,电子表的时间精确到秒,并可以显示年、月、日、时、分、秒。

(2)利用液晶显示器显示定时器的日期和时间。

(3)使用键盘进行设置时间和设置闹钟。

(4)定时时间到通过蜂鸣器报警和发光二极管闪烁通知,并持续60s 。

二、硬件设计(1)系统设计框图(2)选择硬件设备单片机:选择AT89C51;液晶显示器:具有16字符显示功能的1601 键盘:选择4行*4列的矩阵键盘 LED :选择红色的发光二极管 E 2PROM :X2545基本元件:蜂鸣器,电容,晶体振荡器 ,电阻,开关 电源:使用+5v 直流稳压源 基本模块的构成①时钟信号发生单元如右图2 利用晶振和电容以及单片机内部 电路,构成晶体并联振荡器,产 生12MHz 的时钟频率 ②复位电路如右图3利用一个简单的电容和按键实现*SI SO SCK CSR/S R/W E 单片机 89C51液晶显示蜂鸣器LED E 2PROM X2545 512*8bit键盘P2口P1口图1定时器系统框图数码管显示统P0口P3.0P3.6、P3.7基本模块图2时钟信号发生单元实现对系统的复位功能由此基本模块可以实现最小的单片机系统(3)电子时钟硬件原理图图4硬件电路原理电路(4)主要器件的原理①液晶显示原理液晶显示器种类繁多,按输出样式分为,图案式,数码式,点阵式。

本设计方案利用的是点阵式液晶显示器,而液晶驱动方式又和数码管驱动截然不同,虽然比数码管需要更小的工作电压,但是其结构所需要的扫描方式较数码管来说,是比较复杂的,而且输入输出数据速度慢,市场上是常用点阵式液晶驱动器的,常用的有1601、1602……,“16”代表显示字符共有几列,“01”、“02”代表输出字符共有几行。

下面是驱动1601的驱动方法。

驱动1601的一个很重要的方面就是液晶显示器的初始化,主要是利用控制、数据复用总线来输入指令,进行初始化。

基于89C51系列单片机的电子钟设计

基于89C51系列单片机的电子钟设计

目录1设计要求 (2)2设计方案和论证 (2)2.1总设计原理框图 (2)2.2设计方案的选择 (2)2.2.1计时方案 (2)2.2.2显示系统的方案 (3)3硬件部分 (3)3.1主要器件 (3)3.2 IO口分配说明 (3)3.3详细器件介绍 (4)3.3.1 STC89C51单片机介绍 (4)3.3.2电源 (6)3.3.3复位电路 (7)3.3.4 ULN2003(大电流驱动阵列) (7)3.3.5储存芯片:EEPROM (AT24C02) (8)3.3.6 PL2302(USB转RS232控制器) (8)3.3.7液晶显示1602 (10)3.3.8时钟芯片DS1302 (11)4 软件部分 (13)4.1主程序流程图 (13)4.2液晶初始化流程图 (14)4.3时间与日期显示流程图 (15)4.4温度显示流程图 (16)4.5键扫描流程图 (17)5调试和结果分析 (19)5.1调试 (19)5.2问题和结果分析 (20)6心得体会 (20)1.设计要求设计产品实现一个依据时段可变显示亮度电子钟,具体如下:(1)能够实现基本时钟的走时,显示范围是00:00:00——23:59:59。

能够实现时钟的调整, 通过按键可以对“时”位和“分”位进行加1调节,并能当加至最大值时能重新归零。

(2)能够实现当前室温的测量功能,并在数码管上予以显示(3)能够实现年月日的显示与切换。

(4)能够实现温度的显示与切换。

(5)能够实现根据时段自动改变显示亮度。

2.设计方案和论证本次设计时钟电路,使用了STC89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒、年、月、日、星期。

使用C 语言程序来控制整个时钟显示,主要这样通过四个模块:键盘、时钟芯片、温度传感器、1602lcd 显示即可满足设计要求。

2.1总设计原理框图 如下图所示:2.2 设计方案的选择2.2.1 计时方案方案一:采用实时时钟芯片现在市场上有很多实时时钟集成电路,如DS1287、DS12887、DS1302等。

AT89C51最小系统制作

AT89C51最小系统制作

51最小系统模块
(红色字体为网络标号,标有相同网络标号的引线要连接在一起。


将四组I/0口用八针排针引出,方便后续实验的引出使用。

由于P0口没有内部上拉电阻(有时候会驱动不足),所以可以使用一个1K的排阻做上拉电阻,排阻有字的一头白点下对应的引脚接入单片机的40脚(VCC),排阻的其余八个引脚分别接入PO口。

另外,建议在电源(VCC GND)输入端接两组两针排线方便以后实验中将电源从最小系统引到其他模块。

LLS:实践部内下的。

复位电路电阻可用100 1K 电容4.7uf组合(可参考课本P37证明可用)
都是排针,(也可以是专门的两针头)可多接几个,为其他模块供电,后面模块数量不止一个。

芯片用AT89S51可支持在线编程。

LED灯可不接在最小系统模块里。

单独起来用。

用1K电阻的接法(圈是排针的脚)
先不接排阻,留个位置以后器件补上后直接接到后面。

基于AT89C51单片机的最小系统设计

基于AT89C51单片机的最小系统设计

基于AT89C51单片机的最小系统设计组员:田竹、王维、袁倍明摘要:本次实验课题为设计一个基于AT89C51单片机的最小系统。

用P1口设计流水灯,用P2口和P0口分别作段选和位选设计了六位数码管的静动态显示和简易的电子钟,用P3口设计了一个4*4的矩阵键盘,并用蜂鸣器实现了唱歌功能和键盘按下的声响,用62256扩展内部RAM,还扩展并实现了LCD1602的静动态显示,最后通过ADC0809和DAC0832分别实现了A/D、D/A转换功能。

一、系统电源用MC7805集成稳压器将输入电压转为+5V稳压给系统供电。

二、晶振(12MHZ)及复位电路采用12MHz的外部晶振,给系统提供时钟信号。

并采用了按键复位电路。

三、流水灯功能描述:让8个led灯循环闪烁源程序:流水灯ORG 0000HLJMP MAINORG 0100HMAIN:MOV A,#11111110B LOOP:MOV P1,A;给P1口送值LCALL DLYRL A ;循环左移LJMP LOOPDL Y:MOV R7,#250 ;延时子程序DLY1: MOV R6,#200DJNZ R6,$DJNZ R7,DLY1RETEND四、数码管功能描述:数码管动态显示1~6源程序:ORG 0000HLJMP STARTORG 0100HSTART:MOV P0,#0MOV P2,#0F9HSETB P0.0LCALL DELAYCLR P0.0MOV P2,#0C4HSETB P0.1LCALL DELAYCLR P0.1MOV P2,#0D0HSETB P0.2LCALL DELAYCLR P0.2MOV P2,#99HSETB P0.3LCALL DELAYCLR P0.3MOV P2,#92HSETB P0.4LCALL DELAYCLR P0.4MOV P2,#82HSETB P0.5LCALL DELAYCLR P0.5LJMP STARTDELAY: MOV R5,#10D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND五、4*4矩阵键盘和蜂鸣器功能描述:通过按键让数码管显示0-F,按键按下时,蜂鸣器响一下。

单片机课程设计89C51数字时钟

单片机课程设计89C51数字时钟

单片机课程设计报告课题:基于89C51的数字时钟学院:理学院专业:光信息科学与技术**:***学号:*************:**淮海工学院2010年12月23日摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。

而51单片机是各单片机中最为典型和最有代表性的一种。

本实验是基于MCS51系列单片机所设计的,可以实现键盘按键与数字动态显示并可以用音乐倒数的计数器。

本设计基于单片机技术原理,以单片机芯片AT89C51作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个计数器,包括以下功能:输出时间。

一、设计目的1、学会掌握KeilC51汇编语言程序的设计和调试。

2、学会将所学的单片机原理的有关知识应用于实践,提高单片机应用于技术的实践操作技能,掌握单片机应用系统设计、研制的方法,培养理论联系实际的学习作风,提高动手能力、分析并解决实际问题的能力。

3、使我们进一步了解掌握所学的专业知识,巩固和深化对单片机的结构、指令系统、中断系统、键盘/显示系统、接口技术、系统扩展、定时/控制、程序设计、应用开发、等基本理论知识的理解。

4、通过设计、分析、调试,培养我们工程意识,激发大家对产品开发的兴趣,及培养对科技革新、开发和创新的基本能力。

二、设计要求1.开机时,显示12:00:00的时间开始计时;2.P3.0/ AD0控制”秒”的调整,每按一次加1秒;3.P3.1/ AD0控制”分”的调整,每按一次加1分;4.P3.2/ AD0控制”时”的调整,每按一次加1小时;5.用protues画出原理图并仿真实现,写出源程序;6.在万用板上焊接元件调试;7.写出详细的实验报告。

三、所需电子元器件单片机89C51. 1个非门74LS04. 1个缓冲器74 LS373. 1个LG3611AH数码管. 6个电阻1(1KΩ). 8个电阻2(10KΩ). 1个电阻3(510Ω). 3个电容.(33pf) 2个电解电容. 1个四设计原理及其框图1.数字钟的构成数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路.由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定.通常使用石英晶体振荡器电路构成数字钟.⑴晶体振荡器电路晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路.⑵分频器电路分频器电路将32768Hz的高频方波信号经32768()次分频后得到1Hz的方波信号供秒计数器进行计数.分频器实际上也就是计数器.⑶时间计数器电路时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器,而根据设计要求,时个位和时十位计数器为24进制计数器.⑷译码驱动电路译码驱动电路将计数器输出的8421BCD码转换为数码管需要的逻辑状态,并且为保证数码管正常工作提供足够的工作电流.⑸数码管数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管.2.数字钟的工作原理设计原理主要利用AT89C51单片机,由单片机的p2口控制数码管的位显示,p1口控制数码管的段显示,p3.0——p3.2与按键相接用于时间校正。

基于单片机STC89C516RD+的电子钟设计

基于单片机STC89C516RD+的电子钟设计

单片机课程设计实验报告——基于STC89C516RD+的电子钟设计学院:电气与电子工程学院班级:姓名: ===学号:时间: 2015.06目录1.实验内容及要求………………………………………………/012.课题研究目的和意义及介绍……………………………../013.设计思路及描述………………………………………………/024.硬件设计………………………………………………………../035.软件设计………………………………………………………../066.实验心得及体会………………………………………………/107.总结………………………………………………………………./11一、实验内容及要求1.实验内容用STC89C516RD+设计一个用电子屏显示的电子钟,可以显示年、月、日以及时、分、秒,且时间时时刻刻在变化,秒数每秒加一且可以进行分钟进位小时进位。

另外该电子钟还可以设置闹钟,闹钟到达指定时刻时便自动进行闹铃,间断响铃持续一分钟后停止,而在其过程中若是按下键盘上的#号键可以将闹钟关闭,不仅如此#号键就是闹钟的总开关,按下一次闹钟关闭,再按一次闹钟开启。

对应键盘上的*号键功能为设置闹钟,按下*号键再用键盘输入四位数字如“0909”,9时9分就成为了电子钟的闹铃时间。

2.实验要求了解89C51系列芯片的工作原理和工作方式,使用该种芯片对LCD数字显示屏进行显示控制,实现用单片机的端口控制显示屏,显示时间年月日时分秒,并且能通过按键来设置一个闹钟,并可以控制开启和关闭闹钟。

要求选用定时器的工作方式,画出使单片机控制LCD显示屏的电路图,并实现硬件电路,最后用软件编程完成闹钟设置、闹钟提醒、闹钟开关功能。

二、课题研究目的和意义及介绍1.目的意义1)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。

2)掌握定时器、外部中断的设置和编程原理。

3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。

基于AT89C51单片机的数字电子时钟设计

基于AT89C51单片机的数字电子时钟设计

/安徽工程大学机电学院单片机课程设计题目:数字电子时钟设计指导老师:***制作人员:范超学号:************班级:自动化2132日期:7月13日-7月24日总评成绩:课程任务设计书设计题目:数字电子时钟的设计设计任务:1.设计一款时,分,秒可调数字电子时钟可整点报时;2.设计三个按键K1,K2和K3,用于调节时钟的时间;3.用8个、七段LED数码管作为显示设备,开机显示00-00-00;本设计采用AT89C51单片机为核心器件。

具有电子钟显示,时间调整,整点报时等功能。

此数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。

根据60秒为一分、60分为1小时的计数周期,构成秒、分、时的计数,实现计时的功能。

而且能显示清晰、直观的数字符号。

针对数字钟会产生误差的现象,就设计有校准时间的功能。

AT89C51单片机控制的数字钟的硬件结构与软件设计,给出了汇编语言源程序。

此数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。

它的计时周期为24小时,显示满刻度为24时00分00秒,另外应有校时功能。

电路由时钟脉冲发生器、时钟计数器、译码驱动电路和数字显示电路以及时间调整电路组成。

用晶体振荡器产生时间标准信号,这里采用石英晶体振荡器。

根据60秒为1分、60分为1小时、24小时为1天的计数周期,分别组成两个60进制(秒、分)、一个24进制(时)的计数器。

显示器件选用LED八段数码管。

在译码显示电路输出的驱动下,显示出清晰、直观的数字符号。

针对数字钟会产生走时误差的现象,在电路中就设计有有校准时间功能的电路。

关键字:Proteus,Keil uVision,AT89C51,电子钟,整点报时摘要 (3)第1章概述 (5)1.1 设计背景 (5)1.2系统方案论证与设计 (5)第2章系统硬件设计 (7)2.1 系统总电路的设计 (7)2.1.1系统的总框图 ................................................................................................2.1.2芯片的选择 (7)2.2最小系统设计 (9)2.2.1时钟电路的选择与设计 (10)2.2.2复位电路的选择与设计 .............................................. 错误!未定义书签。

基于单片机AT89C51控制的电子时钟课题设计报告

基于单片机AT89C51控制的电子时钟课题设计报告

课程设计报告论文题目单片机-电子钟专业班级学生姓名学号指导教师宁波技师学院电气技术系二零一三年九月摘要数字钟是一种用数字电路技术实现时、分、秒计时的装置,在现实生活中,各种数字钟已得到非常广泛的使用.数字钟的设计方法有许多种,例如可用中小规模集成电路组成数字钟,也可以利用好单片机来实现数字钟等。

这些方法都各有特点,其中利用中小规模集成电路组建数字钟,原理简单,但由于集成电路集成度有限,对于需要实现较多功能的电路设计比较复杂,对于制作者焊接和布线有比较高的要求。

用单片机实现的电子钟具有结构简单,并便于功能的扩展,但需要涉及到汇编以及C语言编写程序,对设计者有较高的要求。

1 引言数字钟是采用数字电路实现对时、分、秒,数字显示的计时装置广泛用于个人家庭,车站,码头,办公室等公共场所,成为人民日常生活中不可少的必须品,由于数字集成电路的发展和石英振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生活带来极大的方便,而且大大地扩展了钟表原先的报时功能。

比如定时自动报警,校时自动打铃,自动启闭路灯等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用有着非常现实的意义。

2.总体设计方案系统设计方案本次设计的题目是可以正常的显示时、分、秒。

本系统利用单片机实现具有计时、校时等功能的数字时钟,是以单片机AT89C51为核心元件,同时采用四位一体数码管动态显示“时”、“分”、“秒”的现代计时装置。

它具有显示直观,校时功能等特点,利用单片机实现的数字时钟具有编程灵活,便于功能的扩充等优点。

本次设计可分为两部分:硬件部分、软件部分。

硬件部分包括:AT89C51单片机四位一体显示器。

主要由AT89C51单片机、显示输出电路、按钮输入电路等几大部分组成。

具体说来,系统智能控制部分由单片机及其相关的外围电路组成,外围电路包括复位电路、数字钟电路、键盘设计。

利用单片机将复位电路、显示电路等正确的连接在一起,并通过单片机的编程来实现本次设计任务中的要求。

AT89C51单片机电子时钟设计

AT89C51单片机电子时钟设计

AT89C51单片机电子时钟设计目录1 电子时钟 (4)1.1 电子时钟简介 (4)1.2 电子时钟的基本特点 (4)1.3 电子时钟的原理 (4)2 单片机识的相关知识 (4)2.1单片机简介 (4)2.2 单片机的特点 (5)2.3 AT89C51单片机介绍 (5)3 设计方案的选择 (7)3.1计时方案 (7)3.2 显示方案 (7)3.3 数码管显示工作原理 (8)3.4 键盘电路设计 (9)3.5 主控模块AT89C51 (9)4 系统软件设计 (9)附录 (12)摘要:单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注。

单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。

由于具有上述优点,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。

这次设计通过对它的学习、应用,以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由4.5V直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。

关键词:单片机;电子时钟;AT89C511 电子时钟1.1 电子时钟简介本设计采用AT89C51单片机,以汇编语言为程序设计的基础,设计一个用六位数码管显示时、分、秒的时钟。

现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零,从而达到计时的功能,是人民日常生活不可缺少的工具。

1.2 电子时钟的基本特点现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。

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

一、电子时钟、秒表和计数器的设计1、实现的功能:1)有key0,key1两个功能按键,复位后,数码管会默认显示时钟模式HH.MM 。

(HH表示小时,MM表示分钟),key0短按一次就进入到了秒表模式,数码管显示格式S.SS.S,(分别表示百秒,秒,毫秒)key0再短按一次就进入到了计数器模式,数码管显示格式CCCC(分别为千位百位十位个位)。

key0再短按一次,又进入到了时钟显示模式,就这样由key0控制模式的转换。

2)有RST复位键,本身电路设计有上电自动复位功能,按下RST后,电路复位。

3)有ckey0,ckey1 两个计数按键,按下ckey0,计数加一,按下ckey1,计数减一。

4) 电子时钟和秒表时间计时方法是采用89S52内部计时器0的一种工作方式(详见后面的代码分析),通过计时器0中断来控制时间的运行。

5)计数器是采用外部中断0和外部中断1这两个外部中断实现加1和减1的操作。

(1)电子时钟模式:(以下“长按”表示按下按键的时间大于1秒,“短按”表示按下的时间小于0.7 秒)1)长按key1一次,会进入到调整分钟的模式,短按key1一次,分钟会加一。

第二次长按key1,会进入到调整小时的模式,短按key1一次,小时加一。

第三次长按key1,重新回到时钟显示模式,这时再短按key1,时间不会变化2)长按key0一次,会进入到显示秒的模式(2)秒表模式:1)由key0控制进入秒表模式后,短按key1一次,秒表计时开始,再短按key1一次计时结束2)长按key1一次,秒表清零(3)计数器模式1)按ckey0一下,计数加一,数码管相应的显示的数值加一,按ckey1一下,计数减一,数码管相应的显示的数值减一,由于数码管的位数限制,最大只能显示到9999,此时按下ckey0无反应;考虑到实际计数功能,没有设置负数,所以最小显示0000,这时按下ckey1 ,无反应。

2)长按key1一次计数器清零。

2、电路原理图(1)使用片内振荡器(2)具有上电复位和手动复位两个功能(3)key0,key1分别接P1.0和P1.1引脚(4)由P0.0~P0.7输出到七段数码显示管(5)由P2.0~P2.3接三极管,驱动共阳七段数码显示管(6) ckey0,ckey1接P3.2和P3.3两个引脚,为两个外部中断4.电路焊接实物图(1)正面(2)反面:由于显影、腐蚀过程做得不好,导致电路板过度腐蚀,但是经过修改之后,电路可以正常运行,并无大碍,只是不美观。

(4)电路板工作时。

此时为显示时钟的秒显示时钟显示秒表显示计数器5、程序设计分析(1)程序代码#include<Reg51.h>sbit key0=P1^0;sbit key1=P1^1; //定义key0,key1接口unsigned char flag,con,mcount; //flag为计数到一秒时给时钟发的信号unsigned char count = 0;unsigned char seccount =0; //作为时钟的秒的计量单位unsigned char hour = 0; //时钟的时unsigned char min = 0; //时钟的分unsigned char sec = 0; //时钟的秒unsigned char keypress0,keypress1,mode,ms,s,ss,start;unsigned charDisplaynum[]={0x14,0xd7,0x4c,0x45,0x87,0x25,0x24,0x57,0x04,0x05, 0x10,0xd3,0x48,0x41,0x83,0x21,0x20,0x53,0x00,0x01,0xff,0xfb};//数码管十六进制译码表unsigned char controlnum[]={0x08,0x04,0x02,0x01}; //控制四个数码管显示unsigned char DisplayBuff[]={0x00, 0x00, 0x00, 0x00}; //每个数码管的值void display_state(); //数码管显示子程序void keyscan(); //键盘扫描子程序void timer(); //秒表子程序unsigned char count1,flag1,t_adjust=0,tm_adjust=0;unsigned charbKey0Pressed = 0, bKey1Pressed = 0;unsigned char ucStatus = 0;void main(){TMOD = 0x01; //定时器0工作在模式1,GATE=0,C/t=0,16位模TH0= (2^16-5000)/256;//定时器0 预存值,TL0= (2^16-5000)%256;TR0= 1; //定时器0 启动ET0= 1; //定时器中断0 允许EA= 1; //开中断IT0=1; //外部中断0下降沿触发IT1=1; //外部中断1 下降沿触发EX0=1; //外部中断0允许EX1=1; //外部中断1允许PX1=1; //外部中断1 为高优先级中断while(1) //死循环,{if(flag == 1) //时钟显示{flag = 0;sec++;if(sec ==60){sec = 0;min++;if(min ==60){min = 0;hour ++;if(hour == 24){hour = 0;}}}}display_state();keyscan();timer();}}//////////////////////////////////ISR中断服务程序,每5ms产生一个定时器0 中断void Display() interrupt 1{TH0 = (2^16-5000)/256;TL0 = (2^16-5000)%256;seccount ++;mcount ++;keypress0++;keypress1++;P2=0x00; //P2口先清零P0 = Displaynum[DisplayBuff[count]]; //P0口输出P2 = controlnum[count]; //P2口输出count++;if(count==4)count=0;if(seccount == 200) //200*5ms=1s{ seccount =0;flag =1; //每过1秒给时钟信号加一秒}}///////////////////////////////////////////void display_state(){if(mode == 0) //时钟模式,显示时间DisplayBuff[0] = hour/10;DisplayBuff[1] = (hour%10)+10; //“+10”是为了显示加点的数字DisplayBuff[2] = min/10;DisplayBuff[3] = min%10;}if(mode == 1) //秒表模式,显示秒表{DisplayBuff[0] = ss +10; //“+10”是为了显示加点的数字DisplayBuff[1] = s/10;DisplayBuff[2] = (s%10)+10;DisplayBuff[3] = ms;}if(mode == 2) // 计数器模式,显示计数{DisplayBuff[0] = count1/1000; //千位DisplayBuff[1] = (count1-(count1/1000)*1000)/100; //百位DisplayBuff[2] = (count1-(count1/100)*100)/10; //十位DisplayBuff[3] = count1%10; //个位}if(mode==3) //显示时钟的秒,{DisplayBuff[0] = 20; //第一位不显示DisplayBuff[1] = 21; //第二位显示一个点DisplayBuff[2] = sec/10;//显示秒的十位DisplayBuff[3] = sec%10;//显示秒的个位}}//**************////键盘扫描子程序////**************//void keyscan(){if(!key0 && bKey0Pressed == 0) //检测到key0按下keypress0 = 0;bKey0Pressed = 1; //防止重入此判断while(!key0); //如果没放开,就等下去}if(key0 && bKey0Pressed == 1) //检测到key0放开{bKey0Pressed = 0; //防止重入此判断if (keypress0<120) //如果是短按{if(ucStatus == 0x02){ucStatus = 0x00;mode = 0; //时钟模式t_adjust=0;}else if(ucStatus == 0x00){ucStatus = 0x01;mode = 1; //秒表模式}else if(ucStatus == 0x01){ucStatus = 0x02;mode = 2; //计数模式}}else if(keypress0>200) //如果是长按mode=3; //显示时钟的秒的模式}////////////////////////////////if(mode == 0) //进入时钟模式后{if(!key1 && (bKey1Pressed == 0)){ keypress1 = 0;bKey1Pressed = 1;while(!key1);}if(key1 && (bKey1Pressed == 1)){bKey1Pressed = 0;if(keypress1 >= 200) //如果是长按{t_adjust++;if(t_adjust==3)t_adjust=0;}else if(keypress1 < 120) 如果是短按switch (t_adjust){case 1:{ //调整分min++;sec = 0;if(min == 60)min = 0;}break;case 2: { //调整时hour ++ ;sec = 0;if(hour == 24)hour = 0;}break;default:break;}}}else if(mode == 1) //进入秒表模式{if(!key1 && bKey1Pressed == 0){keypress1 = 0;bKey1Pressed = 1;while(!key1);}if(key1 && bKey1Pressed == 1){bKey1Pressed = 0;if(keypress1 < 120) //短按{if(flag1==0) { start=2;flag1=1;} //start=2代表秒表开始计时else {start=0;flag1=0;} //start=0,秒表停止计时}else if(keypress1>200) //长按start=1; //秒表清零}}}void timer() //秒表子程序{if(mode==1) //进入秒表模式才执行{if(start==1) //清零{ms = 0;s = 0;ss = 0;mcount=0;}if(start==2) //秒表开始计时{if(mcount==20) //20*5ms=0.1s{mcount=0;ms++;if(ms == 10) // 10*0.1s=1s,s++{ms = 0;s ++;if(s == 100) //100s{s = 0;ss ++;if(ss == 10){ss = 0;s = 0;ms = 0;}}}}}if(start==0);//秒表停止}}//////////////////////void it0(void) interrupt 0 using 1 //外部中断0 服务程序{if(mode==2) //只有在计数模式才执行{count1++; //每响应一次,计数加一if(count1==10000) //超出四位时,不能再加count1 =9999;}}void it2(void) interrupt 2 using 2 //外部中断0 服务程序{if(mode==2) //只有在计数模式才执行{if(count1!=0){count1--;} //计数减一,不显示负数,当减到零时便不能再减 }}。

相关文档
最新文档