按键和定时器中断综合应用-秒表计时器
C51单片机秒表计时(C语言)
{ cout++;
mm=0;}
}
效果显示
图一(电路总图)
图二(效果显示)注:第四位显示为单位:S
程序清单
#include<reg51.h>
#include<stdio.h>
unsigned char Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };
sbit P37=P3^7;
}
/*********显示程序*****************/
void display()
{
x=cout/10;//秒十位
P34=0;
P1=Tab[x]; delay();
P34=1;
y=cout-x*10; //秒各位
P35=0;
P1=Tab[y]; delay();
P1=做任何修改或编辑并不能对任何下载内容负责
南开大学滨海学院
C51嵌入式软件设计(C语言)
题目:计时秒表
功能描述:本设计实现在99秒内的秒表计时,一个按键实现开始、暂停、复位。
原理概述:P1接四位七段数码管,P3.2接一按键产生外部中断0,P3.4-P3.7控制扫描显示。计时使用定时器0产生10ms中断累计。按键不同次序决定了对应的控制功能,因为第一次按键必定为开始计时,所以第二次按键判断为暂停,依次第三次为置零。主程序调用显示程序,显示程序实时显示计时时间。
sbit P36=P3^6;
sbit P35=P3^5;
sbit P34=P3^4;
unsigned int a=0,cout=0,mm=0;x,y,p,q;
可任意启动停止的电子秒表设计
可任意启动停止的电子秒表设计1.引言本文将介绍一种设计思路,实现了可任意启动停止的电子秒表。
在日常生活中,秒表广泛应用于计时和测量领域,例如运动比赛、实验室测量等。
设计一个方便灵活的电子秒表,可以提高计时的准确性和便捷性。
2.设计原理2.1 电路结构该电子秒表设计采用基于微控制器的数字计时器。
电路结构简单,主要由微控制器、晶振、按钮和显示器组成。
按钮用于控制启动和停止,显示器用于显示计时结果。
2.2 程序设计通过编程实现秒表的启动、停止和计时功能。
通过轮询按钮状态,实现按钮功能的触发。
使用定时器中断来实现计时功能,每次中断增加计时值,并更新显示器内容。
同时,设计一个状态机控制秒表的状态切换,如初始状态、运行状态和停止状态。
3.实现步骤3.1 硬件连接将微控制器与晶振、按钮和显示器连接正常,确保电路连接正确。
3.2 程序编写编写秒表的程序,包括按钮轮询、定时器中断和状态机设计。
程序应该简洁高效,确保计时准确。
3.3 测试验证将程序下载到微控制器中,连接电源进行测试验证。
通过按键操作验证秒表的启动、停止功能是否正常。
4.应用场景该可任意启动停止的电子秒表可广泛应用于日常生活和工作中。
例如运动比赛、游戏计时、实验室测量等场景。
5.总结通过本设计,实现了一个灵活方便的电子秒表,具有可任意启动停止的功能。
通过合理的电路设计和程序编写,提高了计时的准确性和便捷性,满足了不同场景的需求。
以上是对可任意启动停止的电子秒表设计的介绍,希望能够为读者提供一些参考和启发。
gshock按键功能
gshock按键功能G-Shock按键功能是一款非常实用的功能齐全的手表。
它被广泛应用于各种户外运动和极限运动,凭借其耐冲击、防水、防磁等特点而备受青睐。
它不仅有时钟、计时器、秒表等常见功能,还具备一些独特的按键功能,下面我将为大家详细介绍一下:首先是G-Shock的调整按键功能。
通过这些按键,用户可以轻松地切换模式,调整时间和日期等基本设置。
手表上通常有四个按键,根据按键的不同组合方式可以进行不同的操作。
比如,通过同时按下两个按键,可以进入设置模式,并通过其他按键来调整时间和日期。
这使得调整时间和日期变得非常方便快捷。
其次是G-Shock的闹钟和定时器功能。
用户可以设置多个闹钟和定时器,可以在特定的时间提醒用户或计时。
通过按键,用户可以轻松地设置闹钟的时间和铃声。
同时,用户还可以在使用定时器时按下按键,以暂停或重置定时器。
这些功能对于生活和工作都非常有帮助,特别是在需要按时完成任务或者提醒自己的场合。
另外,G-Shock还具备倒计时和秒表功能。
倒计时功能可以帮助用户在特定时间内完成任务,用户可以通过按键轻松设置倒计时时间,并在倒计时结束时进行提示。
秒表功能可以对时间进行精确的计时,用户可以通过按键开始、停止和重置秒表。
这对于一些需要精确计时的运动或比赛来说尤为重要,比如游泳、跑步等运动项目。
此外,G-Shock还具备一些特殊的功能按键,如电子指南针、温度计和高度计等。
通过按键,用户可以轻松地切换这些功能,并进行相应的测量。
电子指南针可以帮助用户在户外环境中确定方向,温度计可以测量周围的气温,而高度计可以测量用户所处的海拔高度。
这些功能在登山、徒步等户外活动中非常有用,帮助用户更好地适应环境。
总而言之,G-Shock的按键功能非常丰富,能够满足用户在不同场合的需求。
无论是日常生活中的时间管理,还是户外运动中的环境适应,G-Shock都能提供便捷的操作和准确的测量。
这些按键功能使得G-Shock成为现代人不可或缺的时尚配饰和实用工具。
电子设计课程设计——电子秒表
课程设计报告(学生版)2010 ~2011 学年第 2学期教学单位华南师范大学物电学院课程名称电子设计竞赛课程设计题目电子秒表指导教师焦新涛学生姓名陈辉明专业名称电子信息工程年级 2008级电子秒表1.设计目的利用单片机定时器/计数器中断设计秒表,从而实现秒、0.1秒的计时。
综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。
通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握,对单片机实际的应用作进一步的了解。
通过本次系统设计,增强自己的动手能力。
认识单片机在日常生活中的应用的广泛性,实用性。
2.设计要求本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。
模拟利用AT89C52单片机、LED数码管以及控件来控制秒表的计数以及计数的开启/暂停/继续与复位!其中有三个数码管用来显示数据,一个数码管显示分(两位),一个数码管显示秒(两位),另一个数码管显示十分之一秒,十分之一秒的数码管计数从0~9,满十进一后显示秒的数码管的数字加一,并且十分之一秒显示清零重新从零计数。
秒的数码管计数从00~59,满59后进一后显示分的数码管加一,并且秒显示清零重新从零计数。
分的数码管计数从00开始。
计分数码管采用两位的数码管,当计数超过范围是所有数码管全部清零重新计数。
3.设计原理3.1主要元件:1个AT89S52芯片、2个独立键盘、3个LED数码管。
3.2工作原理:(1)电子秒表的系统设计是利用单片机的定时器功能,在周期的时间内产生中断来执行既定的程序,单片机AT89S52共有3个定时器,本系统采用了定时器1的工作模式1:此工作模式中,计数寄存器由16位组成,此时TH1、TL1都作为8位计数器使用,工作原理为:TL1计数溢出向TH1进位,TH1计数溢出时置位TF1=1,并向CPU申请中断,最大的计数值为216 =65536 (2)系统采用的晶振频率为f osc =12MHz,机器周期为T cy =1us ,定时范围为1~65536us。
4位简易秒表的设计与制作
4位秒表的设计与制作一、任务要求该任务要求设计并制作一个4位秒表,秒表有启动、停止和清零功能,显示时间为0到9999秒。
该任务是综合应用数码管动态显示、单片机定时计数器和中断系统设计一个具有启动、停止、清零和校时功能的,能显示0到9999秒的4位秒表。
二、设计方案提示4位秒表的设计与1位秒表设计基本相似,所不同的是4位秒表要显示4位数据,而且要有校时功能,所以它只是综合了键盘、定时器、中断系统和动态显示的应用。
多位数显示器是用数码管显示4位十进制数,如果采用数码管静态显示方法,4个数码管要占用4个I/O端口,将占用单片机的所有I/O口而无法实现其他功能,因此不能用静态显示方法实现多位数据的显示。
如何用单片机控制数码管实现多位数据的现实,而又不占用太多的I/O口呢?这就要用到--------数码管的动态显示。
4位秒表设计与1位秒表的设计在原理上是一样的,不同的是:4位秒表要显示4位数,利用前面的数码管显示方法需要4个并行I/0口,而启动停止和清零要占用2个I/O线,89C52单片机只有4个并行I/O口,因此这种显示方法不能满足4位秒表的功能。
那么,如何实现4位秒表的设计呢?这就是该任务的关键------数码管动态显示技术三、系统硬件设计参考:4位秒表电路原理图如图3-21所示,有启动停止、清零和校时电路;数码管的位选端分别接P2口的P2.0~P2.3,段选端接P0口,74LS245是驱动电路。
图3-21 4位秒表电路原理图硬件电路设计图3-17 4位数据显示器的硬件原理图图3-17是4位数据显示器的硬件原理图,数码管是共阳连接,P2口输出显示段码,74LS245驱动数码管显示,CE是片选端,低电平有效;4位数码管的公共端分别由P3.0、P3.1、P3.2、P3.3控制。
四、系统软件设计参考程序//功能:4位数码管动态显示“1234”//函数名:delay50ms//函数功能:采用定时器1、工作方式1实现50ms延时,晶振频率12MHz//形式参数:无//返回值:无void delay50ms(){ TH1=0x3c; // 置定时器初值TL1=0xb0;TR1=1; // 启动定时器1while(!TF1); // 查询计数是否溢出,即定时到,TF1=1TF1=0; // 50ms定时时间到,将定时器溢出标志位TF1清零}void main() //主函数{unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92}; //设置数字0~5字型码unsigned char i,w;TMOD=0x10; //设置定时器1工作方式1while(1) {w=0x01; //位选码初值为01Hfor(i=0;i<4;i++){P2=~w; //位选码取反后送位控制口P2口w<<=1; //位选码左移一位,选中下一位LEDP1=led[i]; //显示字型码送P1口delay50ms(); //延时50ms}}}4位秒表流程图如图3-22所示:包括主函数流程、定时器中断函数和显示函数流程图。
用汇编语言编写的秒表计时器-参考模板
实验报告十课程名称:微机原理与接口技术指导老师:李素敏学生姓名:向春霞学号:1243013 专业:通信工程日期:6月地点:理工603实验九矩阵键盘检测一、实验目的和要求1.掌握利用单片机定时器实现定时。
2.熟悉单片机与数码管的接口技术及数码管动态显示的控制过程。
3.熟悉单片机与键盘的接口技术及按键识别过程。
4.学会如何编制含数码管显示,定时器中断及按键控制等多种功能的综合程序,体会大型程序的编制和调试技巧。
二、主要仪器设备电脑,Keil软件三、实验内容1、实验要求:要求其实现的功能如下(其中定时要求采取中断方式):(1)、用6位数码管显示秒表时间,最左边2位显示分,中间2位显示秒,最右边2位显示秒的小数位(0.00~0.99秒),秒与小数位之间要显示小数点。
(2)、两个按键:①计时/停止按键:首次按下从0开始计时,再次按下暂停计时,之后每次按下按键实现‘继续计时、暂停计时,继续计时、暂停计时……’。
(继续计时即从上次暂停时的时间开始继续计时)②复位按键:按下后全部清0,等待下次按下‘计时/停止按键’时重新开始计时。
2.设计思路:(1)、采用内部脉冲定时,实现计时,最低显示位为10ms记一次数显示一次,即0.00—0.99秒。
100个10ms是1秒,所以当低位计满100次,(当50H为10时,把50H单元清零,向51H进1)即得到秒计时,然后把51H单元清零,给52H 单元加1.当52H为10时,清零,给53H加1,当53H为6时秒计时达到60次,则向分计时,即给54H加1,再给53H清零,当54H计满10时,清零,给55H 加1,直到55H为6时给55H清零。
50H,51H放最低位计数52-53H放秒位次数54-55H放分位计数(2)、S2(p3.4)键,用扫描S2:当P3.4为低电平时,让TR0为0,即暂停计数。
当P3.4再次为低电平时继续计数,让TR0=1.(3)、S 3(p3.5)键,T1计数模式实现中断响应,复位按键S3:当F0为0时,给50-55H单元清零;然后按S2开始计数3.源程序:ORG 0000HAJMP MAINORG 000BHLJMP TIME ;定时ORG 001BHLJMP S3 ;暂停ORG 0030HMAIN:CLR AMOV 50H,A ;最低位次数MOV 51H,AMOV 52H,A ; 秒位次数MOV 53H,AMOV 54H,A ;分位计数MOV 55H,ADS1:MOV TMOD,#61H ;定时0模式1,计数1模式2MOV TH0,#0D8H ;初值定时10msMOV TL0,#0F0HMOV TH1,#0FFH ;初值,溢出中断MOV TL1,#0FFHSETB EASETB ET1SETB ET0SETB TR0SETB TR1XS: MOV R1,#50HMOV R2,#0DFHMOV R3,#2MOV R4,#4JNB P3.4,STOPAJMP NEXTSTOP:CPL TR0WAIT:JB P3.4,NEXTSJMP WAITNEXT:MOV A,@R1INC R1MOV DPTR,#DUANMOVC A,@A+DPTRSETB P2.6MOV P0,ACLR P2.6SETB P2.7MOV A,R2MOV P0,ACLR P2.7 ;位选置位MOV A,R2RR AMOV R2,ALCALL DELDJNZ R3,NEXT XSD: MOV DPTR,#XDUAN MOV A,@R1MOVC A,@A+DPTRSETB P2.6MOV P0,ACLR P2.6SETB P2.7MOV A,R2MOV P0,ACLR P2.7 ;位选置位MOV A,R2RR ALCALL DELAGA:MOV A,@R1INC R1MOV DPTR,#DUANMOVC A,@A+DPTRSETB P2.6MOV P0,ACLR P2.6SETB P2.7MOV A,R2MOV P0,ACLR P2.7 ;位选置位MOV A,R2RR AMOV R2,ALCALL DELDJNZ R4,AGALJMP XSTIME:MOV TH0,#0D8H ;定时中断MOV TL0,#0F0HINC 50HMOV A,50HCJNE A,#10,RETUNT ;50H满10给51H单元+1MOV 50H,#00HINC 51HMOV A,51HCJNE A,#10,RETUNT ;51H满10给52H单元+1MOV 51H,#00HINC 52HMOV A,52HCJNE A,#10,RETUNT ;52H满10给53H单元+1MOV 52H,#00HINC 53HMOV A,53HCJNE A,#6,RETUNT ;53H满10给54H单元+1MOV 53H,#00HINC 54HMOV A,54HCJNE A,#10,RETUNT ;54H满10给55H单元+1MOV 54H,#00HINC 55HMOV A,55HCJNE A,#6,RETUNTMOV 55H,#00HRETUNT:RETIS3: CLR TR0CLR AMOV 50H,A ;最低位次数MOV 51H,AMOV 52H,A ; 秒位次数MOV 53H,AMOV 54H,A ;分位计数MOV 55H,ARETIDEL:MOV R6,#2 ;延时1msDEL1:MOV R7,#248NOPDEL2:DJNZ R7,DEL2DJNZ R6,DEL1RETDUAN:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段选地址表XDUAN:DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH ;带小数点的段码END---精心整理,希望对您有所帮助。
stc单片机定时器应用范例
stc单片机定时器应用范例
STC单片机定时器是单片机中非常重要的一个模块,它可以用于各种定时、计数和延时操作。
下面我将从多个角度为你介绍一些STC单片机定时器的应用范例。
1. 延时控制,STC单片机定时器可以用于控制延时操作,比如控制LED灯的闪烁频率。
通过设置定时器的计数值和工作模式,可以实现不同的延时效果。
2. 定时采集,在一些数据采集系统中,STC单片机定时器可以用于定时采集传感器数据,比如温度、湿度等,并将数据发送到其他设备或者进行处理。
3. 蜂鸣器控制,STC单片机定时器可以用于控制蜂鸣器的鸣叫时长和频率,实现声音信号的发声控制。
4. PWM输出,定时器可以用于产生PWM信号,可以用于控制电机的转速、LED的亮度调节等。
5. 定时中断,定时器可以用于产生定时中断,实现定时任务的
执行,比如定时检测按键状态、定时发送数据等。
6. 计时应用,STC单片机定时器可以用于计时应用,比如秒表、计时器等功能的实现。
总的来说,STC单片机定时器可以应用于各种需要时间控制和
定时操作的场景,通过合理的配置和应用,可以实现丰富的功能和
应用。
希望以上范例能够帮助你更好地理解STC单片机定时器的应用。
单片机独立按键控制秒表
单片机实训报告项目名称:专业:班级: 企业指导老师:校内指导老师:学号:姓名:地点:时间:二〇一九年月日附件3-1:进度检查及成绩评定表目录摘要 (4)1实验内容要求及目的 (5)1.1、实训内容 (5)1.2、实训要求 (5)1.3、实验目的 (5)1.4、设计方案 (5)2设计程序 (6)2.1、1s定时程序框图 (6)2.2、按键编程流程图 (6)3绘制、调试仿真图 (7)3.1 仿真软件简介 (7)3.2 仿真图 (7)3.3 仿真图调试 (7)3.4调试步骤 (8)4、绘制原理图、PCB图 (9)5硬件电路制作 (10)5.1、51单片机 (10)5.2、78M05 (10)5.3、电路板焊接 (10)5.3.1焊接目的 (10)5.3.2焊接步骤 (10)5.3.3焊接的注意事项 (10)5.4、电路板成果 (11)5.5、调试 (11)摘要这是一篇关于用51单片机定时器做秒表的实验报告。
该秒表可显示00.00~59.59秒的时间,进行相应的单片机硬件电路的设计并进行软件编程利用单片机定时器/计数器中断设计秒表,从而实现秒、分的计时。
综合运用所学的《单片机原理与应用》理论知识,通过实践加强对所学知识的理解,具备设计单片机应用系统的能力。
通过本次系统设计加深对单片机掌握定时器、外部中断的设置和编程原理的全面认识复习和掌握。
本系统利用单片机的定时器/计数器定时和记数的原理,通过采用proteus仿真软件来模拟实现。
模拟利用AT89C51单片机、LED数码管以及控件来控制秒表的计数以及计位!其中有四位数码管用来显示数据,显示时间分、秒。
1实验内容要求及目的1.1、实训内容用AT89C51设计一个秒表,并画出仿真图、原理图以及PCB图,完成电子板的焊接和调试。
1.2、实训要求(1)用单片机AT89C51实现。
(2)以1秒为最小单位进行显示。
(3)绘制原理图、PCB图。
(4)绘制仿真图。
(3)秒表量程为00.00-59.59秒,用LED显示。
基于stm32秒表设计参考文献
基于stm32秒表设计参考文献1. "STM32CubeMX User Manual" - STMicroelectronics本手册是STMicroelectronics公司发布的STM32CubeMX软件的用户手册,这是一款用于配置和生成STM32微控制器项目代码的工具。
其中包含了丰富的参考资料和教程,可以帮助开发者快速上手STM32系列微控制器的使用和配置。
2. "Mastering STM32" - Carmine Noviello这是一本关于STM32的全面指南,具有详细的参考和实例,以帮助开发者理解和应用STM32微控制器。
该书对STM32的基本概念和基础知识进行了讲解,并提供了多个实际项目案例,其中包括秒表的设计。
3. Yang, Y., Du, J., Meng, G., & Chen, X. (2012). "Design and implementation of sports stopwatch based on STM32". 2012 IEEE International Conference on Intelligent Control & Information Processing, Dalian, China.这篇论文介绍了一种基于STM32的运动秒表设计的具体实施。
它详细描述了使用STM32微控制器和相关外设实现秒表功能所需的硬件和软件设计,并介绍了采用的算法和方法。
此外,还包括系统性能测试和结果分析,以及对设计性能和稳定性的评估。
4. Fang, J., Yang, Y., & Wang, Q. (2015). "Design of Stopwatch Based on STM32". Procedia Engineering, 137, 54-59.这篇论文描述了一种基于STM32的秒表设计。
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单片机设计一个简单的秒表程序。
秒表计时器
/*1.按下启动键,秒表计时;按下停止键,秒表暂停计时;2.再按启动键,秒表接着计时;再按下停止键,秒表暂停计时;3.再按下停止键,秒表清零;4.清零后能够回显两次记录的秒数;5.完成整体设计,交出完整的课设报告。
*/#include<reg52.h>#include<math.h>#include<stdio.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int#define shuju P0 //LCD1602 P0输出显示数据sbit wela=P2^7; //数码管位选锁存端sbit dula=P2^6; //数码管段选锁存端sbit key1 =P3^2; //启动命令sbit key2 =P3^3; //停止命令sbit key3 =P3^4; //清除键sbit key4 =P3^5; // 空车//********定义变量*****************************uchar flag; //标志位uchar flag1; //标志位uchar flag2; //标志位uchar table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; //码表uchar table1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位码uchar tt; // 计时标量每50ms加1uchar a; // 秒个位uchar b; // 秒十位uchar c; // 分个位uchar d; // 分十位uchar num1;uchar num2;uchar num3;uchar num4;uchar num5;uchar num6;uchar num7;uchar num8;//**********延时函数***************void delayus(uchar t){while(--t);}//**********延时函数***************void delay(uchar t) //大致延时1mS {while(t--){delayus(235);delayus(235);}}//*******秒表计时*******void miaobiao(void){if(tt==2) // 10ms到{tt=0; // 清零a++;if(a==10){a=0;b++;if(b==10){b=0;c++;if(c==10){c=0;d++;}}}}}void display(void){if(flag1==1){//flag1=0;wela=1;shuju=table1[0];wela=0;dula=1;shuju=table2[num1];dula=0;delayus(200);wela=1;shuju=table1[1]; wela=0;dula=1;shuju=table2[num2]; dula=0;delayus(200);wela=1;shuju=table1[2]; wela=0;dula=1;shuju=0x40;dula=0;delayus(200);wela=1;shuju=table1[3]; wela=0;dula=1;shuju=table2[num3]; dula=0;delayus(200);wela=1;shuju=table1[4]; wela=0;dula=1;shuju=table2[num4]; dula=0;delayus(200);}else if(flag1==2) {//flag2=0;wela=1; shuju=table1[0]; wela=0;dula=1;shuju=table2[num5]; dula=0;delayus(200);wela=1;shuju=table1[1]; wela=0;dula=1;shuju=table2[num6]; dula=0;delayus(200);wela=1;shuju=table1[2]; wela=0;dula=1;shuju=0x40;dula=0;delayus(200);wela=1;shuju=table1[3]; wela=0;dula=1;shuju=table2[num7]; dula=0;delayus(200);wela=1;shuju=table1[4]; wela=0;dula=1;shuju=table2[num8]; dula=0;delayus(200);}else{wela=1;shuju=table1[0];wela=0;dula=1;shuju=table2[a];dula=0;delayus(200);wela=1;shuju=table1[1];wela=0;dula=1;shuju=table2[b];dula=0;delayus(200);wela=1;shuju=table1[2];wela=0;dula=1;shuju=0x40;dula=0;delayus(200);wela=1;shuju=table1[3];wela=0;dula=1;shuju=table2[c];dula=0;delayus(200);wela=1;shuju=table1[4];wela=0;dula=1;shuju=table2[d];dula=0;delayus(200);}}//*******定时器初始化*******void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,TH0=(65535-5000)/256;TL0=(65535-5000)%256;EA=1; //总中断打开ET0=1; //定时器中断打开//TR0=1; //定时器开关打开}//*******独立按键检测********************** void key(void){if(key1==0){delay(15);if(key1==0) //按键消抖{TR0=1; //打开定时器//flag=0; //标志位设置while(key1==0);}}if(key2==0){delay(15);if(key2==0) //按键消抖{TR0=0; //打开定时器flag++;//flag=0; //标志位设置while(key2==0);if(flag==1){num1=a;num2=b;num3=c;num4=d;}if(flag==2){num5=a;num6=b;num7=c;num8=d;}if(flag>=3){flag=0;a=0;b=0;c=0;d=0;}}}if(key3==0)delay(15);if(key3==0) //按键消抖{TR0=0; //打开定时器flag1=1;//display1();//flag=0; //标志位设置while(key3==0);}}if(key4==0){delay(15);if(key4==0) //按键消抖{TR0=0; //打开定时器flag1=2;while(key4==0);}}}//*************主程序************************** void main(){a=0; //各参数初始化b=0;c=0;d=0;flag=0;flag1=0;flag2=0;dula=0;wela=0;Init_Timer0();while(1){key();miaobiao();display();}//******************定时器中断**************** void time0() interrupt 1{TH0=(65535-5000)/256;TL0=(65535-5000)%256;tt++;}。
51单片机秒表计时(protues)
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的字样。
用一个开关控制数码管的启动与停止,另外加上一个复位电路,使其能正常复位。
99秒倒计时+按键控制详解
江苏建筑职业技术学院课程设计报告课程名称:单片机设计与实训设计题目:秒计时系别:信息电子工程学院班级:电子10-1学号:1050213127姓名:周中楠指导教师: 刘天飞、刘燎原摘要:本系统讨论了简单的倒计时器的设计与制作,最大倒计时时间是99秒,最小单位精确到秒。
是利用定时器和计数器的原理将倒计时过程显示在LED数码管上。
此系统是基于AT89S52单片机控制,外加数码管显示倒计时时间,并且利用按键来进行倒计时时间的设定。
当倒计时时间倒计时为0时,蜂鸣器就会发出报警声。
首先我们先做的是99秒倒计时至0时,在设计的Proteus中进行仿真,数码管显示倒计时,蜂鸣器就会发出声音。
其中包括有数码管延时程序,中断定时程序。
其次我们设置键盘扫描程序,设置键盘的按键有13,14,15键分别为暂停/开始、设置、重新开始。
根据题目要求编写程序,一步步的编写程序。
定义13按键用count1来控制是暂停还是开始;14按键在暂停的情况下按下(即falg_zt=1时)才可以设置时间;15按键按下开始重新开始。
然后分别在采用软件程序进行译码,在Proteus中仿真实现功能要求。
关键词:单片机(AT89S52);LED数码管显示器;keil C;proteus仿真软件;晶体振荡器目录第1节前言 .................................................. 错误!未定义书签。
第2节方案选择 ................................................................................ 第3节硬件电路 . (12)第4节系统的软件设计 (8)第5节软硬件联调.................................................. (10)第6节总结………………………………………………………第7节致谢………………………………………………………参考文献附录第1节前言在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。
51单片机秒表定时器
sbit b138 = P2^3; //定义译码器输入端B 在 P2.3 管脚上
sbit c138 = P2^4; //定义译码器输入端C 在 P2.4 管脚上
sbit scl=P2^0; //24C02串行时钟
sda=write_data&0x80;
scl=1;
nop5;scl=0;nop5;
write_data<<=1;
}
sda=1; //释放sda,等待24c02将其拉高确定写入
scl=1; //在scl上升沿中检测sda
nop5;
ack=sda;
scl=0; //完成写操作的第九个时钟周期
switch(site)
{
case 1: numcode=0;a138=1;b138=1;c138=1;break;
// case 2: numcode=0;a138=0;b138=1;c138=1;break;
case 3: numcode=0;a138=1;b138=0;c138=1;break;
while(temp!=0xff)
{
temp=alonekeyboard;
switch(temp)
{
case 0x7f:alonekeynum=8;break;
case 0xbf:alonekeynum=7;break;
case 0xdf:alonekeynum=6;break;
}
}
}
return alonekeynum;
}
void main ()
百度多功能秒表的设计
多功能秒表的设计摘要本设计是通过使用单片机80C51来设计一个单片机控制的秒表系统。
利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计计时器。
将软、硬件有机地结合起来,使得系统能够正确地进行加、减(倒)计时,数码管能够正确地显示时间。
在设计中定时器1用做1秒定时,从而实现每秒加1。
定时器0用做10毫秒定时,从而实现每10毫秒快加1。
中断0用做暂停键使用,中断1用做停止键使用。
该秒表可以每秒加一,每秒减一,快加1,快减1,独立存储四个数据并能进行查询。
在硬件设计中由于所需按键比较少,所以采用独立连接式电路,使用P0和P2口直接对两个数码管发送数据,在使用P0口时,由于输出级为漏级开路电路,若要驱动NMOS或其他拉电流负载时,引脚上应外接上拉电阻。
用软件法消除来抖动,LCD数码管采用共阴极的接法。
复位电路采用上电或开关复位电路,在电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
时钟信号采用内部时钟法,在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
目录1 概述 (2)1.1 设计意义 (2)1.2 设计任务 (2)1.3主要功能 (2)2 系统总体设计及硬件设计 (3)2.1单片机的设计 (3)2.2 电源 (3)2.3 钟及复位电路 (3)2.4 显示及键盘 (5)3 软件设计 (6)3.1主程序 (6)3.2设置子程序: (9)3.3加减1子程序 (11)3.4 快加减子程序 (14)4 PROTEUS软件仿真 (17)5 课程设计体会 (18)参考文献 (18)附1 源程序代码 (20)附2 秒表系统电气图 (26)1概述1.1 设计意义1、通过设计使学生进一步熟悉和掌握单片机的内部结构和工作原理,了解单片机应用系统设计的基本方法和步骤;2、通过利用MCS-51单片机,理解单片机在自动化仪表中的作用以及掌握单片机的编程方法;3、通过设计一个简单的计算器数字输入及显示模拟系统,掌握单片机仿真软件Proteus的使用方法;4、掌握键盘和显示器在的单片机控制系统中的应用。
[单片机课设]秒表时钟计时器的设计
单片机原理课程设计——秒表时钟计时器的设计专业:电气工程及其自动化方向:电力系统*****学号:************指导老师:***目录第1章方案论证 (3)第2章硬件设计 (5)2.1秒表/时钟计时器的总体设计 (5)2.2 AT89C52单片机最小系统 (6)2.3 74LS244芯片说明 (8)2.4 LED显示器的显示方法及其与单片机的接口 (8)2.5电源电路的设计 (10)第3章软件设计 (11)3.1主程序 (11)3.2显示子程序 (11)3.3定时器T0中断服务程序 (12)3.4 T1中断服务程序 (12)3.5调时功能程序 (13)3.6整点响程序 (13)3.7时钟/秒表功能程序 (13)3.8 程序清单 (13)第4章设计总结 (23)第1章方案论证现今的计时器通常只能通过启/停按键实现断点计时的功能,即通过启/停按键来记录一段时间。
这种计时器查看的时间只能为计时结束时刻。
实际的应用中往往需要在不影响正常计时的基础上,能查看记录过程中的某些点的时间。
本课设即针对此问题,设计了一种能通过按键方式查看记录过程中任一时刻值的计时器。
这种计时器在查看中间值时不会影响整个记录过程,并且能把相应数据送入存储模块及显示模块,以便查看。
本系统采用AT89C52单片机作控制器,LED数码管,实现显示时、分、秒,以24小时计时方式。
为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。
由于静态显示法需要数据锁存器等硬件,结构较为复杂,考虑时钟显示只有六位,且系统没有其他复杂的处理任务,所以采用动态扫描法实现LED的显示。
单片机采用AT89C52系列,有足够的空余硬件资源实现其它的扩充功能。
秒表/时钟计时器的总体设计框图如下图所示。
图1.1 系统总体设计框图系统主要实现如下功能:1.时钟功能对于时钟功能,需要在数码管上显示小时、分钟和秒钟,因此,可以在内部存储空间分别定义它们的显示缓存空间,来存放小时、分钟和秒钟的BCD码,各2个字节。
单片机00.0~59.9秒表设计
目录1实验设计的目的和任务1.1 单片机秒表实验的概述1.2系统设计思路及描述1.3 系统设计任务和要求2软件与硬件设计2.1系统硬件方案设计2.2软件方案设计3 程序流程及实验效果3.1源程序及说明3.2原理图分析3.3实验效果1. 实验设计的目的和任务1.1单片机秒表实验的概述一、实验题目秒表系统设计——用STC89C52RC设计一个3位LED数码显示“秒表”,显示时间为00.0~59.9秒,每毫秒自动加一,每十毫秒自动加一秒。
二、增加功能增加一个“复位00.0”按键(即清零),一个“暂停”和“开始”按键,一个“复位60.0”按键(用来60秒倒计时),一个倒计时“逐渐自减”按键。
三,实验难点单片机电子秒表需要解决三个主要问题,一是有关单片机定时器(一个控制顺序计时,一个控制倒计时)的使用;二是如何实现LED的动态扫描显示;三是如何对键盘输入进行编程。
四、实验内容提要本实验利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED 数码管以及实验板上的按键来设计计时器。
将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。
其中本实验设计了四个开关按键:其中key2按键按下去时开始计时,即秒表开始键(同时也用作暂停键),key1按键按下去时数码管清零,复位为“00.0”,key3按键按下去时数码管复位为“60.0”(用于倒计时),key4按键按下去则是数码管开始“逐渐自减”倒计时。
实验的意义1)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。
2)掌握定时器、外部中断的设置和编程原理。
3)通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。
4)该实验通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零,并同时可以用数码管显示,在现实生活中应用广泛,具有现实意义实验仪器集成电路芯片8051,七段数码管,51hei单片机开发板,MCS-51系列单片机微机仿真实验系统中的软件(Keil uvision2)1.2系统设计思路及描述该实验要求进行计时并在数码管上显示时间,则可利用MCS-51系列单片机的芯片AT89C52的P3.4,P3.5,P3.6,P3.7作为按键的入口;定时器T0作为每0.1秒减一的定时器;定时器T1作为每0.1秒加一的定时器。
秒表计时器
COUNT EQU 51H ;定义小数点第一位,各位为COUNT+1,以此类推KEY_ZERO EQU P3.7 ;定义清零键KEY_B_S EQU P3.6 ;定义开始和暂停键ORG 0000HAJMP MAINORG 000BHLJMP TIMEORG 0100HMAIN:MOV SP, #60H ;初始化堆栈MOV TMOD,#01HMOV TH0,#03CH ;初始化定时器0的溢出时间为50MsMOV TL0,#0B0HCLR F0 ;KEY_B_S没按MOV R0,#2MOV COUNT, #00HMOV COUNT+1,#00HMOV COUNT+2,#00HMOV COUNT+3,#00HSETB EA ;启动全局中断SETB ET0 ;启动定时器MAIN1: LCALL DISPJB KEY_ZERO,L1ACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPJNB KEY_ZERO,$AJMP ZEROL1: JB KEY_B_S,EXITACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPACALL DISPJNB KEY_B_S,$AJMP B_SZERO: CLR TR0 ;定时器清零MOV TH0,#03CHMOV TL0,#0B0HMOV COUNT,#00HMOV COUNT+1,#00HMOV COUNT+2,#00HMOV COUNT+3,#00HAJMP EXITB_S: JB F0,STOP ;第一次按,启动SETB TR0SETB F0AJMP EXITSTOP: CLR TR0 ;第二次按,停止MOV TH0,#03CHMOV TL0,#0B0HCLR F0EXIT: AJMP MAIN1TIME: CLR ET0 ;关闭定中断CLR TR0 ;关闭定时器MOV TH0,#03CHMOV TL0,#0B0HDJNZ R0,TIME2MOV R0,#2INC COUNTMOV A,COUNTCJNE A,#10,TIME2 ;十分位满10进1 CPL P1.0INC COUNT+1MOV COUNT,#00HMOV A,COUNT+1CJNE A,#10,TIME2 ;个位满10进1 CLR P1.1INC COUNT+2MOV COUNT+1,#00HMOV A,COUNT+2CJNE A,#10,TIME2;十位满10进1 INC COUNT+3MOV COUNT+2,#00HMOV A,COUNT+3CJNE A,#10,TIME2;百位满10进1MOV COUNT+3,#00HTIME2: SETB TR0SETB ET0RETIDISP: SETB P2.6 ;开通段选CLR P2.7MOV DPTR,#TAB1MOV A,COUNTMOVC A,@A+DPTRMOV P0,ASETB P2.7 ;点亮十分位CLR P2.6MOV R6,#00HMOV DPTR,#TAB2MOV A,R6MOVC A,@A+DPTRMOV P0,ALCALL DEL2msINC R6;**********************************;************************************** SETB P2.6 ;开通段选CLR P2.7MOV DPTR,#TAB1MOV A,COUNT+1MOVC A,@A+DPTRMOV P0,ASETB P0.7SETB P2.7 ;点亮个位CLR P2.6MOV DPTR,#TAB2MOV A,R6MOVC A,@A+DPTRMOV P0,ALCALL DEL2msINC R6;**********************************;***********************************SETB P2.6 ;开通段选CLR P2.7MOV DPTR,#TAB1MOV A,COUNT+2MOVC A,@A+DPTRMOV P0,ASETB P2.7 ;点亮十位CLR P2.6MOV DPTR,#TAB2MOV A,R6MOVC A,@A+DPTRMOV P0,ALCALL DEL2msINC R6;********************************************** ;*********************************************** SETB P2.6 ;开通段选CLR P2.7MOV DPTR,#TAB1MOV A,COUNT+3MOVC A,@A+DPTRMOV P0,ASETB P2.7 ;点亮百位CLR P2.6MOV DPTR,#TAB2MOV A,R6MOVC A,@A+DPTRMOV P0,ALCALL DEL2msMOV R6,#00HRET;******************************;*********************************; 延时程序DEL2ms: MOV R3,#1LOOP: MOV R4,#10LOOP1: MOV R5,#100DJNZ R5,$DJNZ R4,LOOP1DJNZ R3,LOOPRETOPEN_LED:TAB1: DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH ;0 1 2 3 4 5 6 7 8 9TAB2: DB 11011111B,11101111B,11110111B,11111011B;十分位;个位;十位;百位END。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
& INT1按键中断INT0#
和T0中断的综合应用
‐简易秒表计时器
范例1:汇编源代码
范例2:C51源代码
P7 EQU 0F8H ORG 0100H
#60H P6 EQU 0E8H
D1 EQU 0FEH //数码管个位EQU 0FDH MAIN: MOV SP ,#60H //设置堆栈
MOV P2,#0FFH //关P2口LED MOV TMOD,#00H D2 //十位D3 EQU 0FBH // 百位
VARX DATA 30H //计数变量DATA 31H MOV TH0,#4BH
MOV TL0,#0FDH //设置T0MOV R7,#20MOV VARX,#0 //置计数变量0DIG1 //BCD 个位DIG2 DATA 32H //BCD 十位DIG3 DATA 33H //BCD ,SETB ET0SETB EX0SETB IT0//百位ORG 0000H LJMP MAIN SETB EX1SETB IT1
SETB EA //允许相关中断
ORG 0003H
LJMP KY1INT //KY1中断ORG 000BH
LJMP T0INT //T0中断ORG 0013H
KY2INT //KY2LJMP 中断
CONV:
MOV A,VARX //读计数变量MOV A,DIG2 //读十位BCD MOV B,#100DIV AB DIG3A MOVC A,@A+DPTR MOV P7,A P6#D2//MOV DIG3,A MOV A,B MOV B,#10MOV P6,#D2 查表送显示ACALL DELAY //扫描延时A,DIG3//DIV AB
MOV DIG2,A DIG1B MOV 读百位BCD MOVC A,@A+DPTR MOV P7,A
MOV DIG1,B //转换为3位BCD DISP: MOV A,DIG1 //读个位BCD
MOV DPTR,#SEGTBL MOV P6,#D3 //查表送显示ACALL DELAY
CONV //MOVC A,@A+DPTR MOV P7,A
P6,#D1//LJMP 返回读取VARX
MOV 查表送显示
ACALL DELAY //扫描延时
•//软件延时程序段•R1#100T0INT: DJNZ R7,BACK
R7#20DELAY: MOV R1,#100•DL1: MOV R2,#10R2DL2
MOV R7,#20CPL P2.0INC VARX •DL2: DJNZ R2,DL2•DJNZ R1,DL1BACK: RETI
//•RET
KY1INT:
共阳型数码管字符//0‐9的的段码表
ORG 0200H
0C0H 0F9H 0A4H 0B0H
JNB TR0,RUNT0 //若未启动TR0,则启动计数
SEGTBL: DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H,80H,90H
CLR TR0 //否则停止计数RETI
RUNT0: SETB TR0
RETI
KY2INT: MOV VARX,#0 //将VARX 清零
RETI
范例2:C51的程序实现
•#include "stc15.h"
•#include intrins.h
"intrins h"
•typedef unsigned char u8;
•u8 varx;;
•#define D1 0xFE
•#define D2 0xFD
•#define D3 0xFB
•u8 dig1,dig2,dig3;
•u8 count;
8t
•void dly20ms();
•const u8 code Seg8[10] =
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};•u8 *ptr;
•void main()
•{
•P2 = 0xFF;•varx= 0;
•ptr= Seg8;•count = 20;•TMOD = 0x00;
TH0 19453/256;•=
•TL0 = 19453%256;•ET0 = 1;;
•EX0 = 1;
•IT0 = 1;;
•EX1 = 1;
•IT1 = 1;
•EA = 1;
•while(1)
•{
•dig3 = varx/100;•dig2 = (varx%100)/10;•dig1 = (varx%100)%10;•P7 = *(ptr+dig1);
•P6 = D1;
•dly20ms();
•P7 = *(ptr+dig2);
•P6 = D2;
•dly20ms();
•=*(ptr+dig3);
P7 (ptr dig3);
•P6 = D3;
•dly20ms();
•}
•
•}
•void ky1int() interrupt 0•{
•if(TR0 == 0 ) TR0 = 1;•else TR0 =0;
•}
•void ky2int() interrupt 2•0;}
{ varx=
•void T0int() interrupt 1•{
()
•if(count‐‐!=0) return;•else
•{
•P20 ^= 1;
•count = 20;•varx++;
•}
•}
•void dly20ms()
•{ int i;
•i= 2000;;
•while(i‐‐!=0) _nop_();
•}
如果不了解单片机内部存储器结构和硬件知识,缺如果不了解单片机内部存储器结构和硬件知识缺乏对程序执行流程和中断原理的理解,想完整编写这样一段C程序实现秒表计时器功能,也并不容易。
程序实现秒表计时器功能也并不容易这就是为什么一开始要花些时间和力气深入学习单片机内部硬件原理的原因。
片机内部硬件原理的原因。