单片机实验——秒表--(详细步骤)

合集下载

单片机秒表设计程序及原理图

单片机秒表设计程序及原理图

单片机秒表系统设计引言:中国使用单片机的历史只有短短的30年,在初始的短短五年时间里发展极为迅速。

纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。

以前没有单片机时,这些东西也能做,但是只能使用复杂的模拟电路,然而这样做出来的产品不仅体积大,而且成本高,并且由于长期使用,元器件不断老化,控制的精度自然也会达不到标准。

在单片机产生后,我们就将控制这些东西变为智能化了,我们只需要在单片机外围接一点简单的接口电路,核心部分只是由人为的写入程序来完成。

这样产品的体积变小了,成本也降低了,长期使用也不会担心精度达不到了。

所以,它的魔力不仅是在现在,在将来将会有更多的人来接受它、使用它。

据统计,我国的单片机年容量已达3亿片,且每年以大约20%的速度增长,但相对于世界市场我国的占有率还不到1%。

特别是沿海地区的玩具厂等生产产品多数用到单片机,并不断地辐射向内地。

所以,学习单片机在我国是有着广阔前景的。

一、单片机秒表系统设计目的及内容1、利用单片机定时器/计数器中断设计秒表,从而实现秒、十分之一秒的计时。

2、综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。

3、通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握,对单片机实际的应用作进一步的了解。

4、通过本次系统设计,增强自己的动手能力。

认识单片机在日常生活中的应用的广泛性,实用性。

本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。

模拟利用AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计数的开启/暂停/继续与复位!其中有两个数码管用来显示数据,一个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。

51单片机电子秒表设计

51单片机电子秒表设计

实验二电子秒表设计(键盘状态转移法)一、实验内容用单片机实现电子秒表的功能,并采用0号键实现计时启动、停止和回零操作。

第一次按0号键,计时开始;第2次按0号键,计时停止;第3次按0号键,计时回零。

初始状态显示0.00;计时状态显示当前计时时间;停止计时显示最后计时时间。

二、实验程序设计对各个状态和各任务号分配如下:0状态:初始状态;1状态:计时状态;2状态:停止计时状态;123号任务:计时归零,显示初始值。

根据上述分析,建立状态表如下:程序流程图如图2.1所示。

表2.1 电子秒表键控状态表图2.1 电子秒表键控主程序流程图参考程序代码如下:LOAD BIT P1.2 ;串行命令加载,上升沿激活DIN BIT P1.0 ;串行数据输出,接CH451的数据输入DCLK BIT P1.1 ;串行数据时钟,上升沿激活DOUT BIT P3.3 ;INT1,键盘中断和键值数据输入,接CH451的数据输出KEY_F BIT 00H ;20H.0位作有键标志位ST EQU 21H ;存状态号KEY EQU 22H ;存放键盘中断中读取的键码KD EQU 23H ;存放键号MSEC EQU 24H ;百分之一秒计数单元SEC EQU 25H ;秒计数单元MIN EQU 26H ;分计数单元ORG 0000HAJMP MAINORG 000BH ;定时器中断入口LJMP CLOCKORG 0013HLJMP CH451_ INT1ORG 100HMAIN: MOV SP, #60H ;系统初始化MOV ST,#0CLR KEY_FMOV KD,#0MOV P1,#60H ;禁止P1接口上的其它芯片ACALL CH451_INIT ;CH451初始化DISP: LCALL DISPLAY ;当前计时值显示ML0: NOPJNB KEY_F,ML0 ;无按键等待CLR KEY_F ;有按键,清按键标志MOV DPTR, #STAB ;计算状态行地址MOV A, STMOV B, #2MUL ABADD A, DPLMOV DPL, AMOV A, BADDC A, DPHMOV DPH, A ;DPTR=#STAB + ST*2MOV A,KD ;读取次状态号RL A ;KD*2MOV R0,AMOVC A,@A+DPTR ;获得次状态号MOV ST,A ;更新STMOV A,R0INC AMOVC A,@A+DPTR ;得到任务号MOV B,#3MUL AB ;每个LJMP占3个字节MOV DPTR,#TASKJMP @A+DPTR ;散转TASK: LJMP P_0 ;跳转子程序0LJMP P_1 ;跳转子程序1LJMP P_2 ;跳转子程序2P_0: …;启动计时程序略,自己编写P_1: …;计时停止程序略,自己编写P_2: …;归零程序略,自己编写;状态表; K0;ST, PRSTAB:DB 1, 1 ; stat0DB 2, 2 ; stat1DB 0, 0 ; stat2;------------------------------------ ------------------------------------ CH451_INIT:略;CH451初始化子程序参考实验一;------------------------------------------------------------------------CH451_INT1: ;键盘中断子程序PUSH PSW ;现场保护PUSH ACCCLR EX1LCALL READ _CH451 ;读取键码ACALL GET_KD ;获得键号POP ACCPOP PSWSETB EX1CLR IE1 ;清中断标志RETI;------------------------------------------------------------------------ READ_CH451:; 略,参考实验一;------------------------------------------------------------------------GET_KD: ;获得键号子程序MOV A,KEYCJNE A,#40H,OUTMOV A,#0 ;0# 键;………在使用多个键的情况下,继续判断其它键号MOV KD,A ;存键号SETB KEY_F ;置有键标志位OUT: RET;------------------------------------------------------------------------CLOCK: ;略,定时器中断服务子程序,自己编写DISPLAY:略,显示子程序,自己编写;----------------------------------------------------------------------------END图2.2 定时器中断服务子程序流程图图2.3 显示子程序流程图二、实验操作步骤1. 打开KEILuvison3软件,建立工程,设置调试环境,实验板上电;2. 输入源程序,编译,连接,加载;3. 运行程序,观察数码管显示应为000.00;4. 按0键,启动计时,数码管显示计时时间;5. 再按0键,停止计时,数码管显示累计时时间;6. 再按0键,计时归零,数码管显示返回初始状态。

单片机原理与应用实验报告5——秒表定时器实验

单片机原理与应用实验报告5——秒表定时器实验

大连理工大学软件学院《单片机原理与应用》实验报告姓名:学号:班级:姓名:学号:班级:组号:实验箱编号:实验时间:月日实验室:嵌入式实验室实验台:Embest Edukit-III平台指导教师:侯刚成绩:实验五:秒表定时器实验一、实验目的和要求题目:秒表定时器实验实验目的1. 学习单片机的基本接口技术。

2. 学习74HC595、74HC138使用及与51单片机的控制方法。

