51单片机99秒倒计时C语言程序,单片机课程设计-99秒倒计时

2023-05-16

单片机应用技术

课程设计指导书

合肥通用职业技术学院

电气与计算机系 二OO九年11月

单片机应用是一门很重要的专业课,它涉及到的理论及技术在工业过程控制、智能仪器仪表及家用电器中有非常广泛的应用,本课程设计的意义和目的在于:通过具体的应用实例,进一步将课本知识与实际应用融会、贯通,以达到理论与实践相结合的教学目的。 一. 设计题目 99秒倒计时的设计 二. 总体要求

1. 仔细阅读设计任务,根据设计的任务画出硬件电路原理图

2. 用汇编语言编写出相应的程序,并上机编译,纠错。

3. 将程序写入单片机,在学习板中试运行。 4. 写出本课程设计的实际体会。

5. 完成本课程设计报告(在报告中要有设计题目、设计任务、设计要求、硬件电路图、软件程序和实际体会)

三. 设计任务

用两位共阳极数码管显示一99秒倒计时时钟,要求计时时间准确,能实现动态显示。 四. 系统的硬件电路原理图如下:

五. 程序框图如下:

程序:

MIAO EQU 30H

GEWEI EQU 31H

SHIWEI EQU 32H

SCANLED EQU 20H

BUFF_164 equ 34h

DAT164 BIT P0.6

CLK164 BIT P0.7

ORG 000H

JMP START

ORG 0BH

JMP TIMER0

ORG 100H START:MOV SP,#40H

MOV R0,#20H

MOV R5,#20 CLR0:MOV @R0,#00H

INC R0

DJNZ R5,CLR0

MOV TMOD,#01H

MOV TH0,#HIGH(65536-5000)

MOV TL0,#LOW(65536-5000)

SETB TR0

MOV IE,#10000010B

MOV R7,#200

MOV P0,#0FFH

MOV P1,#0FFH

MOV P2,#0FFH

MOV P3,#0FFH

MOV MIAO,#63H

AJMP $

TIMER0:PUSH ACC

PUSH PSW

MOV TH0,#HIGH(65536-5000)

MOV TL0,#LOW(65536-5000)

DJNZ R7,A2

MOV R7,#200

MOV A,MIAO

DEC A

MOV MIAO,A

CJNE A,#0FFH,A2

MOV MIAO,#63H

A2: MOV A,MIAO

LCALL BIN_BCD

MOV SHIWEI,A

MOV GEWEI,B

inc SCANLED

JB SCANLED.0,SCAN_L1 SCAN_L2: mov

p0,#11011111B

MOV

A,GEWEI

JMP

END_SCAN SCAN_L1: mov

p0,#11101111B

MOV

A,SHIWEI END_SCAN:MOV

DPTR,#TABLE

MOVC A,@A+DPTR

lcall send164

POP PSW

POP ACC

RETI

SEND164: MOV

BUFF_164,#08

;发送数据到74164

PUSH ACC SND164_LP:CLR

CLK164

RLC

A

MOV

DAT164,C

SETB CLK164

DJNZ BUFF_164,SND164_LP

POP

ACC

RET

BIN_BCD:MOV B,#10

DIV AB

RET

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

单片机应用技术

课程设计指导书

合肥通用职业技术学院

电气与计算机系 二OO九年11月

单片机应用是一门很重要的专业课,它涉及到的理论及技术在工业过程控制、智能仪器仪表及家用电器中有非常广泛的应用,本课程设计的意义和目的在于:通过具体的应用实例,进一步将课本知识与实际应用融会、贯通,以达到理论与实践相结合的教学目的。 一. 设计题目 99秒倒计时的设计 二. 总体要求

1. 仔细阅读设计任务,根据设计的任务画出硬件电路原理图

2. 用汇编语言编写出相应的程序,并上机编译,纠错。

3. 将程序写入单片机,在学习板中试运行。 4. 写出本课程设计的实际体会。

5. 完成本课程设计报告(在报告中要有设计题目、设计任务、设计要求、硬件电路图、软件程序和实际体会)

