当前位置:文档之家› 电子项目作业 电子秒表资料

电子项目作业 电子秒表资料

单片机项目作业项目题目:电子秒表指导教师:姬红旭班级:计科123班学生姓名:马超学号: 2012090137一、电子秒表的功能介绍电子秒表是一种较先进的电子计时器,目前国产的电子秒表一般都是利用石英振荡器的振荡频率作为时间基准,采用6位液晶数字显示时间。

电子秒表的使用功能比机械秒表要多,它不仅能显示分、秒,还能显示时、日、月及星期,并且有1/l00s的功能。

一般的电子秒表连续累计时间为59min 59.99s,可读到1/l00s,平均日差±0.5s。

电子秒表配有三个按钮,如图所示。

图中为秒表按钮,为功能变换按钮,为调整按钮,基本显示的计时状态为“时”、“分”、“秒”。

电子秒表是重要的记时工具,广泛运用于各行各业中。

它可广泛应用于对运动物体的速度、加速度的测量实验,还可用来验证牛顿第二定律、机械能守恒等物理实验,同时也适用于对时间测量精度要求较高的场合.测定短时间间隔的仪表。

作为一种测量工具,电子秒表相对其它一般的记时工具具有便捷、准确、可比性高等优点,不仅可以提高精确度,而且可以大大减轻操作人员的负担,降低错误率。

二、电子秒表的硬件电路设计(一)方案设计数字电子秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。

本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。

本系统采用C51系列单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合硬件电路如电源电路,晶振电路,复位电路,显示电路,以及一些按键电路等来设计计时器,将软、硬件有机地结合起来。

其中软件系统采用汇编语言编写程序,硬件系统利用PROTEUS强大的功能来实现,简单切易于观察,在仿真中就可以观察到实际的工作状态。

本设计利用STC89C51单片机的定时器/计数器定时和计数的原理,使其能精确计时。

利用中断系统使其能实现开始暂停的功能。

根据要求知道秒表设计主要实现的功能是计时和显示。

因此设置了两个按键和LCD 显示时间,两个按键分别是开始、停止和复位按键。

利用这两个建来实现秒表的全部功能,而LCD 则能显示最多4.59.99秒的计时。

电路原理图设计最基本的要求是正确性,其次是布局合理,最后在正确性和布局合理的前提下力求美观。

硬件电路图按照图1.1进行设计。

图1.1 数字秒表硬件电路基本原理图(二)硬件设计本系统中,硬件电路主要有电源电路,晶振电路,复位电路,显示电路,以及一些按键电路等。

1.单片机简介本系统设计采用C51系列单片机。

ST89C51是一种带4K 字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器。

该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容(由于在微机原理中学过C-51的具体知识,这里不再详细说明)。

由于将多功能8位CPU 和闪烁存储器组合在单个芯片中,ST89C51是一种高效的微控制器。

2.电源电路电源电路是系统最基本的部分,任何电路都离不开电源部分,由于三端集成稳压器件所组成的稳压电源线路简单,性能稳定,工作可靠,调整方便,已逐渐取代分立元件,在生产中被广泛采用,由于是小系统,我们采用7809电源提供+5V 稳压电压。

3.晶体振荡电路MCS--51单片机内部的振荡电路是一个高增益反相放大器,引线 XTAL1和AT89C51单片机控制器复位电路开关电路LCD 显示XTAL2分别为反向振荡放大器的输入及内部时钟工作电路的输入和来自反向振荡器的输出,该反向放大器可以配置为片内振荡器。

这里,我们选用51单片机12MHZ 的内部振荡方式,电路如下:电容器C1,C2起稳定振荡频率,快速起振的作用,C1和C2可在20-100PF 之间取,这里取30P ,接线时要使晶体振荡器X1尽可能接近单片机。

XTAL218XTAL1199U1X1CRYSTALC122PFC222PF C3图2 晶体振荡电路4.复位电路采用上电+按键复位电路,上电后,由于电容充电,使RST 持续一段高电平时间。

当单片机已在运行之中时,按下复位键也能使用使RST 持续一段时间的高电平,从而实现上电加开关复位的操作。

这不仅能使单片机复位,而且还能使单片机的外围芯片也同时复位。

当程序出现错误时,可以随时使电路复位。

电路图如下:图3 复位电路5.显示电路显示电路既可以选用液晶显示器,也可以选用数码管显示。

我们采用的是数码管显示电路。

