导航:首页 > 操作系统 > 单片机秒表的实验目的与要求

单片机秒表的实验目的与要求

发布时间:2024-08-24 13:23:00

单片机秒表设计

用AT89C51设计一个2位的LED数码显示作为“秒表”,这应该是一个仿真题,可用两位一体的共阴数码管,用定时器T0定时,得到1秒计时。

Ⅱ 用51单片机设计一个秒表。主要要求: 1.用单片机的定时/计数器实现一个

KEYVALEQU 30H
DATEQU 33H
SCANLEDEQU 39H
CLKEQU 77H
SECEQU 78H
SEC1EQU 79H
SEC2EQU 7AH
DOTBIT 00H
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP EXTINT0
ORG 000BH
LJMP T0ISR;50ms定时
ORG 001BH
LJMP T1ISR;扫描显示
ORG 0030H
MAIN:
MOV SP,#5FH
MOV TMOD,#11H
MOV TH0,#03CH
MOV TL0,#0B0H
MOV TH1,#0ECH
MOV TL1,#078H
MOV KEYVAL,#2
MOV 33H,#10H
MOV 34H,#10H
MOV 35H,#10H
MOV 36H,#10H
MOV CLK,#0
SETB IT0
SETB EX0
CLR TR0
CLR ET0
MOV R2,#0
SETB TR1
SETB ET1
SETB EA
LOOP:
MOV A,KEYVAL
LOOP1:
JNZ LOOP2;启动
SETB TR0
SETB ET0
SJMP LOOP
LOOP2:
DEC A
JNZ LOOP3;暂停
CLR TR0
CLR ET0
SJMP LOOP
LOOP3:
DEC A
JNZ LOOP;清零
MOV 36H,#0
MOV 35H,#0
MOV 34H,#0
MOV 33H,#0
SJMP LOOP
EXTINT0:
PUSH ACC
INC KEYVAL
MOV A,KEYVAL
CJNE A,#3,EXT00
EXT00:
JC EXT01
MOV KEYVAL,#0
EXT01:
POP ACC
RETI
T0ISR:
PUSH ACC
CLR TR0
MOV TH0,#3CH
MOV TL0,#0B0H
SETB TR0
INC CLK
MOV A,CLK
CJNE A,#2,T0ISRE
MOV CLK,#0
INC 36H
MOV A,36H
CJNE A,#10,T0ISRE
MOV 36H,#0
INC 35H
MOV A,35H
CJNE A,#10,T0ISRE
MOV 35H,#0
INC 34H
MOV A,34H
CJNE A,#6,T0ISRE
MOV 34H,#0
INC 33H
MOV A,33H
CJNE A,#10,T0ISRE
MOV 33H,#0
T0ISRE:
POP ACC
RETI
T1ISR:
PUSH ACC
CLR TR1
MOV TH1,#0ECH
MOV TL1,#78H
SETB TR1
MOV DPTR,#LEDTAB
T100:
MOV R0,#DAT
MOV A,SCANLED
ADD A,R0
MOV R0,A
MOV A,SCANLED
JNZ T101
MOV P2,#01H
SETB DOT
SJMP T1DIS
T101:
DEC A
JNZ T102
MOV P2,#02H
CLR DOT
SJMP T1DIS
T102:
DEC A
JNZ T103
MOV P2,#04H
SETB DOT
SJMP T1DIS
T103:
MOV P2,#08H
CLR DOT
T1DIS:
MOV A,@R0
MOVC A,@A+DPTR
JNB DOT,T1DIS1
ORL A,#01H
T1DIS1:
CPL A
MOV P0,A
INC SCANLED
MOV A,SCANLED
CJNE A,#4,T1END
MOV SCANLED,#0
T1END:
POP ACC
RETI
LEDTAB:DB 0FCH;"0"00H
DB 60H;"1"01H
DB 0DAH;"2"02H
DB 0F2H;"3"03H
DB 66H;"4"04H
DB 0B6H;"5"05H
DB 0BEH;"6"06H
DB 0E0H;"7"07H
DB 0FEH;"8"08H
DB 0F6H;"9"09H
DB 0EEH;"A"0AH
DB 3EH;"B"0BH
DB 9CH;"C"0CH
DB 7AH;"D"0DH
DB 9EH;"E"0EH
DB 8EH;"F"0FH
DB 00H;" "10H
END