实验要求1.通过按键控制,完成数码管的显示计数控制。

2. 用汇编语言设计程序,完成8个数码管的显示控制。

当按下INT 按钮时,数码管开始快速计时,高五位为秒数,低三位为ms 数,每1ms 刷新一次显示内容。

当再次按下INT 按钮时,停止计数。

二、实验原理和内容实验内容:用汇编语言设计程序,完成8个数码管的显示控制。

当按下INT 按钮时,数码管开始快速计时,高五位为秒数,低三位为ms 数,每1ms 刷新一次显示内容。

当再次按下INT 按钮时,停止计数。

实验原理:1.根据原理图,分析工作原理,有P0进行取段码,P2.0 P2.1 P2.2进行取位码。

2.使用定时器进行计时。

根据所给开发板上的晶振频率,计算出计时器所付初值,设置计时器TO在模式下工作,每次计时100ms后,转入数码管显示中断处理程序。

3.实验板为共阴极数码管显示,将对应的显示0~9的电信号依次存储在“数组表”中。

4.使用key1,key2两个按键,按下key1,开始计时。

按下key2,计时停止。

5.根据实验要求,采用T0,T1两个定时器,其中T0用来增加时间显示,T1为按暂停键时为LED显示管循环上电所用。

6.每部分中断程序用寄存器间接寻址的方式获取显示数字的电信号量。

并进行循环上电,保证数字的亮度。

三、主要仪器设备及软件编程环境主要仪器:计算机编程软件,51电路开发板编程环境:uVision2 ,progisp烧写软件四、实验步骤与编程实验步骤:编写代码,编译,调试,烧写,完成实验。

单片机秒表实验报告

单片机秒表实验报告

单片机秒表实验报告
实验目的:
使用单片机设计并实现一个秒表,能够精确计时。

实验原理:
单片机秒表的设计采用外部中断的方式进行计时。

当按下计时开始按钮时,单片机开始计时,并将计时结果显示在数码管上。

当按下计时停止按钮时,单片机停止计时,并将计时结果保存下来。

实验材料:
1. 单片机开发板
2. 4位数码管
3. 开始按钮
4. 停止按钮
5. 连接线
实验步骤:
1. 将4位数码管连接到单片机的相应引脚上。

2. 将开始按钮连接到单片机的外部中断引脚上。

3. 将停止按钮连接到单片机的外部中断引脚上。

4. 编写程序,设置外部中断的中断服务函数。

5. 在中断服务函数中实现计时功能,将计时结果显示在数码管上。

6. 在主函数中初始化单片机,开始计时。

7. 测试实验是否正常工作。

实验结果:
经过测试,单片机秒表实验正常工作。

当按下开始按钮时,数码管开始计时,实时显示计时结果。

当按下停止按钮时,数码管停止计时,并将计时结果保存下来。

实验总结:
通过本实验,我掌握了使用单片机设计秒表的方法和步骤,加深了对单片机的理解和应用。

同时,我还学会了使用外部中断进行计时,并将计时结果显示在数码管上。

这对于我今后的学习和实践有着重要的指导意义。

课程设计 单片机 60秒秒表

课程设计 单片机  60秒秒表

1任务及要求1.1设计任务学会用已经学过的单片机原理与应用的知识, 来设计一个实用性的结构简单化的小型电子产品。

编写一个程序, 实现秒计时器从00—59计时的基本功能。

利用Proteus工具来演示秒计时器的计时。

1.2设计要求利用MCS-51系列单片机作为秒表的主控制器芯片, 在单片机的P0端口和P2端口分别接两个共阴数码管, P0口驱动显示秒时间的十位, P2口驱动显示秒时间的个位。

要求做到性能稳定, 结构简单通俗易懂, 结构模块化, 从而做到节约成本。

(1)熟悉电路, 了解P0和P1口的作用。

(2)熟悉W A VE编译环境。

(3)熟练掌握汇编语言, 调用延时程序。

2设计思想2.1硬件设计将单片机设计成控制器, 在AT89C51的P0口和P2口都接7SEG-COM-CATHODE, P0口接上拉电阻, 分别显示十位和个位数字。

2.2软件设计通过单片机实现控制00-59的计数, 根据设计的要求, 将0到59的数据除以10, 分别取商和余数。

并且当一秒钟到来时, 计数单元加1, 到达60时, 则自动返回到0, 从新秒计数。

同时在计数过程中调用延时程序。

3电路原理与电路图3.1电路原理编写程序对80C51芯片进行初始化, 在编程过程中主要使用延迟程序来实现秒计时器的计时功能。

用Proteus软件来实现秒计时器的仿真, 其中将P0口和P1口分别作为高低位输出端口。

3.2电路原理图图3.1电路原理图4流程图与算法描述4.1函数流程图4.1.1实验系统流程图图4.1.1 实验系统流程示意图4.1.2延时程序流程图图4.1.2 延时程序流程图4.2 算法描述根据设计的要求, 利用单片机控制, 实现秒计数并显示, 具体设计如下:(1)将0到59的数据通过对10整除和对10求余, 将数据的个位和十位分开。

DIV AB(2)加1计数INC @R0(3)延时程序DELAY: MOV R5,#100DELAY2: MOV R6,#20DELAY1: MOV R7,#248DJNZ R7,$DJNZ R6,DELAY1DJNZ R5,DELAY25仿真分析程序采用汇编语言编写, 并用protues软件编译。

单片机课程设计之多功能秒表

单片机课程设计之多功能秒表

单片机报告—————多功能秒表实验者:蒋晓婷班级:2008级电自9班学号:20080711304组员:丁秀香一、实验要求1.硬件电气原理图一张(含元器件清单一份;所有引脚标注清楚)2、软件程序清单一套(含主要程序流程图,全部源程序及详细的注释)3、使用功能说明书一份(含功能描述及操作指南和收获体会)4、软件在开发板上调试成功,并能成功表演,达到设计课题的要求二、实现要求秒表功能1、设计可以显示0.1—100s的秒表,最小单位为毫秒;2、通过按键控制秒表清零、暂停、继续、退出等功能;3、具有倒计时功能;4、秒表可以分组存储,批量显示;5、显示北京时间;6、可利用蜂鸣器添加提示音。

附加功能1、利用实时钟芯片,显示年月日以及星期;2、选择蜂鸣器电路,实现闹钟设置和报警功能;3、可以通过按键调整日期、时间;4、可以设置两组闹钟,闹钟时间到,蜂鸣器响;5、利用蜂鸣器实现整点报时。

三、硬件原理:ADUC848管脚图如下图所示。