三. 设计任务

用两位共阳极数码管显示一99秒倒计时时钟,要求计时时间准确,能实现动态显示。 四. 系统的硬件电路原理图如下:

五. 程序框图如下:

程序:

MIAO EQU 30H

GEWEI EQU 31H

SHIWEI EQU 32H

SCANLED EQU 20H

BUFF_164 equ 34h

DAT164 BIT P0.6

CLK164 BIT P0.7

ORG 000H

JMP START

ORG 0BH

JMP TIMER0

ORG 100H START:MOV SP,#40H

MOV R0,#20H

MOV R5,#20 CLR0:MOV @R0,#00H

INC R0

DJNZ R5,CLR0

MOV TMOD,#01H

MOV TH0,#HIGH(65536-5000)

MOV TL0,#LOW(65536-5000)

SETB TR0

MOV IE,#10000010B

MOV R7,#200

MOV P0,#0FFH

MOV P1,#0FFH

MOV P2,#0FFH

MOV P3,#0FFH

MOV MIAO,#63H

AJMP $

TIMER0:PUSH ACC

PUSH PSW

MOV TH0,#HIGH(65536-5000)

MOV TL0,#LOW(65536-5000)

DJNZ R7,A2

MOV R7,#200

MOV A,MIAO

DEC A

MOV MIAO,A

CJNE A,#0FFH,A2

MOV MIAO,#63H

A2: MOV A,MIAO

LCALL BIN_BCD

MOV SHIWEI,A

MOV GEWEI,B

inc SCANLED

JB SCANLED.0,SCAN_L1 SCAN_L2: mov

p0,#11011111B

MOV

A,GEWEI

JMP

END_SCAN SCAN_L1: mov

p0,#11101111B

MOV

A,SHIWEI END_SCAN:MOV

DPTR,#TABLE

MOVC A,@A+DPTR

lcall send164

POP PSW

POP ACC

RETI

SEND164: MOV

BUFF_164,#08

;发送数据到74164

PUSH ACC SND164_LP:CLR

CLK164

RLC

A

MOV

DAT164,C

SETB CLK164

DJNZ BUFF_164,SND164_LP

POP

ACC

RET

BIN_BCD:MOV B,#10

DIV AB

RET

TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

END

摘要

本电路主要由五个模块构成:秒脉冲发生器、计数器、译码显示电路、控制电路和报警电路,主要采用555 作为振荡电路, 由74LS19

2、74LS48 和七段共阴LED 数码管构成计时显示电路, 具有直接控制计数器启动计数、暂停/连续计数、清零、译码显示电路的显示等功能。当控制电路的置数开关闭合时,在数码管上显示数字45,每当一个秒脉信号输入到计数器时,数码管上的数字就会自动减1,当计时器递减到零时,报警电路发出光电报警信号。整个电路的设计借助于Multisim11.0仿真软件和数字逻辑电路相关理论知识,并在Multisim11.0下设计和进行仿真,得到了预期的结果。

设计内容及要求:

本设计主要能完成:显示45秒倒计时功能;系统设置外部操作开关,控制计时器的直接清零、启动和暂停/连续功能;在直接清零时,数码管显示器全部显示为“0”;计时器为45秒递减计时其计时间隔为1秒;计时器递减计时到零时,数码显示器不灭灯,同时发出光电报警信号等。

方案论证及比较:

方案一:用555时基电路构成的多谐振荡器来产生频率为1Hz的脉冲,即输出周期为1秒的方波,接着将该信号送到计数器74LS192的CP减计数脉冲端,再通过译码器74LS48把输入的8421BCD码经过内部作和电路“翻译”成七段输出,这样加在LED七段数码管上显示十进制数,然后在适当的位置设置开关或控制电路即可实现计数器的直接清零,启动和暂停/连续、报警等功能。