Ⅲ 利用51单片机设计一个秒表 (一定要按要求做到0.01秒)

最低位,是0.01s 变化一次,一秒钟,变化 100 次。

这么快,人的眼睛,分辨不出来。

只能看到一个 8。


停止时,才能看到稳定的数字。

程序如下:

#include<reg52.h>

sbit P3_5 =P3^5;

unsigned char counet, m[4] = {0,0,0,0};

void display()

{

unsigned char code Tab[] = {

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned char code Bit[] = {8, 4, 2, 1};

unsigned char i, j;

for (i = 0; i < 4; i++) {

P0 = Tab[m[i]]; if (i == 2) P0 &= 127;

P2 = Bit[i]; for(; j > 0; j++); P2 = 0;

}

}

void wait_key()

{

while( P3_5) display();

while(!P3_5) display();

}

main()

{

TMOD = 0x02;

IE = 0x82;

while(1) {

wait_key(); TR0 = 1; TH0 = TL0 = 6;

wait_key(); TR0 = 0;

wait_key(); m[0] = m[1] = m[2] = m[3] = 0;

}

}

void time0() interrupt 1

{

counet++;

counet %= 40;

if(!counet) {

m[0]++; m[0] %= 10;

if(!m[0]) {

m[1]++; m[1] %= 10;

if(!m[1]) {

m[2]++; m[2] %= 10;

if(!m[2]) {

m[3]++; m[3] %= 10;

}}}}

}

Ⅳ 课程设计数字秒表设计 求高手解答。

一 设计说明书
1.设计任务
(1) 进行设计方案的比较,并选定设计方案;
(2) 完成单元电路的设计和主要元器件说明;
(3) 安装各单元电路,要求布线整齐、美观;
(4) 写出课程设计报告文档。
2.设计要求
(1) 设计并制作符合要求的电子秒表;
(2) 秒表由6 位七段LED显着器显示,其中两位显示分,四位显示
秒,其中显示的分辩率为0.01 秒;
(3)计时最大值为99 分59点99秒;
(4)计时误差不得超过0.01秒;
(5)具有自动清零、启动计时、暂停计时及继续计时等控制功能;
(6) 控制操作按键不得超过2个。
3.提高部分
3.1 安装自己设计的电路
(1)检查元器件
(2)对电路进行组装:按照自己设计的电路,在面包板上插接元器件或在通用板上焊接。焊接完毕后,应对照电路图仔细检查,看是否有错接、少接、虚焊的现象。
3.2. 通电调式
(1)通电测试:对安装完成的电路板的参数及工作状态进行测量,以便提供调整电路的依据。
(2)通电调试:经过反复的调整和测量,使电路的性能达到要求。
3.3 书写调试报告
课程设计说明书书写格式
参照“课程设计说明书书写格式”文件。
4.参考资料
1、《数字电子技术导论》西安交通大学 . 何金茂主编
2、《数字电子技术基础》高等教育出版社. 康华光主编
3、《数字电子技术》 高等教育出版社。 杨志忠主编

二.方案论证

2.1.方案的选择
通过对设计要求的分析,应用相关的数字电子电路方面的知识画出原理图,检查无误后,将原理图在EWB中仿真,验证通过无误后,可以考虑使用何种方案来实现设计电路。我们可以通过对照原理图在万能板上焊接来实现所设计的电路;也可以在PROTEL中画出原理图并布好线通过做PCB板来实现所设计的电路;还可以通过在面包板上插线来实现设计的电路。因在商店只买到万能板,所以我们采用万能板接线。

2.2电路总体功能、结构的分析
本电路的目标为设计一个数字式秒表。如图2.1所示,数字式秒表电路系统由主体电路和扩展电路两部分组成。其中主体电路完成计数功能,控制电路完成控制的扩展功能。通过所设计电路将实现具有清零、启动、暂停、继续等控制功能的计时数字式秒表。
根据电路所需要达到的要求,可以将电路的总体结构框图描述(如图2.2):

图2.2 多功能数字式秒表系统的组成框图
设计时各部分所用的器件名称如下:
时钟信号:由555组成的多谐振荡器。
计数器:74LS190
锁存器:CT74LS373
译码器:CT74LS47
显示器:BS201

三. 555组成的多谐振荡器简介
3.1 555与RC组成多谐振荡器

由门电路组成的多谐振荡器虽具有多种电路的形式,但它们无一例外地具有如下的共同的特点。首先,电路中含有开关器件,如门电路、电压比较器、BJT等。这些器件主要用作产生高、低电平;其次,具有反馈网络,将输出电压恰当地反馈给开关器件,使之改变输出状态;另外,还要有延迟环节,利用RC电路的充、放电特性可实现延时,以获得所需要的振荡频率。在许多实用电路中,反馈网络兼有延时的作用。图3.1.1是一种最简型多谐振荡器。
3.2振荡周期的计算
在振荡过程中,电路状态的转换主要取决于电容的充、放电时间,而转换时刻则取决于 的数值。根据以上分析所得电路在状态转换时 的几个特征值,可以计算出周期T

四 芯片简介
4.1 74LS190
74LS190是一种较为典型的集成同步十进制加/减法计数器。图中 ̄LD为异步
置数控制端, ̄CT为计数控制端,D0-D3为并行数据输入端,Q0-Q3为输出端, ̄U/D为加减计数控制端。CO/BO为进位/借位输出端。 ̄(RC)为行波时钟输出端。CT74LS190没有专门的置0输入端,但可以借助于数据D3D2D1D0=0000时,实现计数器的置0功能。
74LS190的引脚图、功能表如下图所示。

4.1.1 74LS190的引脚图

表4.1.1 74LS190的功能表

输入 输出
CP R0(1) R0(2) S9(1) S9(2) QA QB QC QD
X 1 1 0 X 0 0 0 0
1 1 X 0 0 0 0 0
X X 1 1 1 0 0 1

↓ X 0 X 0
计数
0 X 0 X
0 X X 0
X 0 0 X
(1)异步置数功能:当 ̄LD=0时,不论有无脉冲CP和其他信号输入,并行输入的数
据d3-d0被置入计数器相应的触发器中,这时Q3Q2Q1Q0=d3d2d1d0.
(2) 计数功能: 取 ̄CT=0, ̄LD=1。当 ̄U/D=0时,在CP脉冲上升沿作用下,进行
十进制加法计数。当 ̄U/D=1时,在CP脉冲上升沿作用下,进行减法计数。
(3) 保持功能:当 ̄CT= ̄LD=1时,计数器保持原来的状态不变。

4.2 CT74373
锁存器的原理图如下图

图4.2.1锁存器的原理图

C是锁存器信号的输入端,D是数据输入端Q和Qo是数据互补输出端。当C=0时,G2被封锁,输出0,G3被封锁输出1。G5输出Q=D,Qo=Do(D和Do是数据互补)。当C由0变1时,分两种情况讨论:一是当C由0变1时,Qo=1,Q=0,G2被封锁,由于G3两个输入都为1,其输出为0。G4门也被封锁。G2门的输出Qo=1。原来的状态不改变。其二是当C由0变1时,Qo=0,Q=1。G2门的两输入均为1,则输出Qo=0,使Q=1。D无论是0还是1也不改变原来的状态。综合上述分析,可看出:C=0时,Q=D,电路不锁存数据,相当于缓冲器。当C=1时,D不影响电路状态。C由0变1时将数据D锁定并保持。直到C由1变回0。
图4.2.2 CT74LS373的引脚图
CT74LS373是一种典型的8位锁存器,OC是三态输出控制,低电平有效。即此端加低电平时输入数据能达到输出端,加高电平时8个输出均呈高阻态,C是锁存器的锁存控制输入端。C下降沿锁存数据并低电平保持,高电不锁存,输入数据直达输出端。每个锁存器只有一个同相输出没有互补输出。符号中输出输入端引线上所标带的数字是该端在芯片上的引脚号。
表4.2.1 CT74373功能表:
输入 输出
OC C D Q
L H H H
L H L L
L L X Qo
H X X Z

表中第1、2行表示在OC为低电平、C为高电平时,Q随D变化,第三行表示OC和C都为低电平Q保持原状态QO不变。第四行表示OC为高电平时输出Q为高组态Z。

4.3 74LS47

图4.3.1 74LS47引脚
1脚:二进制的置位输入端;2脚:使能端;
3脚:五进制置位端输入;4脚:输出
5脚:输出;6脚:使能端;7脚:接地端
8脚:输出端;9脚:输出端;10脚:二进制时钟信号;11脚:五进制时钟信号;12脚:二进制复位输入;13脚:五进制复位输入;14脚:接电源

表4.3.1 74LS47功能表

4.4 显示译码器
现在的许多电器设备上都有显示十进制字符的字符显示器,以直观的显示出电器设备的运行数据。目前广泛使用的字符显示器是七段字符显示器,或称七段数码管。常见的七段数码管有液晶显示数码管和半导体数码管两种。
液晶显示数码管是利用液晶材料的透明度或者显示的颜色受外加电场控制的特点制成的,简称LCD。
半导体数码管是由七段发光二极管(Light Emitting Diode)组成,简称LED。图4.4.1是LED的引脚及其等效电路。

图4.4.1 (a)LED的引脚及其等效电路。
LED产品的种类繁多,有图4.4.1(b)、(c)所示的共阴极电路,还有共阳极电路,常用的数码显示器有BS201,BS202等。

要驱动LED正常的显示十进制数的十个字符,LED前面必须接一个显示译码器。
显示译码器可实现的逻辑功能是:将输入的8421BCD码转化成驱动LED发光的高、低电平信号,驱动LED显示出不同的十进制数字符,下面来讨论显示译码器的组成。
因显示译码器可以驱动LED显示出0~9这十个数字字符,十个数字字符对应十种高低电平的组合状态,要描述这十种高、低电平的组合状态必须用4位二进制数,根据LED发光的特点可得描述显示译码器逻辑功能的真值表如表4.4.1所示。
表4.4.1 显示译码器逻辑功能真值表

4.4.2七段数字显示器发光段组
4.5 四2输入与非门74LS00

图4.5.1 74LS00引脚图
上图中1、2、3组成一个与非门,其中1、2是输入,3为输出。4、5、6组成一个与非门,其中4、5是输入,6为输出。8、9、10组成一个与非门,其中9、10是输入,8为输出。11、12、13组成一个与非门,其中12、13是输入,11为输出。

4.6 四二输入与门74LS08
五设计原理图
一百进制

接线时按照原理图的脚将各个芯片连接,连接 时小心短路。

二十四进制

六.安装工艺
6.1 安装工具
焊烙铁 1个,松香 1盒,焊锡 1卷,剥线钳 1个, 尖嘴钳 1个, 电工刀 1个, 数字万用表 1个, 镊子 1个。
6.2. 安装具体步骤
⑴ 首先要弄清万能板的结构原理,分清各插空是否是等位点;
⑵ 其次合理安排集成块和元器件的位置,尽可能的保持在同一条直线上。
⑶ 注意导线的剖削,剖削导线绝缘层,要求剖削后的芯线长度必须适应连接需要,不应过长或过短,且不应损伤芯线。为了美观剖削导线时不用火烧,用剥线钳或电工刀剖削。具体操作方法如下:按连接所需要长度,用钳头刀口轻切绝缘层,用左手捏紧导线,右手适当用力,即可使端部的绝缘层脱离芯线,用电工刀时,刀口对导线成45度角切入塑料绝缘层。
⑷ 导线的布置,布线要注意整齐不交叉。要求导线竖的要直、横要平,尽量减少悬线的存在。这样便于调整与测试工作的顺利进行。布线具体方法步骤如下:为了最大可能避免错误的出现,应按元件的排列顺序依次布线,同一元件可按管脚的顺序依次布线。
6.3. 安装注意事项
(1) 安装应接触良好,保证被安装元件间能稳定可靠地通过一定的电流。
(2) 应避免元器件损坏的发生。插拔元器件时候要垂直插拔以免造成不必要的机械损坏。
(3) 安装时必须采用绝缘良好的绝缘导线,连线的时候要取好元件与元件的距离。连接的时候线和线之间的交叉尽量的少。

7.调试与测试
7.1调试前的检测
电子安装完毕,通常不宜急于通电,先要认真检查一下。检查内容包括:
(1)连线是否正确
检测的方法通常有两种方法:
a. 根据电路图连线,按元件的排列顺序依次检查
这种方法的特点是,按一定顺序一一检查安装好的线路,同一元件按管脚的顺序依次检察。由此,可比效容易查出错线和少掉的线。
b.按照实际线路来对照原理图电路进行查线
这是一种以元件为中心进行查线的方法。把每个元件引脚的连线一次查清,检查每个去处在电路图上是否存在,这种方法不但可以查出错线和少掉的线,还容易查出多线。
为了防止出错,对于已查过的线,应在电路图上做出标记,最好用指针式万用表“欧姆1”档,或用数字万用表的“二极管”档的蜂鸣器来测量元器件引脚,这样可以同时发现接触不良的地方。
(2)元器件的安装情况
检查元器件引脚之间有无短路;连接处有无接触不良;二极管的极性和集成元件的引脚是否连接有误。
(3)电源供电,信号源连接是否正确。
(4)电源端对地是否有短路的现象。
注:在通电前,断开一根电源线,用万用表检查电源端对地是否存在短路。若电路经过上述检查,并确认无误后,就可以转入调试。
7.2通电观察
把经过准确测量的电源接入电路。观察有无异常现象,包括有无冒烟,是否有异味, 手摸器件是否发烫,电源是否有短路现象等。如果出现异常,应立即断电源,待排除故障后才能再通电。然后测量各路总电压和各器件的引脚的电源电压,以保证元器件正常工作。
7.3调试中注意事项
调试结果是否正确,很大程度受测量正确与否和测量精度的影响。为了保证调试的效果,必须减小测量误差,提高测量精度。为此,需注意以下几点:
(1) 调试前先熟悉各种仪器的使用方法,并仔细加以检查,以避免由于使用仪器不当,或仪器的性能达不到要求,而造成测量结果不准,以至做出错误的判断。
(2) 测量仪器的地线应于被测量仪器的地线连在一起,并形成系统的参考地电位,这样才能保证测量结果的准确性。
(3) 要正确选择测量点和测量方法。
(4) 调试过程中自始至终要有严谨的科学作风,决不可急于求成。在调试过程中,不但要认真观察测量,还要记录并善于进行分析、判断。切不可一遇问题,就没有目的的乱调和乱改接线,甚至把电路拆掉重新安装。这样,不但不能解决问题,相反还会发生更大的故障,甚至损坏元器件及测量仪器。
7.4 故障的排除
新电路板出现故障是常见的,每个学生都必须认真对待。查找故障时,首先要有耐心,还要细心,切忌马马虎虎,同时还要开动脑筋, 认真进行分析、判断。
当电路工作时,首先应关掉电源,再检查电路是否有接错、漏掉线、断线,有没有接触不良、元器件损坏、插错了的元器件、元器件引脚接错等。查找时可借助万用表进行。
对于一个完整的系统电路,迅速而准确的排除故障,需要一定的实际工作经验,对于初学者来说,首先应认真分析电路图,并善于将全电路分解成几个功能块,明确各部分信号传递关系及工作原理。然后根据故障现象及有关测试数据,分析和初步确定故障可能出现的部位,再按上述步骤仔细检查这一部分电路,就可能比较快地找到故障点及故障原因。

8. 元器件清单
(1) CT74LS191——同步十进制计数器(7片);
(2) CT74LS08——四二输入与门(2片);
(3) CT74LS373——8位锁存器(3片);
(4) CT74LS48——BCD七段译码器/驱动器(6片);
(5) CT74L00——四二输入与非门(2片);
(6) BS201——----共阳极数码显示管(6片);
(7) 电阻2个,电阻48KΩ2个, 电阻2 1个;
(8) 开关2个,电源VCC +5V一个;
(9) 导线若干。
(备注:有些元件买不到,因而用相似功能的芯片代替)

9.心得体会
通过几个星期的努力,最终把这次课程设计的任务完成了。这是我们进行的第一个课程设计,让我懂得了很多以前不知道的知识,如万能板的内部结构、相关芯片的引脚功能等等。在设计中,遇到了很多问题,甚至有一些是以前没有见到的。经过同学的帮助和老师的指导,最终克服了那些难题,锻炼了我们的实践动手能力,使我们真正做到了理论与实践的有效结合。
制作电路时,深深体会到连接电路时一定要细仔细,一定要确保每条线路接触性良好。实验线路出现问题时,要耐心一步一步的去检查。在实验测试时,应保持冷静,要有条理,遇问题时要联系书本知识积极思考,同时记录好实验数据。
在这次课程设计过程中,我发现光有理论知识是不够的,还必须懂一些实践中的知识。所以在课程设计的实践中,我们应将实验与课堂教学结合起来,锻炼自己的理论联系实际的能力和实际动手能力。例如:检查和排除故障的能力。
本次课程设计,也培养了我们小组的合作精神,所谓团结就是力量,就是一个再好不过的解释。它不仅为我以后的课程设计打下基础,而且还培养了我们的合作精神和分析问题的能力。

10. 参考文献
[1] 康华光 .电子技术基础(数字部分). 第四版 北京: 高等教育出版社,2005
[2] 阎 石 .数字电子技术基础. 第四版 北京:高等教育出版社,1998
[2] 杨志忠 .数字电子技术. 北京:高等教育出版社,2000
[3] 张建华 .数字电子技术. 北京:机械工业出版社,1994
[4] 李亚伯 .数字电路与系统. 北京:电子工业出版社,1998
[5]陈华容 贾雅琼.数电实验指导书. 湖南:湖南工学院,2005
[6]谢自美 .电子线路设计-实验-测试. 武汉:华中科技大学出版社,2005
[7]赵雅兴 . 数字电路与FPGA. 北京 人民邮电出版社,2004
[8]邓勇 邓斌. 数字电路设计完全手册 北京.国防工业出版社,2004

Ⅳ 单片机秒表功能实现的原理

利用单 片机内定时器,一次定时50ms,定义4 个变量,分别是时、 分、秒和中断次数,每中断一次中断次数变量加1,累积20次,即是1S,然后秒加1,够60秒后秒清0,分加1,60 分后,分清0,时加1,24小时后 ,小时清0,这些都在中断程序中完成,主程序中不断地显示时间,这就是一个时钟。在此基础上,增加按键控制,可以调整时间,设定闹钟,使功能更加完善。

Ⅵ 51单片机制作一个秒表

//功能:0~99秒的简易秒表设计,两个静态数码管,定时器采用中断方式
#include"reg51.h"
#define uchar unsigned char
#define uint unsigned int

uchar count=0;//对50ms定时时间进行计数
uchar miao=0; //秒计数器

//函数名:timer_1()
//函数功能:定时器T1的中断函数,T1在工作方式1下每50秒产生中断,执行该中断函数
//形式参数:无
//返回值:无
void timer_1() interrupt 3 //T1的中断类型号为3
{
TH1=(65536-50000)/256; //重新设置T1计数初值高8位
TL1=(65536-50000)%256; //重新设置T1计数初值低8位
count++; //50ms计数器加1
if(count==20) //1s时间到
{
count=0; //50ms计数器清0
miao++; //秒计数器加1
if(miao==100)miao=0; //miao计数到100,则从0开始计数
}
}

bit b=0;
void int_0() interrupt 0
{
if(b == 0){TR1 = 0;b = 1;}
else
{
b = 0;
TR1 = 1;
}
}

void int_1() interrupt 2
{
miao=0;
count = 0;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
}

//函数名:disp
//函数功能:将i的值显示在两个静态连接的数码管上
//形式参数:i,取值范围0~99
//返回值:无
void disp(uchar i)
{
uchar led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//定义0~9显示码,共阳极数码管
P1=led[i/10]; //显示i高位
P2=led[i%10]; //显示i地位
}
void main()
{
TMOD=0x10;//设置T1在工作方式1
TH1=(65536-50000)/256;//设置T1计数初值高8位,定时时间50ms
TL1=(65536-50000)%256;//设置T1计数初值低8位
ET1=1;//开放T1中断允许
EX0 = 1;
IT0 = 1;
EX1 = 1;
IT1=1;
EA=1;//开放总中断允许
TR1=1;//启动T1开始计时
while(1)
{
disp(miao);//显示秒计数器值
}
}

Ⅶ 单片机 按键秒表

秒表的设计程序
用89C51,外接晶振,复位电路,二个数码管,二个按键,做一个电子秒表,具体要求为用按键起停电子表,可用按键设计倒计时时间(如10S,20S,60S),并启动倒计时功能。能用按键选择以上两功能之一。
三、程序代码:
A_BIT EQU 20H ;数码管个位数存放内存位置
B_BIT EQU 21H ;数码管十位数存放内存位置
TEMP EQU 22H ;计数器数值存放内存位置 ;开机初始化
MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
MOV P0,#0FFH;使显示时间数码管熄灭
CLR F0
CLR F1
MOV DPTR,#NUMTAB ;指定查表启始地址
;等待按键输入
;根据按键的输入判断执行什么功能;按键1按下则执行功能1
MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
MOV P0,#0FFH;使显示时间数码管熄灭
START:JB P3.6,START1;循环判断开始按钮K1是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.6,START;如果是干扰就返回
JNB P3.6,$;等待按键松开
LJMP GN1 ;按键2按下则执行功能2START1: JB P3.7,START;循环判断开始按钮K2是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.7,START1;如果是干扰就返回
JNB P3.7,$
LJMP GN2;数码管显示秒表时间的程序
GN1: ;先初始化
S1:MOV A,#0
MOV TEMP,A
GOON1: MOV R2,#2
JS1: MOV R3,#250
TIME1: MOV A,TEMP ;将TEMP中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;个位在B LCALL DPLOP1 ;插入一段判断定时过程中是否有按键输入的程序段
C1: JB P3.6,B1
ACALL DELAY10;延时10毫秒消抖
JB P3.6,C1
JNB P3.6,$;等待按键松开
CPL F0
ZT1: ; MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
JB P3.6,$;循环判断开始按钮K1是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.6,ZT1;如果是干扰就返回
JNB P3.6,$;等待按键松开
LCALL DPLOP1

B1: JB P3.7,LOOP1
ACALL DELAY10;延时10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按键松开
AJMP OVERLOOP1: DJNZ R3,TIME1 ;2毫秒循环执行250次,时间约0.5秒
DJNZ R2,JS1 ;循环执行2次,时间为1 秒钟INC TEMP;满一秒钟对时间加1
MOV A,TEMP
CLR C
SUBB A,#60
JNZ GOON1;判断TEMP的数值是否为60?不为60循环
ACALL OVER
RET
GN2: MOV A,#14H ; 设定倒计时的时间20S
MOV TEMP,A;数码管显示倒计时时间的程序
;初始化
MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
MOV P0,#14H;使显示时间为设定的倒计时时间 GOON2: MOV R2,#2
JS2: MOV R3,#250
TIME2: MOV A,TEMP ;将TEMP中的十六进制数转换成10进制
MOV B,#10 ;10进制/10=10进制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;个位在B MOV DPTR,#NUMTAB ;指定查表启始地址
DPLOP2: MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码

CLR P2.5 ;开个位显示
ACALL DELY1;显示1毫秒
SETB P2.5;关闭个位显示,防止鬼影
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.6 ;开十位显示
ACALL DELY1;显示1毫秒
SETB P2.6;关闭十位显示,防止鬼影 ;插入一段判断定时过程中是否有按键输入的程序段
C2: JB P3.6,B2
ACALL DELAY10;延时10毫秒消抖
JB P3.6,C2
JNB P3.6,$;等待按键松开

ZT2: MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入
JB P3.6,$;循环判断开始按钮K1是否按下?
ACALL DELAY10;延时10毫秒触点消抖
JB P3.6,ZT2;如果是干扰就返回
JNB P3.6,$;等待按键松开

B2: JB P3.7,LOOP2
ACALL DELAY10;延时10毫秒消抖
JB P3.7,B1
JNB P3.7,$;等待按键松开
AJMP OVERLOOP2: DJNZ R3,TIME2 ;2毫秒循环执行250次,时间约0.5秒
DJNZ R2,JS2 ;循环执行2次,时间为1 秒钟DEC TEMP;满一秒钟对时间减1
MOV A,TEMP
JNZ GOON2;判断TEMP的数值是否为0?不为0循环
ACALL OVER
RET
;结束定时
OVER: AJMP START;退到开机初始化状态;1毫秒延时子程序
DELY1: MOV R4,#2
D1:MOV R5,#248
DJNZ R5,$
DJNZ R4,D1
RET;10毫秒延时子程序
DELAY10: MOV R4,#20
D2:MOV R5,#248
DJNZ R5,$
DJNZ R4,D2
RET;实验板上的两位一体的数码管0~9各数字的显示代码
NUMTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1: MOV A,A_BIT ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码

CLR P2.5 ;开个位显示
ACALL DELY1;显示1毫秒
SETB P2.5;关闭个位显示,防止鬼影
MOV A,B_BIT ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.6 ;开十位显示
ACALL DELY1;显示1毫秒
SETB P2.6;关闭十位显示,防止鬼影
RET
END

阅读全文

与单片机秒表的实验目的与要求相关的资料

热点内容
安卓手机如何注册传说对决 浏览:949
自学应聘程序员 浏览:915
linux设置根目录 浏览:89
java向量空间模型 浏览:841
哪个app订餐便宜 浏览:672
有什么app可能存聊天记录 浏览:468
强国app中的纪录片在哪里 浏览:714
dell服务器可用什么样硬盘 浏览:636
javanewbyte 浏览:309
芯片app哪个好 浏览:751
文件夹名称laptop怎么去掉 浏览:247
单片机中断应用 浏览:622
搜狗app哪个好用 浏览:452
中信银行还完贷款什么时候给解压 浏览:233
ug自学编程入门 浏览:612
英语口语900句pdf 浏览:565
javabyte拼接 浏览:481
加密应用在哪里找vivo 浏览:290
python读写图像 浏览:289
不是金山毒霸会员文件还能加密吗 浏览:955