Pin1~4:(P1.0~P1.3)作为矩阵式键盘或独立按键的输入,P1口只能用于输入,默认用于模拟输入,作为数字输入使用时应先往P1口相应引脚写0,这里可以用P0&=0xf0。

若P2、P3、P0口要作为输入,则应往相应引脚写1。

Pin5、6:AVDD、AGND,模拟电源输入。

Pin7、8:外部参考电压接入,Pin7接AGND。

片内DAC有2.5V内部参考,ADC有1.25V内部参考。

Pin9、10:(P1.4、P1.5)两路AD输入,可做差分输入,需要设置ADC的寄存器。

Pin11、12:(P1.6、P1.7)各200uA激励电流源,可配合RTD等做应用。

Pin13:两路AD输入做普通输入时的电压参考端,AD输入电压不能低于此引脚电压。

Pin14:片内DAC输出。

Pin15:复位引脚。

Pin16、17:单片机RS232接口的RXD(P3.0)TXD(P3.1)。

Pin18:(P3.2)外部中断0,用于红外接收和PS/2接口。

51单片机秒表程序设计

51单片机秒表程序设计

51单片机秒表程序设计1. 简介秒表是一种用于测量时间间隔的计时器,常见于体育比赛、实验室实验等场合。

本文将介绍如何使用51单片机设计一个简单的秒表程序。

2. 硬件准备•51单片机开发板•LCD液晶显示屏•按键开关•连接线3. 程序流程3.1 初始化设置1.设置LCD液晶显示屏为8位数据总线模式。

2.初始化LCD液晶显示屏。

3.设置按键开关为输入模式。

3.2 主程序循环1.显示初始界面,包括“00:00:00”表示计时器初始值。

2.等待用户按下开始/暂停按钮。

3.如果用户按下开始按钮,则开始计时,进入计时状态。

4.如果用户按下暂停按钮,则暂停计时,进入暂停状态。

5.在计时状态下,每隔1毫秒更新计时器的数值,并在LCD液晶显示屏上显示出来。

6.在暂停状态下,不更新计时器的数值,并保持显示当前数值。

3.3 计时器控制1.定义一个变量time用于存储当前的计时器数值,单位为毫秒。

2.定义一个变量running用于标记计时器的状态,0表示暂停,1表示运行。

3.定义一个变量start_time用于存储计时器开始的时间点。

4.定义一个变量pause_time用于存储计时器暂停的时间点。

5.在计时状态下,每隔1毫秒更新time的值为当前时间与start_time的差值,并将其转换为小时、分钟、秒的表示形式。

6.在暂停状态下,保持time的值不变。

3.4 按键检测1.检测按键开关是否被按下。

2.如果按键被按下,判断是开始/暂停按钮还是复位按钮。

3.如果是开始/暂停按钮,并且当前处于计时状态,则将计时状态设置为暂停状态,并记录暂停时间点为pause_time;如果当前处于暂停状态,则将计时状态设置为运行状态,并记录开始时间点为当前时间减去暂停时间的差值。

4.如果是复位按钮,则将计时器数值重置为0,并将计时状态设置为暂停。

4. 程序代码示例#include <reg51.h>// 定义LCD控制端口和数据端口sbit LCD_RS = P1^0;sbit LCD_RW = P1^1;sbit LCD_EN = P1^2;sbit LCD_D4 = P1^3;sbit LCD_D5 = P1^4;sbit LCD_D6 = P1^5;sbit LCD_D7 = P1^6;// 定义按键开关端口sbit START_PAUSE_BTN = P2^0;sbit RESET_BTN = P2^1;// 定义全局变量unsigned int time = 0; // 计时器数值,单位为毫秒bit running = 0; // 计时器状态,0表示暂停,1表示运行unsigned long start_time = 0; // 开始时间点unsigned long pause_time = 0; // 暂停时间点// 函数声明void delay(unsigned int ms);void lcd_init();void lcd_command(unsigned char cmd);void lcd_data(unsigned char dat);void lcd_string(unsigned char *str);void lcd_clear();void lcd_gotoxy(unsigned char x, unsigned char y);// 主函数void main() {// 初始化设置lcd_init();while (1) {// 显示初始界面lcd_clear();lcd_gotoxy(0, 0);lcd_string("00:00:00");// 等待用户按下开始/暂停按钮while (!START_PAUSE_BTN && !RESET_BTN);// 判断按钮类型并处理计时器状态if (START_PAUSE_BTN) {if (running) { // 当前处于计时状态,按下按钮将进入暂停状态 running = 0;pause_time = time;} else { // 当前处于暂停状态,按下按钮将进入计时状态running = 1;start_time = get_current_time() - pause_time;}} else if (RESET_BTN) { // 复位按钮按下,重置计时器time = 0;running = 0;}}}// 毫秒级延时函数void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--) {for (j = 110; j > 0; j--);}}// LCD初始化函数void lcd_init() {lcd_command(0x38); // 设置8位数据总线模式lcd_command(0x0C); // 显示开,光标关闭lcd_command(0x06); // 光标右移,不移动显示器lcd_command(0x01); // 清屏}// 向LCD发送指令函数void lcd_command(unsigned char cmd) {LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;LCD_D4 = cmd >> 4 & 1;LCD_D5 = cmd >> 5 & 1;LCD_D6 = cmd >> 6 & 1;LCD_D7 = cmd >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = cmd >> 0 & 1;LCD_D5 = cmd >> 1 & 1;LCD_D6 = cmd >> 2 & 1;LCD_D7 = cmd >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送数据函数void lcd_data(unsigned char dat) { LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;LCD_D4 = dat >> 4 & 1;LCD_D5 = dat >> 5 & 1;LCD_D6 = dat >> 6 & 1;LCD_D7 = dat >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = dat >> 0 & 1;LCD_D5 = dat >> 1 & 1;LCD_D6 = dat >> 2 & 1;LCD_D7 = dat >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送字符串函数void lcd_string(unsigned char *str) {while (*str) {lcd_data(*str++);delay(5);}}// 清屏函数void lcd_clear() {lcd_command(0x01);}// 设置光标位置函数void lcd_gotoxy(unsigned char x, unsigned char y) {unsigned char addr;if (y == 0)addr = x | (0x80 + y);else if (y == 1)addr = x | (0xC0 + y);lcd_command(addr);}5. 总结本文介绍了使用51单片机设计一个简单的秒表程序。

单片机秒表计时器

单片机秒表计时器