方案二:由14位二进制串行计数器/分频器和振荡器CD4060、BCD同步加法计数器CD4518构成的秒信号发生器。电路中利用CD4060组成两部分电路。一部分是14级分频器,其最高分频数为16384;另一部分是由外接电子表用石英晶体、电阻及电容构成振荡频率为32768Hz的振荡器。震荡器输出经14级分频后在输出端Q14上得到1/2秒脉冲并送入由1/2 CD4518构成的二分频器,分频后在输出断Q1上得到秒基准脉冲。接着将该信号送到计数器74LS192的CP减计数脉冲端,再通过译码器74LS48把输入的8421BCD码经过内部作和电路“翻译”成七段输出,这样加在LED七段数码管上显示十进制数,然后在适当的位置设置开关或控制电路即可实现计数器的直接清零,启动和暂停/连续、报警等功能。

方案三:用555时基电路构成的多谐振荡器来产生频率为10Hz的脉冲,再将该脉冲信号加到由74LS161构即周期为1秒,接着将该信号送到计数器74LS192的CP减计数脉冲端,再通过译码器74LS48把输入的8421BCD码经过内部作和电路“翻译”成七段输出,这样加在LED七段数码管上显示十进制数,然后在适当的位置设置开关或控制电路即可实现计数器的直接清零,启动和暂停/连续、报警等功能。 方案选择: 本课程设计中对秒脉冲信号的精度要求并不是很高,并且方案二中用CD4060和分频器构成的基准秒脉冲发生电路较于前者要复杂的多,而且CD4060和CD4518我们平常很少用,对其功能和引脚信息了解不多;虽然方案三的秒脉冲会稳定些,但因为电路加入了74LS161用于异步清零法分频而使电路变得复杂许多,为了更简洁、方便、易于实现和各个功能,我们选用了方案一。

单元设计

3.1时间脉冲产生电路的设计

产生1Hz时间脉冲的电路图

由于R1=15kΩ,R2=68kΩ, C1=10μF,C2=10nFT=(R1+2R2)C㏑2 ,算得T=1 s 3.2计数电路的设计

计数器是一个用以实现计数功能的时序逻辑部件,它不仅可以用来对脉冲进行计数,还常用做数字系统的定时、分频和执行数字运算以及其他特定的逻辑功能。本次课程设计中选用74LS192来实现要求的减法计数功能。图2.5是74LS192的管脚图。

图1.6 74LS192管脚图

74LS192具有下述功能:

① 异步清零:MR=1,Q3Q2Q1Q0=0000。(此功能可实现计数器的清零) ②异步置数:MR=0,PL=0,Q3Q2Q1Q0=D3D2D1D0。 ③保持:

MR=0,PL=1,CPU=CPD=1,Q3Q2Q1Q0保持原态

④加计数:CR=0,PL=1,CPU=CP,CPD=1,Q3Q2Q1Q0按加法规律计数 ⑤减计数:CR=0,PL=1,CPU=1,CPD= CP,Q3Q2Q1Q0按减法规律计数

按照课程设计任务书要求,需要计时45s,因此该设计中需要用到一个四进制的减法计数器和一个十进制的减法计数器。我们可以用两片74LS192来实现这两个计数器。计数模块中的两片计数器的加计数器脉冲输入端都要接高电平,且要将低位片的借位信号加到高位片的减计数脉冲输入端。高位片计数器的借位信号控制报警信号,在进行减计数时,借位信号一直为高。45秒倒计时计数电路可以按照图2.6连接。

图1.7 45秒倒计时器的计数电路

2.3.3译码显示电路

本次设计中我们用发光二极管(LED)组成字型来来显示数字。这种数码管的每个线段都是一个发光二极管,因此也称LED数码管或LED七段显示器。因为计算机输出的是BCD码,要想在数码管上显示十进制数,就必须先把BCD码转换成 7 段字型数码管所要求的代码。我们把能够将计算机输出的BCD码换成 7 段字型代码,并使数码管显示出十进制数的电路称为“七段字型译码器”因此在本次的设计中我们采用了常用的74LS48。图2.7是74LS48的外部管脚图

图1.8 74LS48管脚图

