倒计时器单片机答辩

合集下载

基于单片机的电子万年历毕设答辩

基于单片机的电子万年历毕设答辩

2 研 究 内 容 RESEARCH CONTENTS
电子日历由硬件和软件两部分组成。硬件由五个模块组成: 主控制器、时钟电路、温度检测电路、显示电路和键盘接口。 主控模块由AT89C52、时钟电路的时钟芯片DS1302、显示模块 的LED数码管、温度检测的DS18B20温度传感器组成,键盘接口 电路通过普通按键连接上拉电阻。软件采用C语言编程实现单 片机的程序控制。单片机通过时钟芯片DS1302获取时间数据, DS18B20采集的温度信号送到单片机进行处理。单片机再将时 间数据和温度数据送到74LS154进行解码,然后放大驱动LED数 码管,通过晶体管C9015显示太阳年、月、日、时、秒、闹钟、 星期、温度。
4结 论
Conclusion
这个设计是基于电子技术的实际应用,不断实践,拓宽了 思路。它设计了考察、调研、资料收集、方案制定、系统规划、 编程、仿真、调试的流程,使我在学习本专业的过程中深刻认 识到理论与实践相结合的重要性,同时解决了以往模糊的专业 知识点,使我的专业知识更加结构化、系统化。总之,这个设 计是在领导的精心安排和大力支持下进行的;在指导老师的耐 心指导下;在同学朋友的密切帮助下,我解决了很多设计上的 实际困难。我设计了一个功能强大的电子日历,成本最低,方 案最简单。
请各位专家和老师批评与指正
THANKS
基于单片机的电子万年历设计
答 辩 人: 学 号:
CONTENTS
1 研究意义 2 研究内容 3 调试分析 4 课题总结
1 研 究 意 义 RESEARCH SIGNIFICANCE
随着微电子技术和超大规模集成电路技术的不断发展, 家用电子产品不仅种类日益丰富,而且更加经济实用。单 片机以其体积小、性价比高、功能强、可靠性高等独特的 特点,在各个领域得到了广泛的应用。电子日历是一种广 泛使用的日常计时工具,带数字显示的日历钟已经越来越 普及,特别适合在家庭居室、办公室、大厅、会议室、车 站、广场使用。目前市场上的钟表和日历都存在一些不足, 比如时钟不准、产品成本高、不显示环境温度等,给人们 的使用带来了一些不便。为此,设计了一种基于51单片机 的功能全面、计时准确、成本低廉的万年历。

基于单片机的电子时钟的论文答辩稿

基于单片机的电子时钟的论文答辩稿