目录摘要 (3)一、实训目的 (3)二、实训设备与器件 (3)(1)实验设备 (3)(2)实训器件 (3)三、实训步骤与要求 (4)(1)要求 (4)(2)方法 (4)(3)实训线路分析 (4)(4)软件设计 (4)(5)程序编制 (4)四、硬件系统设计 (4)五、软件系统设计 (5)六、系统调试 (9)七、实训总结与分析 (10)八、参考资料: (11)九、附录 (12)摘要:秒表是由单片机的P0口和P2口分别控制两个数码管,使数码管工作,循环显示从00—59。

同时,用一个开关控制数码管的启动与停止,另外加上一个复位电路,使其能正常复位,通常还使用石英晶体振荡器电路构成整个秒表的结构电路。

一、实训目的(1)利用单片机定时器中断和定时器计数方式实现秒定时。

(2)通过LED显示程序的调整,熟悉单片机与LED的接口技术,熟悉LED动态显示的控制过程。

(3)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。

(4)进一步学习单片机开发系统的整个流程。

二、实训设备与器件(1)实训设备:单片机开发系统、微机、万用表、电烙铁等。

(2)实训器件:名称数量7段数码管 2电阻10k 1电阻1k 8键盘开关 1电容10微法 1电容30皮法 2晶振12M 189C51 1万能板 1导线若干三、实训步骤与要求(1)要求:利用实训电路板,以2位LED右边1位显示个位,左边1位显示十位,实现秒表计时显示。

以一个按键开关实现启动、停止、清零等功能。

(2)方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器0方式1计数,实现00--59计数。

(3)实验线路分析:采用实训电路板,其原理图参见附录。

两个7段LED 数码管分别由单片机的P0口和P2口控制,使数码管显示从00—59的字样。

用一个开关控制数码管的启动与停止,另外加上一个复位电路,使其能正常复位。

单片机-简易秒表-正计时时间可设置-倒计时时间可查询-报警三秒.doc.

单片机-简易秒表-正计时时间可设置-倒计时时间可查询-报警三秒.doc.

第一章设计内容和要求设计任务用AT89C52设计一个4位的LED数码作为多功能“秒表”。

设计目的1.学习数码管显示的结构和工作流程,实现数码管分组显示数字组合。

2.学习有关单片机的内容,进一步了解AT89C52芯片的相关功能。

3.复习C语言的相关知识。

4.培养自学能力和探索解决问题的能力。

设计要求显示时间为00分00秒-59分59秒,每1秒自动加1,另外设计一个“开始/暂停”键、一个“记录/查询”键、一个“清零”键、一个“模式切换”键、一个“时间设置”键、一个“复位”键。

秒表要求正计时时,可记录并且查询10组数据,倒计时时,时间用户可设置,并且时间到时蜂鸣器报警。

设计创新在基本设计基础上添加了正向查询10条记录后蜂鸣器同时报警。

设计意义简易秒表具有读取方便,显示直观,功能多样,电路简洁,成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。

本次设计将基于单片机的工作原理,设计简易秒表的基本电路,深入的了解其工作原理,掌握其基本的工作特点。

同时简易秒表在生活中应用广泛,从实际出发,不断创新。

第二章方案设计与选择技术可行性20世纪以来,微电子,IC集成电路行业发展迅速,其中单片机行业发展最引人注目。

单片机利用大规模集成电路技术把中央处理器和数据存储器(RAM),程序存储器(ROM)及其他I/O通信口集成在一块芯片上,构成最小的计算机系统。

如今的单片机发展集成了更多的特殊功能单元,例如A/D,D/A转换器,通信控制,DMA,PWM控制输出单元等。

因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统。

单片机除了具备体积小,价格低,速度快,用途广,可靠性高等特点,在硬件结构和指令设置上还有以下独特之处:1.存储器ROM和RAM是严格分工的。

前者存放程序,常数和数据表格,后者存放临时数据和变量。

2.采用面向控制的指令系统,构成的应用系统有较大的可靠性。

大部分测控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当的改变系统功能。

单片机实验——秒表--(详细步骤)

单片机实验——秒表--(详细步骤)

简易秒表制作1子情境内容:制作简易秒表,利用按键构成键盘实现秒表的启动、停止与复位,利用LED数码管显示时间。

2 子情境目标:(1)通过简易秒表的制作,进一步熟悉LED数码管与单片机的接口电路(2)学习定时/计数器、中断技术的综合运用并会使用简易键盘3 知识点链接独立式按键的使用:图5-49为按键与单片机的连接图。

机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。

其抖动过程如图5-50所示,抖动时间的长短与开关的机械特性有关,一般为5~10ms。

在触点抖动期间检测按键的通与断状态,可能导致判断出错。

即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。

为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。

本子情境中采用软件去抖。

图按键与单片机连接图图按键被按下时电压的变化4 任务步骤4.1 步骤一:PROTEUS电路设计,简易秒表的原理图如图5-51所示。

1、选取元器件①单片机:AT89C51②两位共阴极蓝色数码管:7SEG-MPX2-CC-BLUE③排阻:RESPACK-8④按钮:BUTTON2、放置元器件、放置电源和地、连线、元器件属性设置简易秒表的原理图如图5-51所示,整个电路设计操作都在ISIS平台中进行。

与子情景3相似,故不详述。

图简易秒表的原理图4.2 步骤二:源程序设计与目标代码文件生成(1)程序流程图主程序图5-52 秒表流程图(2)源程序设计#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit key1=P3^0; //定义"启动"按钮sbit key2=P3^1; //定义"停止"按钮sbit key3=P3^2; //定义"复位"按钮uchar temp,aa,shi,ge;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴极数码管编码void display(uchar shi,uchar ge); //声明显示子函数void delay(uint z); //声明延时子函数void init(); //声明初始化函数void main(){init(); //调用初始化子程序while(1){if(key1==0) //检测"启动"按钮是否按下{delay(10); //延时去抖动if(key1==0) //再次检测"启动"按钮是否按下{while(!key1); //松手检测,若按键没有释放,key1始终为0,那么!key1始终为1,程序就一直停在此while语句处TR0=1; //启动定时器开始工作}}if(key2==0) //检测"停止"按钮是否按下{delay(10); //延时去抖动if(key2==0) //再次检测"停止"按钮是否按下{while(!key2); //松手检测TR0=0; //关闭定时器}}if(key3==0) //检测"复位"按钮是否按下{delay(10); //延时去抖动if(key3==0) //再次检测"复位"按钮是否按下{while(!key3); //松手检测temp=0; //将变量temp的值清零shi=0; //将十位清零ge=0; //将个位清零TR0=0; //关闭定时器}}display(shi,ge); //调用显示子函数}}void delay(uint z) //延时子函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void display(uchar shi,uchar ge) //显示子程序{P2=0xbf;P0=table[shi];delay(10);P2=0x7f;P0=table[ge];delay(10); //使用动态扫描的方法实现数码管显示}void init() //初始化子程序{temp=0;TMOD=0x01; //使用定时器T0的方式1TH0=(65536-50000)/256;TL0=(65536-50000)%256; //定时50ms中断一次EA=1; //中断总允许ET0=1; //允许定时器T0中断}void timer0() interrupt 1{TH0=(65536-50000)/256;//重新赋初值TL0=(65536-50000)%256;aa++; //中断一次变量aa的值加1if(aa==20) //中断20次后,定时时间为20*50ms=1000ms=1s,将变量temp的值加1{aa=0;temp++;if(temp==60) //秒表到达60s后回零{temp=0;}shi=temp%100/10;ge=temp%10; //分离个位和十位}}4.3 步骤三:PROTEUS仿真加载目标代码文件,双击编辑窗口的AT89C51器件,在弹出属性编辑对话框Program File一栏中单击打开按钮,出现文件浏览对话框,找到miaobiao.hex文件,单击“打开”按钮,完成添加文件。