七段显示译码器输出高电平有效,用以驱动共阴极显示器。该集成显示译码器设有多个辅助控制端,以增强器件的功能。 它有3个辅助控制端LT、RBI、BI/RBO,现简要说明如下: 灭灯输入BI/RBO BI/RBO是特殊控制端,有时作为输入,有时作为输出。当BI/RBO作输入使用且BI=0时,无论其它输入端是什么电平,所有各段输入a~g均为0,所以字形熄灭。 试灯输入LT 当LT=0时,BI/RBO是输出端,且RBO=1,此时无论其它输入端是什么状态,所有各段输出a~g均为1,显示字形8。该输入端常用于检查7488本身及显示器的好坏。 动态灭零输入RBI 当LT=1,RBI=0且输入代码DCBA=0000时,各段输出a~g均为低电平,与BCD码相应的字形0熄灭,故称“灭零”。利用LT=1与RBI=0可以实现某一位的“消隐”。此时BI/RBO是输出端,且RBO=0。 动态灭零输出RBO BI/RBO作为输出使用时,受控于LT和RBI。当LT=1且RBI=0,输入代码DCBA=0000时,RBO=0;若LT=0或者LT=1且RBI=1,则RBO=1。该端主要用于显示多位数字时,多个译码器之间的连接。

对输入代码0000,译码条件是:LT和RBI同时等于1,而对其它输入代码则仅要求LT=1,这时候,译码器各段a~g输出的电平是由输入BCD码决定的,并且满足显示字形的要求。

本次设计的译码显示电路可以按照图1.9连接电路

图1.9 译码显示电路

3.5 报警电路

设计中要求电路在计数为0时实现光电报警的功能。设计方案中发光二极管实现了这一功能。电路图如下图。当高位计数器的数值减到0时,向前借位借口~BO又高电平变为低电平,有点路可知这是LED二极管亮,达到光电报警的作用。

图1.10 光电报警电路

暂停、置位、清零控制电路

暂停/连续 可以通过在将借位信号和暂停/连续控制信号和时序脉冲信号加到一起相与之后作用到个位计数器减计数脉冲输入端,即实现计数器递减计数到零时,显示器不灭灯。连接电路如图2.10的“暂停”,当开关打到低电平时计时器暂停,当开关打到高电平时计时器正常计时。

启动置位 可通过192的 异步置数:MR=0PL=0时,Q3Q2Q1Q0=D3D2D1D0来使计时器置位启动。LCAD(即PL)端的置位功能连接如图图1.11。 清零 可以通过192的 异步清零:MR=1时,Q3Q2Q1Q0=0000来使计时器清零。CLR(即MR)端的清零功能的电路连接如图图1.11。 十位调整、个位调整控制电路图如图图1.11

图1.11 控制电路

2.4 仿真原理图

具有数字显示的篮球竞赛45S计时器的设计主要分为五个模块:时钟模块(即秒脉冲发生模块)、计数模块、译码显示模块、辅助时序控制模块(简称控制电路)和报警电路,总体仿真电路如下图。打开仿真软件Multisim11.0按要求在Multisim11.0里连接好如图所示的电路后就可以按下F5就可以进行电路仿真了,最后的仿真结果是:计时器可以从45倒计时到0停止,并且倒计时到0时二极管发光。同时也可以通过图中的开关按钮来完成时间的调整、置位、清零和暂停。

图2.12 45秒倒计时器整体电路图

2.2工作原理

由555 定时器输出秒脉冲经过U3入到计数器U2的DOWN端, 作为减计数脉冲。当计数器计数计到0 时, U2的( 13) 脚输出借位脉冲使十位计数器U1开始计数。当计数器计数到“00” 时LED1发光二极管亮, 即光电报警。若K2拨到左端,计数器立即复位置数, K2拨到右端计数器又开始计数。若需要暂停时, 把K1拨到左端, 使计数器保持不变, 把K1拨到右端后, 计数器继续计数。把K3拨到右端为直接清零。

注:U3为74ls11,U

1、U2为74ls192. 设计特点及实用价值