用2个共阳极LED 显示,LED 是七段式显示器,内部有7个条形发光二极管和1个小圆点发光二极管组成,根据各管的亮暗组合成字符。

在用数码管显示时,我们有静态和动态两种选择,静态显示程序简单,显示稳定,但是占用端口比较多;动态显示所使用的端口比较少,可以节省单片机的I/O 口。

在设计中,我们采用LED 动态显示,用P0口驱动显示。

由于P0口的输出级是开漏电路,用它驱动时需要外接上拉电阻才能输出高电平。

电路图如下所示:图4 显示电路6.键盘电路在按键电路中,我们可以在I/O 口上直接接按键,或者通过I/O 口设计一个键盘,然后通过键盘扫描程序判断是否有键按下等。

键盘扫描电路节省I/O 口,但编程有些复杂,在这里,由于我们所用的按键较少,且系统是一个小系统,有足够的I/O 口可以使用,为了使程序简化,我们采用按键电路,用部分P3口做开关,P3.3为开始停止,P3.4为清零,用外部中断INT1开始,另外用软件法消除抖动。

电路图如下所示:54P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T 01416P3.5/T 115P2.7/A1528P2.6/A14图5 键盘电路硬件主电路图设计用pretues 画出其硬件主电路图如下:665544XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC122PFC222PF C31nFR1100D 714D 613D 512D 411D 310D 29D 18D 07E 6R W 5R S 4V S S 1V D D 2V E E3LCD1LM016L234567891RP110K三、电子秒表的软件程序设计1、软件设计概述在软件设计中,一般采用模块化的程序设计方法,它具有明显的优点。

把一个多功能的复杂的程序划分为若干个简单的、功能单一的程序模块,有利于程序的设计和调试,有利于程序的优化和分工,提高了程序的阅读性和可靠性,使程序的结构层次一目了然。

应用系统的程序由包含多个模块的主程序和各种子程序组成。

各程序模块都要完成一个明确的任务,实现某个具体的功能,在具体需要时调用相应的模块即可。

功能描述:用LCD1602液晶显示"秒表",显示时间为0.00.00—4.59.99秒,每秒自动加1;一个"开始""暂停"键,一个"清零"键。

2、主程序流程图这里采用顺序结构,通过对按键的扫描,判断要实现什么功能。