单片机设计秒表

单片机设计秒表

单片机设计秒表
设计一个单片机秒表需要以下步骤:
1. 选择合适的单片机:需要选择一个具有定时/计数器功能的单片机,比如常见的STC89C52、AT89S52等。

2. 连接外部硬件:将单片机与LCD显示屏、按键等外部硬件连接起来。

其中,LCD显示屏用于显示秒表的计时结果,按键用于启动/停止计时和复位秒表。

3. 编写程序:使用C语言或汇编语言编写单片机程序,实现秒表的计时、显示和控制功能。

具体包括:
a. 初始化各个端口和定时器/计数器,设置中断服务程序;
b. 等待用户按下启动按钮,开始计时,并对按键进行检测;
c. 每隔一定时间(比如10ms)更新计时器/计数器的值,并将其转换为小时、分钟、秒和毫秒的形式;
d. 将计时结果输出到LCD屏幕上,实时更新;
e. 如果用户按下停止按钮,则暂停计时;如果用户按下复位按钮,则清零计时器/计数器,并重新开始计时。

4. 调试测试:将程序下载到单片机中,通过按键测试和观察LCD 显示结果进行调试测试,确保秒表能够正常工作。

以上就是设计一个单片机秒表的基本步骤,需要充分了解单片机原理和编程知识才能完成。

利用51单片机制作秒表的详细过程

利用51单片机制作秒表的详细过程

利用51单片机制作秒表的详细过程
前面的话:
和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大家一样,百思不得其解,最后头都弄大了才把这个秒表制作出来,为了给以后的朋友们一些思路,一些参考,所以在这里我把自己制作的整个详细过程整理出来供大家参考。

我调试出来是没有问题的,各方面都稳定运行,由于我水平有限,中间可能会有不对的地方,欢迎大家指正,我们一起学习,一起进步!
我将分为三个部分来介绍:1.整体思路,2.硬件电路方面,3.软件编程方面。

1、整体思路
利用51单片机制作秒表时,我介绍精确到十分位(即0.1s)的制作,并让其拥有启动,暂停,复位三个功能。

用到的单片机部分:定时器部分,独立按键的检测与应用,数码管的显示,并结合一些简单的程序即可实现。

用5位数码管来进行显示,分别显示秒的十分位,秒的个位,秒的十位,分的个位,分的十位。

用定时器定时50ms,2个定时器中断即是0.1s,即秒的十分位,20个定时器中断即是1s,60个1s即是1分钟,通过程序将5位数码管的值分离出来,并进行显示。

这就是我在数码管显示方面的思路,如果不是太清楚,结合我下面软件编程方面的程序来看你可能就会明白,我会在那部分做详细介绍,看完了可能你就懂了。

利用独立按键设置启动/暂停键和清零键,利用独立按键的检测,若启动/暂停按键按下,秒表则启动或者暂停,按下复位键,秒表清零复位。

我在程序后面全都有注释,不用担心。

看完你就会明白了。

这是我制作的的流程图:。

c51单片机电子秒实验程序

c51单片机电子秒实验程序

实验八电子秒表实验一、实验目的掌握用定时器的应用方法。

二、实验电路如图所示,将实验仪上的JP2短接,将JP3、JP4断开,选择LED显示器,将JP1的2脚与4*1脚相连,选择独立式键盘。

三、实验内容设计一电子秒表,计时单位为0.1秒,第一次按键时启动计时,第二次按键时,停止计时,第三次按键时,计时器清0。

四、参考程序#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit KEY1=P2^4; //按键定义uchar code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x 89,0x8c,0xff};uchar dbuf[4]={0,0,0,0};uint count;uint n;void delay(void){ uchar i;for(i=0;i<200;i++);}void disp(void){ uchar n,bsel;bsel=0xfe; //最初点亮最低位for(n=0;n<4;n++){ P2=bsel; //位选口P0=segtab[dbuf[n]];//显示缓冲单元的数据查出字段码表bsel=(bsel<<1)+1; //准备显示下一位delay(); //每位显示约1毫秒P0=0xff; //熄灭数码管,防止当前位在下一位置显示出来}}void time0(void) interrupt 1 //用定时器中断来模拟外部中断{ n++;if(n==400){ n=0;count++; //中断次数加1if(count==1000) count=0;dbuf[3]=count/1000;dbuf[2]=count%1000;dbuf[2]=count/100; //将中断次数转换成三位BCD码dbuf[1]=count%100;dbuf[0]=dbuf[1]%10;dbuf[1]=dbuf[1]/10;}}void main(void){ uchar st=2;TMOD=0x02; //T0工作于定时方式2TH0=-230; //定时时间为250usTL0=-230;ET0=1; //允许T0中断TR0=0; //暂停计时EA=1; //CPU开中断while(1){ while(KEY1==1) disp();//等待按键disp(); //延时去抖动if(KEY1==0) //如果有键按下{ st++; //当前状态加1if(st==3) st=0; //状态值取值为0、1、2if(st==1) TR0=0;//为1时暂停if(st==2) //为2时清计数器0{ n=0;count=0;dbuf[3]=0;dbuf[2]=0;dbuf[1]=0;dbuf[0]=0;}if(st==0) TR0=1;//为0时启动}while(KEY1==0) disp();//等待按键释放} }。