在许多领域中计时器均得到普遍应用,诸如在体育比赛,定时报警器、游戏中的倒时器,交通信号灯、红绿灯、行人灯、交通纤毫控制机、还可以用来做时间提醒设备等等,由此可见计时器在现代社会是何其重要的。

篮球作为一项全民健身项目,已有一定的历史。在中国,篮球很盛行,篮球比赛也日趋职业化。篮球比赛中时间要用倒计时器,该计时器要有递减计时及报警功能,因此符合比赛中的需要,所以,设计一款计时器是非常有必要也非常有前景的。

总结与心得体会

在本次的课程设计中通过自己找材料,分析、设计等,这为以后的学习做了铺垫。整个设计实现了从单一的理论学习到解决实际问题的转变。通过本次的课程设计,我最大的收获就是提高了自身的动手能力,培养了我的寻求解决问题的能力也增强了我其它方面的能力。在设计中,我充分应用我们所学的知识,例如:集成电路74LS系列、二极管、整定时器555等元件的应用。这次设计所用的的工具是Multisim11.0,由于之前学过这软件,所以画图和仿真就比较方便,使设计的质量得到了保证。

电子技术发展呈现出系统集成化,自动化,设计自动化,用户专业化和测试智能的优势,作为一个大学生。我们必须时代的发展,这使我们必须要扩展自己的知识,并利用计算机来辅助分析和设计,这对我们是有益的。

通过写课程设计的总结报告,初步训练我的书面表达能力,对我的将来就业和进一步发展帮助较大。同时也加强了对课本知识的理解,使我们做到理论和与实际的联系。并且我也深深地体会到自己所学知识的不足,激发了我的自学能力和应对挑战的能力。为今后学习打下了良好的基础,也培养了我们严谨务实的作风。

仿真结果: 置数/启动

暂停/继续

清零

前言 2

第一章 计时器概述 2

1.1篮球竞赛24秒计时器功能 2

1.2 设计任务及要求 3

1.2.1基本要求 3

1.2.2 设计任务及目标 3

1.2.3 主要参考器件: 3

第二章 电路设计原理与单元模块 4

2.1 设计原理 6

2.2 设计方案 7

2.3 单元模块 8

2.3.1 8421BCD码递减计数器模块 8

2.3.2 时钟模块 10

2.3.3 辅助时序控制模块 12

2.3.4 译码显示模块 14

第三章 安装与测试 15

3.1 电路的安装 15

3.2 电路的调试 16

第四章 实验体会 16

结 论 17

致谢 18

参考文献 19

附录 20

前言

数字电子技术课程设计是数字电子技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。

本课程设计是脉冲数字电路的简单应用,设计了篮球竞赛30秒计时器。此计时器功能齐全,可以直接清零、启动、暂停和连续以及具有光电报警功能,同时应用了七段数码管来显示时间。此计时器有了启动、暂停和连续功能,可以方便地实现断点计时功能,当计时器递减到零时,会发出光电报警信号。本设计完成的中途计时功能,实现了在许多的特定场合进行时间追踪的功能,在社会生活中也具有广泛的应用价值。

此计时器的设计采用模块化结构,主要由以下3个组成,即计时模块、控制模块、以及译码显示模块。在设计此计时器时,采用模块化的设计思想,使设计起来更加简单、方便、快捷。此电路是一时钟产生,触发,倒计时计数,译码显示为主要功能,在此结构的基础上,构造主体电路和辅助电路两个部分。

心得体会

1.设计体会

在此次的数字钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法. 在连接六进制,十进制,六十进制的进位及十二进制的接法中,要求熟悉逻辑电路及其芯片各引脚的功能,那么在电路出错时便能准确地找出错误所在并及时纠正了.

在设计电路中,往往是先仿真后连接实物图,但有时候仿真和电路连接并不是完全一致的,例如仿真的连接示意图中,往往没有接高电平的16脚或14脚以及接低电平的7脚或8脚,因此在实际的电路连接中往往容易遗漏.又例如74HC390芯片,其本身就是一个十进制计数器,在仿真电路中必须连接反馈线才能正常显示,而在实际电路中无需再连接,因此仿真图和电路连接图还是有一定区别的. 在设计电路的连接图中出错的主要原因都是接线和芯片的接触不良以及接线的错误所引起的. 2.对该设计的建议