如下所示:(程序); 定义计时单元地址MIN EQU 31H ;存放分钟变量 SEC EQU 32H ;存放秒钟变量DEDA EQU 33H ;存放10ms 计数值 ; 按键端口状况值K1_N EQU 34H ;存放按键当前端口状况值 K1_P EQU 35H ;存放按键上次端口状况值 K1_C EQU 37H ;存放按键计数单元 X EQU 36H ;LCD 地址变量 ; 按键引脚定义K1 EQU P3.3 ;按键1引脚定义 K2 EQU P3.4 ;按键2引脚定义 ;LCD 引脚定义RS EQU P3.5 ;LCD RS 引脚定义 RW EQU P3.6 ;LCD RW 引脚定义赋初始值开始LCD1602显示复位键P3.3是否按下查看键P3.3是否二次按下调用最终缓存区数据进行显示否是是否否是查看键P3.4是否按下LCD 清零E EQU P3.7 ;LCD RS引脚定义ORG 0000H ;程序由地址0开始执行JMP MAINORG 0BH ;定时器0中断地址设置JMP T0_INT;―――――――――――――主程序――――――――――――――MAIN: ;开始MOV SP,#60H ;堆栈指针指向60HCLR E ;E=0,禁止读/写LCDACALL SET_LCD ;调LCD控制子程序ACALL INIT ;初始化变量MOV K1_P,#01H ;按键上次端口设置1ACALL INIT_TIMER ;调用初始化定时器ACALL MEU ;调用工作菜单子程序LOOP:ACALL CONV ;时间计数处理ACALL LOOP1 ;调用清零键子程序ACALL KEY ;判断是否有键按下JZ LOOP ;无键按下转LOOPMOV K1_P,K1_N ;交换数据ACALL KEY0 ;调用按键功能子程序JMP LOOP ;跳LOOP处循环; 初始变量清零子程序INIT: ;初始变量清零CLR A ;A清为零MOV K1_C,A ;K1_C 初始为0MOV DEDA,A ;百分秒DEDA初始为0MOV SEC,A ;秒SEC初始为0MOV MIN,A ;分MIN初始为0MOV K1_N,A ;K1_N初始为0MOV K1_P,A ;K1_P初始为0CLR TR0 ;启动中断RET;―――――――――――――――――――――;定时器初始化设置子程序INIT_TIMER: ;定时器初始化MOV TMOD,#00000001B ;定时器0模式1MOV IE, #10000010B ;开通中断MOV TL0,#LOW(65536-10000);定时初值装入低位MOV TH0,#HIGH(65536-10000);定时初值装入高位RET;中断服务程序T0_INT: ;定时器T0中断程序PUSH ACC ;入栈保护MOV TL0,#LOW(65536-10000) ;重加载MOV TH0,#HIGH(65536-10000)INC DEDAMOV A,DEDA ;10ms 计数值加1CJNE A,#100,TTMOV DEDA,#0INC SEC ;秒加1MOV A,SECCJNE A,#60,TTINC MIN ;分加1MOV SEC,#0MOV A,MINCJNE A,#05,TTMOV DEDA,#0 ;百、分、秒单元清0MOV SEC,#0MOV MIN,#0TT: POP ACC ;出栈RETI ;中断程序返回;―――――――――――――――――――――;判断键是否按下子程序LOOP1:JB K2,LOOP2 ;判清零键是否按下JMP MAIN ;跳转主程序处LOOP2: RET; 判断K1键是否按下KEY:CLR A ;A清零MOV K1_N,A ;A值送入K1_NMOV C,K1 ;K1值送入CRLC A ;同进位标志左移一位ORL K1_N,A ;两个位作逻辑OR运算MOV A,K1_N ;K1_N值送入AXRL A,K1_P ;有键按下,A 中内容不为零RET;功能键子程序;K1键第一次按功能子程序KEY0:MOV A, K1_P ;K1_P值送入AJB ACC.0,KEY3 ;A的0位是1,转KEY3INC K1_C ;K1_C加1MOV A, K1_C ;K1_C值送入ACJNE A,#01H,KEY1 ;K1键是否第一次按?MOV DPTR,#MENU1 ;是,存入MENU1信息MOV A,#1 ;设置第一行显示CALL LCD_PRINT ;调用显示字符子程序SETB TR0 ;启动中断RET;K1键第二次按功能子程序KEY1:MOV A,K1_C ;K1_C值送入ACJNE A,#02H,KEY2 ;K1键是否第二次按?MOV DPTR,#MENU2 ;是,存入MENU2信息MOV A,#1 ;设置第一行显示CALL LCD_PRINT ;调用显示字符子程序CLR TR0 ;停止中断RET ;;K1键第三次按功能子程序KEY2:MOV A, K1_C ;K1_C值送入ACJNE A, #03H,KEY3 ;K1键是否第三次按?MOV DPTR,#MENU3 ;是,存入MENU3信息MOV A, #1 ;设置第一行显示CALL LCD_PRINT ;调用显示字符子程序SETB TR0 ;启动中断RET;K1键第四按功能子程序KEY3:MOV A,K1_C ;K1_C值送入ACJNE A,#04H,KEY4 ;K1键是否第四次按?MOV DPTR,#MENU4 ;是,存入MENU4信息MOV A,#1 ;设置第一行显示CALL LCD_PRINT ;调用显示字符子程序CLR TR0 ;启动中断KEY4:RET ;子程序返回;―――――――――――――LCD显示――――――――――――――; LCD控制子程序SET_LCD: ;CLR EACALL INIT_LCD ;初始化LCDMOV R5,#10ACALL DELAYMOV DPTR,#LMESS1 ;指针指到显示消息1MOV A,#1 ;显示在第一行ACALL LCD_PRINT ;调用显示字符子程序MOV DPTR,#LMESS2 ;指针指到显示消息2MOV A,#2 ;显示在第二行ACALL LCD_PRINT ;调用显示字符子程序RETLMESS1: DB " ",0 ;LCD 第一行显示消息LMESS2: DB "TIME ",0 ;LCD 第二行显示消息;LCD初始化子程序INIT_LCD:MOV A,#38H ;设置8位、2行、5x7点阵ACALL WR_COMM ; 调用写指令子程序ACALL DELAY1 ;调用延时子程序MOV A,#0CH ;开显示,光标不闪烁ACALL WR_COMM ;调用写指令子程序;ACALL DELAY1 ;调用延时子程序MOV A,#01H ;清除LCD 显示屏ACALL WR_COMM ;调用写指令子程序;ACALL DELAY1 ;调用延时子程序RET;写指令子程序WR_COMM:MOV P1,ACLR RS ;RS=0,选择指令寄存器CLR RW ;RW=0,选择写模式SETB E ;E=1,允许读/写LCMACALL DELAY1 ;调用延时子程序CLR E ;E=0,禁止读/写LCMRET;写数据子程序WR_DA TA:MOV P1,ASETB RS ;RS=1,选择数据寄存器CLR RW ;RW=0,选择写模式SETB E ;E=1,允许读/写LCDACALL DE ;调用延时子程序CLR E ;E=0,禁止读/写LCDACALL DE ;调用延时子程序RET;清除该行LCD 的字符CLR_LINE: MOV R0,#24CL1: MOV A,#' 'ACALL WR_DATADJNZ R0,CL1RET;LCD 存入工作菜单MEU:MOV DPTR,#MENU0 ;存入工作菜单MOV A,#1 ;第一行CALL LCD_PRINTRET; 工作菜单MENU0: DB " SECOND-CLOCK 0 ",0MENU1: DB " BEGIN COUNT 1 ",0MENU2: DB " PAUST COUNT 2 ",0MENU3: DB " BEGIN COUNT 3 ",0MENU4: DB " PAUST COUNT 4 ",0;菜单显示子程序;一行、二行显示字符LCD_PRINT:CJNE A,#1,LINE2 ;判断是否为第一行LINE1:ACALL CLR_LINE ;清除该行字符数据MOV A, #80H ;设置LCD 的第一行地址ACALL WR_COMM ;写入命令JMP FILLLINE2:ACALL CLR_LINE ;清除该行字符数据MOV A,#0C0H ;设置LCD 的第二行地址ACALL WR_COMMFILL: CLR A ;填入字符MOVC A,@A+DPTR ;由消息区取出字符CJNE A,#0,LC1 ;判断是否为结束码RET;写入数据LC1: ACALL WR_DATAINC DPTR ;指针加1JMP FILL ;继续填入字符RET;转换数据子程CONV: ;转换为ASCII 码并显示MOV X,#5 ;设置位置ACALL SKOW_LINE2 ;显示数据INC X ;MOV A,#':' ;MOV B,X ;ACALL LCDP2 ;MOV A,MIN ;加载分钟数据INC X ;设置位置ACALL SKOW_LINE2 ;显示数据INC X ;MOV A,#':' ;MOV B,X ;ACALL LCDP2 ;MOV A,SEC ;加载秒数数据INC X ;设置位置ACALL SKOW_LINE2 ;显示数据INC X ;MOV A,#':' ;MOV B,X ;CALL LCDP2 ;MOV A,DEDA ;加载秒数数据INC X ;设置位置ACALL SKOW_LINE2 ;显示数据RET ;;在LCD 的第二行显示数字SKOW_LINE2:MOV B,#10 ;设置被除数DIV AB ;结果A存商数,B存余数ADD A,#30H ;A为十位数,转换为字符PUSH B ;B放入堆栈暂存MOV B,X ;设置LCD 显示的位置ACALL LCDP2 ;由LCD 显示出来POP B ;出栈MOV A,B ;B为个位数ADD A,#30H ;转换为字符INC X ;LCD 显示位置加1MOV B,X ;设置LCD 显示的位置ACALL LCDP2 ;由LCD 显示出来RET;在LCD的第二行显示字符LCDP2:PUSH ACC ;MOV A,B ;设置显示地址ADD A,#0C0H ;设置LCD的第二行地址CALL WR_COMM ;写入命令POP ACC ;由堆栈取出ACALL WR_DATA ;写入数据RET;延时10MSDELAY:MOV R6,#50D1:MOV R7,#100DJNZ R7,$DJNZ R6,D1DJNZ R5,DELAYRET ;延时5MS 子程序DELAY1: MOV R6,#25 DEY: MOV R7,#100 DJNZ R7,$ DJNZ R6,DEYRET ;延时500微秒DE: DJNZ R7,$RET END ;程序结束665544XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51X1CRYSTALC122PFC222PF C31nFR1100D 714D 613D 512D 411D 310D 29D 18D 07E 6R W 5R S 4V S S 1V D D 2V E E3LCD1LM016L234567891RP110K四、心得体会先在网上查阅了一些有关电子秒表设计的材料,熟悉了设计思想与工作原理,并且具体的分析了单片机、数码管显示器的工作过程,从理论上分析了该工作过程。

相关主题