单片机技术简易秒表教程

单片机技术简易秒表教程
一、定时器初始化的主要内容 1. 选择工作方式。即通过方式寄存器TMOD进行设置。 例如:欲设置T0为定时方式1,TMOD状态应置为:
GATE C/T
M1
M0 GATE C/T
M1
M0
0
0
0
0
0
0
0
1
T1
T0
指令:MOV TMOD,#01H;则可以使T0工作在方式1状态
若要设置T1为计数方式1,指令是怎样?
1
1
3
T0 分成两个独立的 8 位计数器, T1 在方式 3 时停止 工作
《单片机技术》项目化课程
2. C/T 定时器方式或计数器方式选择位
若C/T=1时, 为计数器方式; C/T = 0时, 为定时器方式。
3. GATE 定时器/
若GATE=0时, 则只要 TR0 (或 TR1)置 1, 定时器 /计数器就被选通, 而 不管 INT0 (或 INT1)的电平是高还是低。 若GATE=1时, INT0 (或INT1)引脚为高电平且TR0(或TR1 )置 1 时, 相应 的定时器 /计数器才被选通工作, 这时可用于测量在INTx端出现的正脉冲 的宽度。
(1)选择工作方式 (2)计算机定时器的初值 (3)重复循环次数。 (4)绘制程序流程图,编写程序。 (5)绘制PROTEUS图,调试程序。
《单片机技术》项目化课程
程序设计流程图(task4-3-3.asm)
开始 T0工作初始化 数码管显示的初始值
T0溢出标志位 N
TF0 = 1?
Y
T0重新赋初值

N (41H) +1
N (40H) +1

秒个位 (41H) = 9 ?

利用51单片机制作一个秒表的详细过程

利用51单片机制作一个秒表的详细过程

利用51单片机制作一个秒表的详细过程利用51单片机制作一个秒表的详细过程前面的话:和很多朋友一样,在学51单片机的过程中我们肯定会涉及到制作一个秒表,牵涉到把单片机的多个部分组合起来使用,这对于我们初学者来说可能显得有些困难,我同大家一样,百思不得其解,最后头都弄大了才把这个秒表制作出来,为了给以后的朋友们一些思路,一些参考,所以在这里我把自己制作的整个详细过程整理出来供大家参考。

我调试出来是没有问题的,各方面都稳定运行,由于我水平有限,中间可能会有不对的地方,欢迎大家指正,我们一起学习,一起进步!我将分为三个部分来介绍:1.整体思路,2.硬件电路方面,3.软件编程方面。

1.整体思路利用51单片机制作秒表时,我介绍精确到十分位(即0.1s)的制作,并让其拥有启动,暂停,复位三个功能。

用到的单片机部分:定时器部分,独立按键的检测与应用,数码管的显示,并结合一些简单的程序即可实现。

用5位数码管来进行显示,分别显示秒的十分位,秒的个位,秒的十位,分的个位,分的十位。

用定时器定时50ms,2个定时器中断即是0.1s,即秒的十分位,20个定时器中断即是1s,60个1s即是1分钟,通过程序将5位数码管的值分离出来,并进行显示。

这就是我在数码管显示方面的思路,如果不是太清楚,结合我下面软件编程方面的程序来看你可能就会明白,我会在那部分做详细介绍,看完了可能你就懂了。

利用独立按键设置启动/暂停键和清零键,利用独立按键的检测,若启动/暂停按键按下,秒表则启动或者暂停,按下复位键,秒表清零复位。

我在程序后面全都有注释,不用担心。

看完你就会明白了。

这是我制作的的流程图:“ms100”表示秒的十分位,'s'表示秒的个位,“s1”表示秒的十位,“min”表示分的个位,“min1”表示分的十位。

“cnt”表示秒的计数位,即多少个一秒,定时满一秒加1,“minu”表示分的计数位,即多少个一分钟,一分钟加1,这个流程图提供了大致思路,要结合下面的程序部分一起看。

单片机秒表实验报告

单片机秒表实验报告

单片机秒表实验报告实验目的:本实验旨在通过使用单片机搭建一个简单的秒表,掌握单片机的基本输入输出方法和定时器的使用,提高对单片机的编程能力。

实验器材:1. STC89C52单片机开发板2. 4位共阳数码管3. 74HC595移位寄存器4. 按钮开关5. 连接线实验原理:秒表是一种测量时间的工具,通常用于计时。

在本实验中,我们将使用单片机来实现一个简单的秒表功能。

通过使用定时器中断,每隔一定的时间更新数码管上显示的时间,实现秒表的计时功能。

同时,通过按下按钮开关,可以控制秒表的启动、暂停和复位。

实验步骤:1. 将STC89C52单片机开发板与4位共阳数码管、74HC595移位寄存器和按钮开关连接。

2. 将开发板上的相应引脚与数码管和移位寄存器的引脚连接,确保连接正确。

3. 在单片机的主函数中初始化定时器和外部中断,并设置定时器的中断时间为1秒。

4. 在定时器中断函数中,每隔1秒更新数码管上的显示时间。

可以使用循环方式实现时间的累加和更新。

5. 在外部中断函数中,根据按钮开关的状态,实现秒表的启动、暂停和复位功能。

6. 编译、下载程序到单片机开发板,并将开发板上电。

7. 按下按钮开关开始计时,再次按下暂停计时,再次按下继续计时,再次按下复位计时。

8. 观察数码管上显示的时间是否正确,并测试秒表功能是否正常。

实验结果:经过测试,本实验搭建的单片机秒表功能正常,能够准确计时,并可以通过按钮开关实现启动、暂停和复位功能。

结论:通过本实验,我们成功地使用单片机搭建了一个简单的秒表,并实现了基本的计时功能。

同时,通过掌握单片机的定时器和外部中断的使用,我们提高了对单片机的编程能力。

这对于进一步深入学习和应用单片机具有重要的意义。

单片机c语言秒表显示实验

单片机c语言秒表显示实验

秒表显示实验一.实验目的1. 这个实验是设计一个程序,可以通过单片机让数码管显示从00开始每秒自动加一至99(不熟练的可先设计一个数码管的显示)到99后自动清零,从00开始继续计时。

2. 在做这个实验时要用到更新显缓存这种方法。

3. 让学生更熟悉keil软件的应用,对单片机C语言能更好的应用。

二. 实验过程1.对程序开发环境进行处理(打开软件,建工程,保存工程,建文件,文件加到工程里)。