此次的数字钟设计重在于仿真和接线,虽然能把电路图接出来,并能正常显示,但对于电路本身的原理并不是十分熟悉.总的来说,通过这次的设计实验更进一步地增强了实验的动手能力.

本课程设计是脉冲数字电路的简单应用,设计了篮球竞赛30秒计时器。此计时器功能齐全,可以直接清零、启动、暂停和连续以及具有光电报警功能,同时应用了七段数码管来显示时间。此计时器有了启动、暂停和连续功能,可以方便地实现断点计时功能,当计时器递减到零时,会发出光电报警信号。本设计完成的中途计时功能,实现了在许多的特定场合进行时间追踪的功能,在社会生活中也具有广泛的应用价值。

此计时器的设计采用模块化结构,主要由以下3个组成,即计时模块、控制模块、以及译码显示模块。在设计此计时器时,采用模块化的设计思想,使设计起来更加简单、方便、快捷。此电路是以时钟产生,触发,倒计时计数,译码显示为主要功能,在此结构的基础上,构造主体电路和辅助电路两个部分。目录

前言………………………………………………………………4 第一章 计数器概述 ………………………………………………5 1.1 计时器的特点及应用 ……………………………………5 1.2 设计任务及要求 …………………………………………6

第二章 电路设计原理及单元模块…………………………………7 2.1 设计原理…………………………………………………7 2.2 设计方案…………………………………………………8 2.3 单元模块 ………………………………………………10

2.3.1 8421BCD码递减计数器模块 ……………………10

2.3.2 时钟模块 ………………………………………1

32.3.3 辅助时序控制模块 ……………………………1

42.3.4 译码显示模块 …………………………………17 第三章 安装与调试………………………………………………20 3.1 电路的安装 ……………………………………………20 3.2 电路的调试 ……………………………………………20

第四章 实验体会…………………………………………………21 结 论 ………………………………………………………………23 参考文献……………………………………………………………24 附 录……………………………………………………………… 25

电子课程设计是电子技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。

本设计采用555 作为振荡电路, 由74LS19

2、74LS48 和七段共阴LED 数码管构成计时电路, 具有计时器直

接复位、启动、暂停、连续计时和报警功能。该电路制作、调试简单, 采用普通器件, 一装

即成。

一、电路组成

电路由秒脉冲发生器、计数器、译码器、显示电路、报警电路和辅助控制

电路五部分组成, 见图1。其整机电路 如图2 所示, 印制板电路如图3 所示。1.秒脉冲发生器秒脉冲产生电路由555 定时器和外接元件R

1、R

2、C 构成多谐振荡器。输出脉冲的频率为:经过计算得到f≈1HZ, 即1 秒。 2.计数器 计数器由两片74LS192 同步十进制可逆计数器构成。 利用减计数RD= 0, LD= 0, CPD=1, 实现计数器按8421 码递减进行减计数。利用借位输出端BO 与下一级的CPD 连接, 实现计数器之间的级联。利用预置数LD 端实现异步置数。当RD= 0, 且LD= 0 时, 不管CPU 和CPD 时钟输入端的状态如何, 将使计数器的输出等于并行输入数据, Q3Q2Q1Q0=D3D2D1D0。 3.译码及显示电路本电路由译码驱动74LS48 和7 段共阴数码管组成。74LS48 译码驱动器具有以下特点: 内部上拉输出驱动, 有效高电平输出, 内部有升压电阻而无需外接电阻。 4.控制电路完成计数器的复位、启动计数、暂停/ 继续计数、声光报警等功能。控制电路由 IC5 组成。IC5B 受计数器的控制。IC5C、IC5D 组成RS 触发器, 实现计数器的复 位、计数和保持“24”、以及声、光报警的功能。 ( 1) K1: 启动按钮。K1 处于断开位置时, 当计数器递减计数到零时, 控制电路发出声、光报警信号, 计数器保持“24”状态不变, 处于等待状态。当K1 闭合时, 计数器开始计数。 ( 2) K2: 手动复位按钮。当按下K2 时, 不管计数器工作于什么状态, 计数器立即复位到预置数值, 即“24”。当松开K2 时, 计数器从24 开始计数。 ( 3) K3: 暂停按钮。当“暂停/ 连续”开关处于“暂停”时, 计数器暂停计数, 显示器保持不变, 当此开关处于“连续”开关, 计数器继续累计计数。当IC5D 输出为低电平时, 发光二极管D 发光, 同时蜂鸣器发出报警。