由于单片机功能强大,价格低廉, 由于单片机功能强大,价格低廉,它已被广泛 应用与仪器仪表、家用电器、医用设备、航空航天、 应用与仪器仪表、家用电器、医用设备、航空航天、 专用设备的智能化管理及过程控制等领域。 专用设备的智能化管理及过程控制等领域。
AT89S52 单片机 AT89S52是一种低功耗、高 AT89S52是一种低功耗、 是一种低功耗 性能CMOS8位微控制器,具有8K CMOS8位微控制器 性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器, Flash存储器 在系统可编程Flash存储器,向 下完全兼容51子系列。 51子系列 下完全兼容51子系列。标准功能 8k字节Flash,256字节RAM, 字节Flash 字节RAM 有8k字节Flash,256字节RAM, 32 位定时器/计数器,一个6向 位定时器/计数器,一个6 级中I/O 口线, 量2级中I/O 口线,看门狗定时 个数据指针,三个16 16位断 器,2个数据指针,三个16位断 结构,全双工串行口, 结构,全双工串行口,片内晶振 和时钟电路,使得AT89S52 AT89S52为众 和时钟电路,使得AT89S52为众 多嵌入式控制应用系统提供高灵 超有效的解决方案。 活、超有效的解决方案。
void display_dfen(uchar dat) { uchar sh,ge; sh=dat/10; ge=dat%10; void display_ri(uchar dat) P2=3; P0=table[sh]; delay(3); { P2=4; P0=table[ge]; delay(3); void deyscan() //键盘扫描 uchar sh,ge; P2=5; P0=0x40; delay(3); { sh=dat/10; ge=dat%10; } if(s13==0) P2=6; P0=table[sh]; delay(3); { P2=7; P0=table[ge]; delay(3); void display_dmiao(uchar dat) delay(2); } { if(s13==0) uchar sh,ge; { void time() sh=dat/10; ge=dat%10; { num++; P2=6; P0=table[sh]; delay(3); TMOD=0x11; if(num==10) P2=7; P0=table[ge]; delay(3); TH0=(65536-50000)/256; num=0; } TL0=(65536-50000)%256; while(s13==0); TH1=(65536-50000)/256; } void display_miao(uchar dat) TL1=(65536-50000)%256; } { EA=1; ET0=1; ET1=1; if(num>0&&num<4) uchar sh,ge; TR1=1; TR0=1; TR0=0; sh=dat/10; ge=dat%10; } else TR0=1; P2=6; P0=table[sh]; delay(3); if(s14==0) P2=7; P0=table[ge]; delay(3); void init() { } { delay(2); P2=0; P0=table[0]; delay(3); if(s14==0) void display_nian(uchar dat) P2=1; P0=table[0]; delay(3); { { P2=2; P0=0x40; delay(3); while(s14==0); uchar sh,ge; P2=3; P0=table[0]; delay(3); sh=dat/10; ge=dat%10; if(num==1) P2=4; P0=table[0]; delay(3); { P2=0; P0=table[sh]; delay(3); P2=6; P0=table[0]; delay(3);

基于51单片机秒表课设PPT答辩

基于51单片机秒表课设PPT答辩

03 工作过程
代码解析:开始扫描
void StartScan() { static unsigned char t = 0; static bit Lock = 0; if(Start == 1) { t = 0; Lock = 0; } else if(Lock == 0) { t++; if(t >= 10) { fStart = 1; Lock = 1; } }
中遇到有些不理解不懂的问题时,我们通过查找相关资料,复习相关知识以及
询问老师和同学进行解决。 在这次课程设计中我们发现在编写程序的时候要细心,在有些程序后面最 好加上注释,这样在程序出现问题时可以更容易查找,也让整个程序更浅显易 懂,遇到问题及时处理这样才不会影响下一步的进行,平常所学到单片机知识 都是些理论知识,由这次课程设计我们发现要把理论知识与实践相结合。这次 课程设计培养了我们的动手能力,和小组之间的合作能力,让我们从实践过程 中懂得了很多,在今后的学习中还需要不断地完善自己提升自己。
件、硬件有机地结合起来,使它拥有计时、暂停、清零功能。
02
设计概述
INTRODUCTION
02 设计概述
课程设计目的: (1)掌握protues仿真软件和keil软件的使用与使用技巧。 (2)掌握AT89C51单片机的基本使用方法和各种元器件的使用。 (3)以单片机为控制核心,实验方案设计,电路和程序的设计,并运用protues 仿真软件进行演示。 (4)学会小组之间的学习和相互帮助,提高自主学习的能力。
}
03 工作过程
代码解析:暂停扫描
void PauseScan() { static unsigned char t = 0; static bit Lock = 0; if(Pause == 1) { t = 0; Lock = 0; } PauseScan else if(Lock == 0) { t++; if(t >= 10) { fStart = 0; Lock = 1; } }

基于单片机的时钟温度计时器的设计答辩幻灯片

基于单片机的时钟温度计时器的设计答辩幻灯片

三、各部分电路图
三种时间表示模式
正常显示模式。第一行显示年、月、日、星期,第二行显示时、 分、秒、温度
农历显示模式。第一行显示年、月、日、星期,第二行显示“NL” 表示农历,然后显示农历日期,“RUN”表示闰年。
闹钟显示模式。第一行显示年、月、日、星期,第二行“timer”表示闹 铃,接下去是闹铃时间。
本时钟还具有环保、走时无噪音、低功耗等非实时时钟不具有的功能。 该实时时钟不但可以作为家用,而且还可以在公共场合使用,如车站、 码头、商场等场所。
二、时钟温度计时器的框图
系统框图
LCD1602显 示
用户按 键
AT89S5 1



DS18b20 温度测量电 路
DS1302 时钟电路
蜂鸣器电路
S51单片机引脚图
主程序流程图
时间设置流程图
Hale Waihona Puke 闹钟设计流程图P3.1P3.2P3.3P3.0P3.4 LQ5 key2key3key4key1key5 EC VCC B 3 K 1R 1 P14 D BGGND BGVCC VCC 7 B D K 1R11 7 Q 6 B D 6 Q 5 B D VCC 5 Q 4 B D 4 Q 3 B D 2 VCC 0.1uF C 3 Q 2 B D 2 Q 5 1 B D 4.7KR 1 Q 3 0C BC DV 1 LCD160218B20 0 Q P Q ED R EP2.0 2 D WN RG U +5V W R S R S R O GndV 2 C C V VCC LM7805 Vin D N G 1 +9V 12 k 123456789 12 0 P1PDC9V 8 01234567 4.7KR VCC QQQQQQQQ SW RREP2.0 7 4.7KR VCC 12345678901234567890 22222222233333333334 6 4.7KR A E P10P11P12 P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0 ALEVCC PSEN 5678 P1.0P1.1P1.2P1.3P1.4P1.5/MOSIP1.6/MISOP1.7/SCKRESETP3.0P3.1P3.2P3.3P3.4P3.5P3.6P3.7XTAL2XTAL1VSS 1 1 U89s52 T V I/O RST B3 Vcc1 SCLK 01234567890 123456789 11111111112 D 12N P10P11P12P14P3.0P3.1P3.2P3.3P3.4 Vcc2XXG DS1302 1234 F K u 0 0 FF 1 C 12 0 0 pp 1 1R 00 Y33 2 VCC Y32.768K 34 VCC CC key0 12

基于51单片机的9999秒倒计时器毕业设计

基于51单片机的9999秒倒计时器毕业设计

编号:审定成绩:重庆邮电大学毕业设计(论文)设计题目:基于51单片机的9999秒倒计时器设计学院名称:通信与信息工程学院学生姓名:X正伟专业:电子信息工程班级:0120XXX学号:060201XX指导教师:刘XX答辩组负责人:填表时间:2010 年 6 月重庆邮电大学教务处摘要近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动着传统控制检测日新月异的更新。

由于单片机具有体积小、易于产品化、面向控制、集成度高、功能强、可靠性高、价格低等特点,其在工业控制、机电一体化、智能仪表、通信等诸多领域中得到了广泛的应用。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用。

但是仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

本论文针对倒计时系统的设计的需求,介绍了MCS-51单片机的部分基本原理,如51单片机的接口功能、中断、定时器等等。

倒计时系统需要用到锁存器、矩阵键盘、LED数码显示器等主要模块,通过不同的模块之间相互作用,完成倒计时的初步硬件结构。

对于倒计时器中的LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即采用Keil uVision3软件程序进行译码。

本次设计采用C语言编程,通过倒计时子程序模块、矩阵键盘扫描模块、中断等子程序的正确调用,完成了可以随时设置初值的基于51单片机控制的9999秒倒计时系统。

【关键词】倒计时器单片机矩阵键盘Keil uVision3 LED数码显示器ABSTRACTIn recent years, with the penetration of computers in the social sphere, SCM applications are continually deepening, and the traditional control test is driving the rapid update. The size of SCM is very small, and it is easy to be producted. for control, high integration, functionality, high reliability, and so on. So it has been widely used in the area of industrial control, mechatronics, intelligent instruments and communications.In real-time detection and control of the microcomputer application system, the microcontroller is often used as a core component. But if only have the knowledge of SCM is not enough.It should be based on specific hardware architecture, and if the application-specific features of the software objects are combined will be perfect.This paper focuses on the needs of the countdown system design, introduced the MCS-51 MCU of some of the basic principles.Such as the 51 single-chip interface functions, interrupt, timer and so on. Countdown system needs to use latch, matrix keyboard, LED digital display and other major modules, through interaction between different modules to complete the Countdown to the initial hardware. The countdown device in the LED digital display, In order to simplify the circuit, reduce costs, we adopt a software-based interface method, namely using Keil uVision3 software program for decoding.C language programming was used in the design , we completed the initial value can be set at any time based on 51 single-chip control of the 9999 seconds countdown system by making use of the countdown subroutine modules, matrix keyboard scanning module, interrupt, and also the correct subroutine calls.【Key words】Counter-down SCM Matrix keyboard Keil uVision3 LED digital display目录前言 (1)第一章倒计时系统简介 (2)第一节功能说明 (2)一、设计要求 (2)二、方案说明 (2)三、系统功能 (3)第二节开发作用和意义 (3)第三节本章小结 (4)第二章MCS-51单片机基本原理 (5)第一节单片机概述 (5)一、单片机基础 (5)二、单片机应用领域 (7)三、单片机的生产厂家和机型 (8)第二节MCS-51单片机的组成原理 (8)一、80C51芯片介绍 (8)二、8051 与80C51 (10)第三节MCS-51单片机的引脚功能 (10)一、主电源引脚Vss和Vcc (11)二、外接晶体引脚XTAL1和XTAL2 (11)三、控制引脚RST/VPD、ALE/PROG、PSEN、EA/Vpp (11)四、输出输入引脚 (12)第四节中断 (14)一、中断的概念 (14)二、8051中断系统结构 (15)三、中断响应条件 (18)第五节定时器与计数器 (18)一、定时器概述 (18)二、定时器控制字 (18)第六节本章小结 (20)第三章倒计时器系统设计与调试 (21)第一节硬件电路设计 (21)一、中央处理器模块 (21)二、锁存器 (23)三、矩阵键盘 (25)四、LED数码显示模块 (26)第二节软件设计 (28)一、程序准备 (29)二、键盘扫描程序设计 (30)三、倒计时初值设置 (31)四、倒计时模块子程序设计 (32)五、其他子程序设计 (33)第三节系统调试 (34)一、系统调试工具Keil uVision3 (34)二、调试的主要方法 (34)结论 (38)致谢 (39)参考文献 (40)附录 (41)一、英文原文 (41)二、英文翻译 (51)三、源程序 (61)前言51系列单片机属于总线型单片机,具有硬件架构完整、功能强大、技术成熟、通用性强、可外部扩展、配套芯片齐全、集成开发环境好、实用子程序丰富以及价格低廉等一系列优点,无论是实际工程应用,还是学习单片机原理及其应用技术,51系列单片机都是理想的选择。

单片机课程设计答辩参考题目

单片机课程设计答辩参考题目

单片机课程设计答辩单片机课程设计答辩参考参考参考题目题目答辩记录的第二部分要记录2、3个问题个问题。

在在A 类题类题中选一中选一中选一、、两题作答两题作答((所有带框的问题带框的问题只能选一题只能选一题只能选一题));在B 类题中根据自己课题选一类题中根据自己课题选一、、两题作答作答。

注意所选的问题不要太相近注意所选的问题不要太相近,,同一同一个个问题问题在一个在一个在一个班内不要班内不要班内不要重复重复重复选选。

一、 A 类题类题((通用通用题题) 1、 课题设计中你使用了哪些软件,这些软件各自的主要作用是什么?2、 说说Keil 软件的主要功能和作用。

3、 Proteus 软件的主要功能是什么?4、 你所使用的Keil 软件是哪个版本的?如果要编译时生成hex 文件,应该如何设置?5、 在keil 中对C 语言源程序调试时,若要启动调试时直接进入到main 函数,要如何设置?6、 课题中你是用C 语言编程的,使用C 语言编程有什么好处,说说你的看法。

7、 课题中你是用MCS51单片机的汇编语言编程的,使用汇编语言编程有何特点,说说你的看法。

8、 51单片机的C 语言(C51)与标准ANSI C 有何不同,简单谈谈你的体会?9、 51单片机C 语言编程,XBYTE 关键字有什么作用?试举例说明。

10、 C51语言中,如何来定义一个中断服务子程序?11、 C51语言中,中断服务子程序是如何与各自的中断类型对应的(如外部中断0)?试举例说明。

12、 能实现电子电路仿真的软件有很多,如Multisim 、PSPICE 、OrCAD 、EWB 等,Proteus 相对这些软件来说有什么特点?13、 Proteus 仿真软件中,要使用一个+9V 的POWER 电源,要在从哪个工具箱(绘图工具栏)中选取哪个部件,要如何设置成+9V ?14、 Proteus 仿真软件中,如果要使用一个多通道示波器,该从哪个工具箱(绘图工具栏)中选取哪个部件?15、 Proteus 软件中,从元器件库中调出的元件有的不能仿真,为什么?16、 Proteus 仿真时,如何指定单片机所用的程序代码?说说操作方法。

答辩倒计时系统设计

答辩倒计时系统设计

答辩倒计时系统设计摘要本设计是一个基于AT89C51单片机对答辩倒计时系统进行设计,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个倒计时为15分钟的答辩倒计时器。

该倒计时器主要由按键电路、复位电路、晶振电路、数码管显示电路以及蜂鸣器组成。

本倒计时系统能够在计时只剩余三分钟时发出声进行提示,并且结束时长鸣直至重启或关闭,由LED灯显示电源的开启状况,由数码管显示实时时间。

本设计主要特点是计时从15到00分钟的倒计时系统,方便了在计时精度要求不高的情况下计时,因为计时精度为1,所以系统电路比较简单。

另外硬件部分设置了复位、开始、暂停、停止按键,可以对倒计时系统进行计时控制。

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

关键字:倒计时系统;A T89C51单片机;Keil;Proteus目录1 设计目的与要求 (1)1.1 设计目的 (1)1.2 设计要求 (1)2 系统硬件设计 (1)2.1 总体设计方案 (1)2.2 主要元件 (2)2.2.1 AT89C51单片机及其引脚说明 (2)2.2.2 74LS245 (3)2.2.3 数码管:7SEG-MPX4-CC-BLUE (4)2.3 局部电路设计 (4)2.3.1 晶振电路 (4)2.3.2 复位电路 (5)2.3.3 开关控制电路 (5)2.3.4 显示电路 (6)2.3.5 提示警告电路 (7)2.4 总体电路设计 (7)3 系统软件设计 (8)3.1 总体程序流图 (8)3.2 倒计时器设计流程框图 (10)3.3 按键消抖流程框图 (10)4 仿真与调试 (11)4.1 上电后系统显示 (11)4.2 按下“开始键” (11)4.3 按下“停止键”和“复位键” (12)5 总结 (13)5.1 设计总结 (13)5.2 心得 (13)参考文献 (14)附录1 电路原理图 (15)附录2 C语言源程序 (16)1设计目的与要求1 设计目的与要求1.1 设计目的本设计基于AT89C51单片机进行15分钟的答辩倒计时系统的设计。

基于单片机的电子钟的设计答辩稿

基于单片机的电子钟的设计答辩稿

软件设计

程序流程图 源程序设计:先设计 主程序 ,然后再设 计MAX7219的驱动 程序(为子程序)和 DS1302的驱动程序。 最后对各程序进行检 查调试。

开始
MAX7219初始化
DS1302初始化
从DS1302读取时间
时间送MAX7219显示
电子时钟系统设计流程

如图


一、绘制原理图。 二、编写汇编语言程 序,在KEIL上进行 程序调试生成目标代 码。 三、把目标代码加入 到单片机内,在 proteus上进行仿真。
Protel DXP 与 Proteus 电路设计
源程序设计 生成目标代码
基于Proteus仿真
硬件电路设计试注意事项



1.单片机时间基准振荡电路中振荡晶体频率 的选择必须要和程序中的时间基准相一致。 2.由于单片机处理数据过程中要响应中断等 原因,而中断服务程序所花费的时间必须在中 断返回后在计时单元中扣除掉,否则精确度会 变差。 3.在仿真调试中调试数码管的发光时间时, 需要反复修改程序中的给定的时间,直到整体 上的显示效果较好,不会有闪烁的现象产生。
硬件设计
本文的电子时钟系统硬件是以单片机(AT89C51 为核心,时钟芯片DS1302、数码管显示驱动芯 片MAX7219等元器件组成。
单片机晶振电路
8位LED显示
单片机复位电路
时钟芯片 DS1302
AT89C51 单片机
数码管显示驱 动芯片 MAX7219 按键电路
蜂鸣器
时钟芯片DS1302

本时钟可实现的功能




具有实时显示时间和日期的功能。 时间显示格式为:时-分-秒;日期显示格式为: 年-月-日。 可实现秒表功能。 实现定时闹铃功能,当所定的时间到时,产生 断续的蜂鸣声。 实现倒计时功能。当进入调整功能时,按第一 个键K1进行减运算,按第二个键K2进行加运 算。 按下第四个键K4,可以进行时间\日期切换,8 位数码管将显示时间或日期,采用24小时制。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机应用课程设计答辩倒计时器指导教师:付文秀老师电子信息工程学院自动化070107212019尚麟宇答辩倒计时器设计报告一.实验目的及意义:1. 理解学习LED数码管显示、矩阵键盘以及定时器、中断的运用。

2. 学习C51语言的应用。

3. 学习Proteus、KEIL软件的应用。

4. 培养解决实际问题的能力。

二.设计任务及要求(系统的主要功能)1. 利用4位数码管显示当前倒数值。

2. 利用阵键盘输入所要倒计时的时间长短,并送至数码管显示。

3. 利用定时器实现秒定时功能。

4. 当倒计数值等于30秒和0秒时,蜂鸣器发分别发出响声。

三、工作原理及设计思路通过矩阵键盘列扫描触发外部中断0,判断出是第几次输入后在相应数码管上显示出所输入的数字。

数码管采用动态扫描法。

当4位数字输入完毕后,若矩阵键盘的A或B被按下时,启动倒计时。

定时器0完成计时功能,每隔50ms时使标志位加1,当标志位等于20时表示1秒时间到,此时将4位数码管显示的数字减1。

当4位数码管显示的数字等于30时,蜂鸣发出“嘀嘀嘀”的声音;当4位数码管显示的数字等于0时,蜂鸣持续响声一段时间,待响声结束后数码管无显示,完成倒计时功能。

四、硬件电路描述五、软件设计流程及描述1. 初始化参数设置:此部分主要是外部中断0和定时器0的初始化:定时器0工作在模式1,因为要求定时50ms,所以结合模式1的特点,设置好定时器0的初值;外部中断需要设置触发类型。

当这两种中断在同一个程序中被使用时,需要设置中断优先级,因为倒计时工作时,每一秒都需要严格控制,故定时器0的中断优先级比外部中断0要高。

2. 矩阵键盘输入部分:通过矩阵键盘来实现倒计时数的输入。

该矩阵键盘通过P2口输入,高四位对应列,低四位对应行。

判断是否有键按下是通过外部中断0来实现的,在下面的“4. 外部中断0服务部分”会有介绍。

若有键按下需要查询该键值时,先扫描4列、再扫描4行,找到相应的行、列值后,查找相应数组得到按键代表的值。

3. 动态显示部分:4位数码管的显示是通过动态扫描来实现的。

选通不同的数码管时,查找相应数组来输出该数码管的值;每一位数码管被选通的时间很短,不停的选通这4个数码管,这样,由于人眼的视觉暂留效应,就会很好的完成4位数码管的显示。

4. 定时器0中断服务部分:定时器T0用于时间计时。

当输入4位数字完毕、且第5次输入数字A或B时,定时器0被开启。

定时器0的溢出周期设为50ms,中断累计20次(即1s)时对这个4位数字进行减1操作。

进入中断服务程序时定时器0就会被重新写入初值并进行50ms及时。

优先级高于外部中断。

5. 外部中断0服务部分:矩阵键盘的4列通过与门接入到外部中断0,当扫描外部中断时,若键盘上某个键被按下,则与门输出低电平,外部中断被触发,进入到外部中断0的子程序中。

在外部中断的子程序中,通过设置一个标志位来判断按键是否被按下,且通过行、列扫描找到改键值,主程序中,通过相应按键标志位是否被开启来判断输入的数字在哪一位,并在该位数码管上显示这个数字。

当4个数字全部输入完毕时,通过第5次输入数字A或B来开启倒计时功能。

六、源程序代码及注释#include <REG52.H>#define uchar unsigned char#define unit unsigned intsbit CE573=P1^4 ; //74HC573的EAsbit BUZZER=P1^5; // 蜂鸣器sbit INT_0 =P3^2; //外部中断0char code tab[4][4]={ {1,2,3,4},{5,6,7,8},{9,0,10,11},{0,0,0,0} }; //0到F的16个键植code unsigned char digseg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};// 0 1 2 3 4 5 6 7 8 9 code unsigned char segsel[]={0xfe,0xfd,0xfb,0xf7};//分别对应选择数码管1.2.3.4//数码管段选unit num;uchar flag; //主函数中判断第几次输入的标志位uchar t0; //定时器0的标志位uchar key1,key2,key3,key4;//第1.2.3.4次输入的值uchar keyfound; //判断是否按键的标志位uchar temp;//键盘输入内容的暂存void delay(unsigned int a){unsigned char i;while(a--)for(i=100;i>0;i--);}//延时子程序char kbscan() //键盘扫描{unsigned char hang,lie,key;if(P2!=0xf0)delay(5);if(P2!=0xf0){switch(P2&0xf0) //扫描列{case 0xe0:lie=3;break;case 0xd0:lie=2;break;case 0xb0:lie=1;break;case 0x70:lie=0;break;}P2=0x0f;switch(P2&0x0f) //扫描行{case 0x0e:hang=0;break;case 0x0d:hang=1;break;case 0x0b:hang=2;break;case 0x70:hang=3;break;}P2=0xf0;while(P2!=0xf0); //若按键没有放开,则一直等待key=tab[hang][lie]; //查找数组得到相应键值}elsekey=0;return (key);}void display(unit x) //动态扫描子程序{uchar qian,bai,shi,ge;qian=x/1000;bai=x%1000/100;shi=x%100/10;ge=x%10;CE573=1;P1=segsel[3];P0=digseg[ge];delay(5);P1=segsel[2];P0=digseg[shi];delay(5);P1=segsel[1];P0=digseg[bai];delay(5);P1=segsel[0];P0=digseg[qian];delay(5);}void main(){ TMOD=0x01;//定时器0工作在模式1TH0=(65536-50000)/256;TL0=(65536-50000)/256;//50ms定时初值设置EX0=1;//外部中断0开启IT0=0;//外部中断触发类型//t0=0;ET0=1;//定时器0中断开启PT0=1;//定时器0中断优先EA=1;//中断开启flag=1;//显示标志位P2=0xf0;//清空键盘P0=0xff;//清屏while(flag==1) //等待输入第一位数字{do{}while (keyfound!=1); //若标志位不为1,则一直执行死循环,等待第一次输入key1=temp; //有输入后,key1得到第一个输入的数字keyfound=0; //清零标志位P0=digseg[key1];P1=segsel[0]; //显示第一位数字flag=2;}while(flag==2){do{}while(keyfound!=1); //若标志位不为1,则一直执行死循环,等待第二次输入key2=temp; //key2取得第2个输入的数字keyfound=0; //标志位清零flag=3;}while(flag==3){do{ P0=digseg[key1];P1=segsel[0]; //显示前两位数字delay(5);P0=digseg[key2];P1=segsel[1];delay(5);} while(keyfound!=1);//若标志位不为1,则一直执行死循环,等待第三次输入key3=temp; //keu3取得第3个输入的数字keyfound=0; //标志位清零flag=4;}while(flag==4){do{ P0=digseg[key1]; //显示前三位数字P1=segsel[0];delay(5);P0=digseg[key2];P1=segsel[1];delay(5);P0=digseg[key3];P1=segsel[2];delay(5);} while(keyfound!=1);//若标志位不为1,则一直执行死循环,等待第四次输入key4=temp; //key4取得第4个输入的数字keyfound=0; //标志位清零flag=5;do{ P0=digseg[key1];P1=segsel[0]; //显示前四位数字delay(5);P0=digseg[key2];P1=segsel[1];delay(5);P0=digseg[key3];P1=segsel[2];delay(5);P0=digseg[key4];P1=segsel[3];delay(5);} while(1);}}void vINT0(void) interrupt 0 //外部中断0子程序{EX0=0; //关闭外部中断delay(1); //防抖设计if(INT_0==0){delay(1);if(INT_0==0){ keyfound=1; //标志位=1表示有键按下temp=kbscan(); //得到这个键值if((temp>=10)&&(flag==5)) //当4位数字输入完毕且第5次输入A或B时,启动倒计时功能{num=key1*1000+key2*100+key3*10+key4; //将这4个数表示为一个4位数t0=0; //定时器0的标志位从0开始取TR0=1; //定时器0启动while(1){if(num==30) //剩30秒时,蜂鸣发出“滴滴声{BUZZER=0;delay(100);BUZZER=1;delay(100);BUZZER=0;delay(100);BUZZER=1;}if(num==0) //0秒时,蜂鸣发出声音,数码管关闭{TR0=0;BUZZER=0;delay(5000);BUZZER=1;P0=0xff;}if(t0==20){t0=0; //执行每秒减一个数num--;}display(num);}}else if((temp>=10)&&(flag<5)) //当前4次按下A或B时,以0对待temp=0;else ;P2=0xf0; //恢复键盘扫描EX0=1; //开启外部中断}}}void timer0() interrupt 1 //定时器0的中断服务程序,定时50ms ,当to=20时表示一秒时间到{TH0=(65536-50000)/256;TL0=(65536-50000)/256;t0++;}七、课程设计体会很荣幸这学期能够在付文秀老师的指导下,完成我的单片机课程设计。

相关文档
最新文档