2编程序,用更新显缓存:#include"AT89X51.H"//************************#define uchar unsigned char#define uint unsigned int//************************uint second;uchar disbuf[4];uchar codeLED[10]={0x00,0x00,0x00,0x00,0x00,0x00,0x 00,0x00,0x00,0x00}void delay_nms(unit nms){}//延时void update_disbuf(void){uint tmp16bit;tmp16bbit = second;disbuf[0] = LED[tmp16bit%10]tmp16bit=tmp16bit/10disbuf[1] = LED[tmp16bit%10]tmp16bit=tmp16bit/10disbuf[2] = LED[tmp16bit%10]tmp16bit=tmp16bit/10disbuf[3] = LED[tmp16bit%10]}void main(void){sp = 0x70;P1_4 = 0;P0 = 0xff;second = 0;update_disbuf();while(1){P0 = disbuf[0];delay nms(1000);second++;update_disbuf();}} //end3.完成整个程序:#include"AT89X51.H"#include"intrins.h"//==============================#define uint unsigned int#define uchar unsigned charuint second;uchar disbuf[4];sbit wei=P2^7;sbit duan=P2^6;uchar codeLED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f };//============================== void delay_ms(uint nms){uint i,j;for(i=0;i<nms;i++){for(j=0;j<99;j++){_nop_();_nop_();}}}//============================== void update_disbuf(){delay_ms(1000);second++;disbuf[0]=second%10;disbuf[1]=second/10%10;disbuf[2]=second/100%10;disbuf[3]=second/1000%10;}//============================== void main(){second=0;wei=1;P0=0xdf;wei=0;duan=1;P0=LED[0];while(1){update_disbuf();P0=LED[ disbuf[0]];}}4.对程序进行保存编译,无错后,点击target options,在点击OUTPUT后,生成.hex文件,将程序下载到开发板上,观察实验效果。

单片机多功能秒表

单片机多功能秒表

.单片机综合实验报告题目: 多功能数字时钟班级:姓名:学号:一、实验内容:设计一个单片机控制的秒表系统。

利用单片机的定时器的原理,结合显示电路、LED 数码管以及按键来设计计时器,使系统能够正确地进行加、减(倒)计时,数码管能够正确地显示时间。

目的要求1)两位LED显示,显示时间为00~99秒。

2)每秒自动加1。

3)一个开始按键、一个复位按键和一个暂停按钮。

4)翻页按钮查看四个不同的计时值。

5)添加倒计时初始值设置功能6)不同功能通过功能键Setup实现切换。

二、实验电路及功能说明本实验以51单片机为核心,应用其中断来定时,通过按键来控制时间和日期的调整,通过1602LCD来数字显示时钟,做成一个简易的数字时钟。

本实验要求能定时,还要能设置闹铃,由于对C51程序代码的写法不是很熟,没能实现闹铃功能。

所以,最后该实验能实现的功能为时间和日期的调整。

其原理图如下图所示:三、实验程序流程图:主程序:主程序流程图子流程图(按键功能设置)四、实验结果分析经过proteus仿真可知:该方案可行,能够对时间进行精确的调整,也能对日期进行更正,基本上能实现上述功能。

五、心得体会通过该试验我对51的了解更加深入了一层,特别是对C51的写法更加了解,还对1602的基本操作有了一定的了解。

同时,也发现C语言的重要性,以后要多加强对C语言的学习.六、程序清单#include <REG52.H>#include <INTRINS.H> //库函数头文件,代码中引用了_nop_()函数// 定义控制信号端口sbit RS=P2^4; //P2.4sbit RW=P2^5; //P2.5sbit E=P2^6; //P2.6sbit set=P1^4; //设置键sbit add1=P1^5; //加1键sbit sub1=P1^6; //减1键sbit enter=P1^7; //确认键bit k=0,f=0;//k为0表示运行状态,k为1表示设置状态;f为0表示第一行显示,f为1表示第二行显示char sec,n,m;unsigned char count,key;unsigned char lcdd[]="0123456789";/*声明调用函数*/void dispd(); //日期显示函数void dispt(); //时间显示函数unsigned char keys();//按键扫描函数void lcd_w_cmd(unsigned char ); //写命令字函数void lcd_w_dat(unsigned char dat); //写数据函数unsigned char lcd_r_start(); //读状态函数void int1(); //LCD初始化函数void delay(unsigned char t); //可控延时函数.void delay1(); //软件实现延时函数,5个机器周期/*主函数*/void main(){TMOD=0x01; //设置为定时器模式1TH0=(65536-50000)/256; //晶振6MHz,定时时间100msTL0=(65536-50000)%256;IE=0x82; //开全局中断和定时中断TR0=1; //启动定时器sec=0; //秒count=0; //中断次数清0n=-3; //设置键按下次数,第一行日期m=-3; //设置键按下次数,第二行时间P0=0xff; // 送全1到P0口int1(); // 初始化LCDdelay(255);while(1){key=keys(); //读取按键switch(key){case 0xe0: //按下设置键{TR0=0;k=1;if(f==0){n=n+3;if(n==9){n=0;m=0;f=1;}}else{m=m+3;if(m==12){m=0;n=0;f=0;}}if(f==0){lcd_w_cmd(0x0d);lcd_w_cmd(0x86+n);}else{lcd_w_cmd(0x0d);lcd_w_cmd(0xc4+m);}} break;case 0x70: //按下确认键{k=0;TR0=1;n=-3;m=-3;f=0;} break;case 0xd0: //按下加1键{if(k==1){if(f==0){(m==6){sec++;if(sec==100) sec=0;} dispt(); //调用第二行显示函数lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0xc4+m);//返回设置值显示地址}}} break;case 0xb0: //按下减1键{if(k==1){if(f==0){if(m==6){sec--;if(sec<0) sec=99;}dispt(); //调用第二行显示函数.lcd_w_cmd(0x0d); //光标闪烁lcd_w_cmd(0xc4+m);//返回设置值显示地址}}} break;}if(k==0) {dispd();dispt();} //调用LCD显示函数}}/*延时函数*/void delay(unsigned char t){unsigned char j,i;for(i=0;i<t;i++)for(j=0;j<20;j++);}/*延时函数1*/void delay1(){_nop_();_nop_();_nop_();}/*LCD初始化函数*/void int1(){lcd_w_cmd(0x3c); // 设置工作方式lcd_w_cmd(0x0c); // 设置光标lcd_w_cmd(0x01); // 清屏lcd_w_cmd(0x06); // 设置输入方式lcd_w_cmd(0x80); // 设置初始显示位置}/*LCD读状态函数*///返回值:返回状态字,最高位D7=0,LCD控制器空闲;D7=1,LCD控制器忙unsigned char lcd_r_start(){unsigned char s;RW=1; //RW=1,RS=0,读LCD状态delay1();RS=0;delay1();E=1; //E端时序delay1();s=P0; //从LCD的数据口读状态delay1();E=0;delay1();RW=0;delay1();return(s); //返回读取的LCD状态字}/*LCD写命令函数*/void lcd_w_cmd(unsigned char ){unsigned char i;do { // 查LCD忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环RW=0;delay1();RS=0; // RW=0,RS=0,写LCD命令字delay1();E=1; //E端时序delay1();P0=; //将中的命令字写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}/*LCD写数据函数*/void lcd_w_dat(unsigned char dat){unsigned char i;do { // 查忙操作i=lcd_r_start(); // 调用读状态字函数i=i&0x80; // 与操作屏蔽掉低7位delay(2);} while(i!=0); // LCD忙,继续查询,否则退出循环RW=0;delay1();RS=1; // RW=1,RS=0,写LCD数据delay1();E=1; // E端时序delay1();.P0=dat; // 将dat中的显示数据写入LCD数据口delay1();E=0;delay1();RW=1;delay(255);}/*****定时中断函数*****/void timer0() interrupt 1{TH0=(65536-50000)/256; //晶振6MHz,定时时间100msTL0=(65536-50000)%256;count++;if(count==20){count=0;sec++;if(sec==99){sec=0;} /*按键扫描函数*/unsigned char keys(){unsigned char cod,del;P1=0xf0;cod=P1&0xf0; //读入P3口键值if(cod!=0xf0) //先检测有无按键按下{delay(100); //去抖if(cod!=0xf0){cod=P1&0xf0; //读入键值do //等待键释放{P1=0xf0;del=P1&0xf0;}while(del!=0xf0);return(cod);//返回键值}}return(0xf0); //返回该值}void dispt(){lcd_w_dat(lcdd[sec%10]);delay(2);lcd_w_dat(' ');delay(2);lcd_w_dat('W');delay(2);}。

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