二、工作原理

由555 定时器输出秒脉冲经过R3输入到计数器IC4 的CD 端, 作为减计数脉冲。当计数器数计到0 时, IC4的( 13) 脚输出借位脉冲使十位计数器IC3 开始计数。当计数器计数到“00”时应使计数器复位并置数“24”。但这时将不会显示“00”, 而计数器从“01”直接复 位。由于“00”是一个过渡时期, 不会显示出来, 所以本电路采用“99”作为计数

器复位脉冲。当计数器由“00”跳变到“99” 时, 利用个位和十位的“9”即“1001”通过与非门IC5 去触发RS 触发器使电路翻转, 从11 脚输出低电平使计数器置数, 并保持“24”, 同时D发光二极管亮, 蜂鸣器发出报警声, 即声光报警。按下K1 时, RS 触发器翻转11 脚输出高电平, 计数器开始计数。若按下K2,计数器立即复位, 松开K2 计数器又开始计数。若需要暂停时, 按下K3,振荡器停止振荡, 使计数器保持不变, 断开K3后, 计数器继续计数。

基于51单片机倒计时秒表程序设计

typedef unsigned char UINT8; typedef unsigned int UINT16; code UINT8 SEGMENT[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; code UINT8 SELECT[8] ={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; #define S1 0x0e #define S2 0x0d #define S3 0x0b #define S4 0x07 sbit SPEAK=P3^5; sbit P3_3=P3^3; UINT8 Second;

void timer_10ms(void)//定时器T0定时10ms {

TMOD=0x01; TH0=0xdc; TL0=0x32; TR0=1;//启动T0 } void Delay(UINT16 t) {

UINT16 i,j;

for(i=0;ifor(j=0;j<114;j++); }

void Display(void) { static UINT8 num=0; P2=0xff; switch(num) {

case 0:

P0=0xff;

break;

case 1:

P0=0xff;

break;

case 2:

P0=0xff;

break;

case 3:

P0=0xff;

break;

case 4:

P0=0xff;

break;

case 5:

P0=0xff;

break;

case 6:

P0=SEGMENT[Second%100/10];

break;

case 7:

P0=SEGMENT[Second%10];

break; } P2=SELECT[num]; num++; num%=8;//if(num==8) num=0; } UINT8 Scankey(void) { UINT8 key; if((P3&0x0f)==0x0f)

return(0xff); Delay(10);

if((P3&0x0f)==0x0f)

return(0xff); key=P3&0x0f; while((P3&0x0f)!=0x0f); return(key); }

void main() {

UINT8 i;

EA=1;

//打开总中断

EX1=0; //打开外部中断1 IT1=1; TH0=0xdc; TL0=0x32; TR0=1;//启动T0

ET0=1;

Second=60; while(1)

{

Display();

Delay(2);

i = Scankey();

if(i==S1)//启动

{

EA=1;

}

else if(i == S2)//暂停

{

EA=0;

}

}

} } void int_0() interrupt 1 {

unsigned char z,aa;

for(aa=59;aa>0;aa--) {

for(z=0;z<50;z++)

{

P0=SEGMENT[aa/10];

P2=SELECT[3];

delay(5);

//10ms

P0=SEGMENT[aa%10];

P2=SELECT[4];

delay(5);

//10ms

} } } }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机99秒倒计时C语言程序,单片机课程设计-99秒倒计时 的相关文章

随机推荐