简易秒表制作
1子情境内容:制作简易秒表,利用按键构成键盘实现秒表的启动、停止与复位,利用LED数码管显示时间。

2 子情境目标:
(1)通过简易秒表的制作,进一步熟悉LED数码管与单片机的接口电路(2)学习定时/计数器、中断技术的综合运用并会使用简易键盘
3 知识点链接
独立式按键的使用:图5-49为按键与单片机的连接图。

机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。

其抖动过程如图5-50所示,抖动时间的长短与开关的机械特性有关,一般为5~10ms。

在触点抖动期间检测按键的通与断状态,可能导致判断出错。

即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。

为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。

本子情境中采用软件去抖。

图按键与单片机连接图图按键被按下时电压的变化
4 任务步骤
4.1 步骤一:PROTEUS电路设计,简易秒表的原理图如图5-51所示。

1、选取元器件
①单片机:AT89C51
②两位共阴极蓝色数码管:7SEG-MPX2-CC-BLUE
③排阻:RESPACK-8
④按钮:BUTTON
2、放置元器件、放置电源和地、连线、元器件属性设置
简易秒表的原理图如图5-51所示,整个电路设计操作都在ISIS平台中进
行。

与子情景3相似,故不详述。

图简易秒表的原理图4.2 步骤二:源程序设计与目标代码文件生成(1)程序流程图
主程序
图5-52 秒表流程图
(2)源程序设计
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^0; //定义"启动"按钮
sbit key2=P3^1; //定义"停止"按钮
sbit key3=P3^2; //定义"复位"按钮
uchar temp,aa,shi,ge;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //共阴极数码管编码
void display(uchar shi,uchar ge); //声明显示子函数
void delay(uint z); //声明延时子函数
void init(); //声明初始化函数
void main()
{
init(); //调用初始化子程序
while(1)
{
if(key1==0) //检测"启动"按钮是否按下
{
delay(10); //延时去抖动
if(key1==0) //再次检测"启动"按钮是否按下
{
while(!key1); //松手检测,若按键没有释放,key1始终为
0,那么!key1始终为1,程序就一直停在此
while语句处
TR0=1; //启动定时器开始工作
}
}
if(key2==0) //检测"停止"按钮是否按下
{
delay(10); //延时去抖动
if(key2==0) //再次检测"停止"按钮是否按下
{
while(!key2); //松手检测
TR0=0; //关闭定时器
}
}
if(key3==0) //检测"复位"按钮是否按下
{
delay(10); //延时去抖动
if(key3==0) //再次检测"复位"按钮是否按下
{
while(!key3); //松手检测
temp=0; //将变量temp的值清零
shi=0; //将十位清零
ge=0; //将个位清零
TR0=0; //关闭定时器
}
}
display(shi,ge); //调用显示子函数
}
}
void delay(uint z) //延时子函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar shi,uchar ge) //显示子程序
{
P2=0xbf;
P0=table[shi];
delay(10);
P2=0x7f;
P0=table[ge];
delay(10); //使用动态扫描的方法实现数码管显示
}
void init() //初始化子程序
{
temp=0;
TMOD=0x01; //使用定时器T0的方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定时50ms中断一次
EA=1; //中断总允许
ET0=1; //允许定时器T0中断
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;//重新赋初值
TL0=(65536-50000)%256;
aa++; //中断一次变量aa的值加1
if(aa==20) //中断20次后,定时时间为20*50ms=1000ms=1s,
将变量temp的值加1
{
aa=0;
temp++;
if(temp==60) //秒表到达60s后回零
{
temp=0;
}
shi=temp%100/10;
ge=temp%10; //分离个位和十位
}
}
4.3 步骤三:PROTEUS仿真
加载目标代码文件,双击编辑窗口的AT89C51器件,在弹出属性编辑对话框Program File一栏中单击打开按钮,出现文件浏览对话框,找到miaobiao.hex 文件,单击“打开”按钮,完成添加文件。

单击按钮,启动仿真,仿真运行片段如图所示。

按下“启动”按钮后,秒表开始计时,如图所示。

按下“停止”按钮,秒表停止计时。

按下“复位”按钮,秒表回到最初始的状态,如图所示。

图按下“启动”按钮后秒表开始计时
图按下“复位”按钮后,秒表回到最初始的状态
5 扩展练习
此子情境设计的秒表只能显示两位整数,如果要记录110跨栏12:88秒的成绩,则必须再增加两位数码管来显示小数位。

想想硬件和软件应该做如何改动。

相关文档
最新文档