蓝桥杯第八届省赛_基于单片机的电子钟程序设计与调试
- 格式:pdf
- 大小:158.13 KB
- 文档页数:2
单片机闹钟设计程序报告1. 引言闹钟作为人们日常生活中的常用物品,不仅有叫醒人们起床的功能,还可以作为提醒的工具。
随着科技的进步,单片机闹钟逐渐取代了传统的机械闹钟,成为人们生活中不可或缺的一部分。
本报告旨在介绍一个基于单片机的简单闹钟设计程序。
2. 设计方案本设计方案使用了单片机和数码管作为主要硬件,通过对单片机的编程,实现了闹钟的基本功能,包括时间设置、闹钟时间设置、闹钟触发、蜂鸣器报警等。
2.1 硬件设计硬件方面,本设计基于某型号的单片机和数码管。
单片机通过相关的引脚与数码管相连,通过控制引脚的电平来显示不同的数字。
2.2 软件设计软件方面,本设计使用C语言编程实现。
主要的功能包括获取当前时间、显示时间、设置时间、设置闹钟时间、闹钟触发检测、蜂鸣器报警等。
3. 程序实现3.1 初始化设置在程序的开始部分,需要对单片机进行初始化设置。
包括设置引脚的输入输出模式、设置计时器、设置中断等。
3.2 时间显示为了实现时间显示的功能,我们需要通过单片机的计时器来不断获取当前时间,并将其转换为时、分、秒的格式。
然后通过数码管显示出来。
3.3 时间设置通过给单片机的某个引脚接入按钮,实现时间设置功能。
当按钮被按下时,单片机进入时间设置模式。
此时,用户可以通过另外的按钮来逐个调整时、分、秒的数值。
3.4 闹钟时间设置类似于时间设置,闹钟时间设置也需要通过按钮来实现。
用户可以按下对应的按钮来设置闹钟的时、分,设置完毕后,单片机会将设置的时间保存起来。
3.5 闹钟触发检测在每一次时间显示的循环中,程序都会检测当前时间是否与闹钟时间相符。
如果相符,则触发闹钟,蜂鸣器开始报警。
3.6 蜂鸣器报警通过单片机的一个输出引脚,连接到蜂鸣器,实现蜂鸣器的报警功能。
当闹钟触发时,单片机会给对应的引脚输出一个高电平,从而使蜂鸣器发声。
4. 总结通过对单片机闹钟设计程序的实现,我们成功实现了闹钟的基本功能,包括时间设置、闹钟时间设置、闹钟触发、蜂鸣器报警等。
基于单片机8路抢答器的设计与实现基于单片机的8路抢答器是一种常见的电子竞赛设备,用于测验、培训或竞赛等活动中进行抢答的过程。
它能够为多个参与者提供公平竞争机会,并通过显示屏和声音提示来呈现结果。
下面是一个基于单片机的8路抢答器的设计与实现的参考内容。
一、硬件设计:1. 微控制器选择:可以选择一款适合的单片机作为抢答器的主控芯片,常见的选择有STC89C52、AT89C52、PIC16F877A 等。
2. 输入部分设计:为每个参与者设置一个按钮,用于抢答。
可以使用电子按键、触摸按钮等。
3. 显示部分设计:可以选择LCD液晶显示屏或数码管进行显示,显示参与者的编号或抢答进度等信息。
4. 声音提示设计:可以使用蜂鸣器或扬声器作为声音提示装置,用于鸣笛提示抢答结果。
5. 电源部分设计:选择合适的电源模块,如直流电源模块或电池供电。
二、软件设计:1. 系统初始化:设置IO口的输入输出状态,初始化LCD显示屏,配置中断等。
2. 抢答逻辑:设置抢答模式,设定抢答者数量,记录抢答时间,并根据抢答顺序进行显示和提示。
3. 显示与提示:根据抢答结果,将结果显示在LCD屏幕上,并通过声音提示器进行声音提示。
4. 延时与计时:设置合适的延时函数和计时器用于计算抢答的时间长度。
5. 节拍控制:设置一个节拍控制函数,用于判断抢答按钮的按下时间是否在某一节拍内,以增加抢答的公平性。
6. 按键检测与处理:使用中断或轮询方式对抢答器上的按键进行检测和处理,并根据按键的触发来执行相应的命令。
三、实现步骤:1. 硬件搭建:按照上述设计,完成抢答器的硬件搭建,包括连接单片机与按钮、显示屏和声音提示器等。
2. 程序编写:根据所选的单片机型号,使用对应的编程软件,编写相应的程序。
3. 调试与测试:将编写好的程序下载到单片机中,通过串口或者编程器与单片机进行连接,进行调试与测试。
4. 优化与改进:根据实际使用情况,进行程序的优化和改进,以提高系统的稳定性和可靠性。
1.AT89系列单片机提供了两种省电方式:分别是__空闲模式_____和___掉电模式______。
2.远距离传输通常应采用__串行______通信。
3.MCS-51单片机有5个中断源,2个优先级,上电复位时,__外部中断0______中断源优先级级别最高。
4.MCS-51单片机的堆栈区只可设置在_____片内RAM ____(器),堆栈寄存器SP是____8___位寄存器。
5.MCS-51单片机外部中断请求信号有_电平方式________和脉冲方式,在电平方式下,当采集到INT0、INT1的有效信号为___低电平______时,激活外部中断。
6.访问89C51片外数据存储器采用的是__寄存器间接_____寻址方式。
7.进行BCD码运算时,只需要在ADD和ADDC后面紧跟一条__DA__A____指令即可。
8.计算机(微处理器)能够直接识别并执行的语言是_机器语言______。
9.十六进制数D/A转换为十进制数是___218 _____,二进制数10110110转换为十六进制数是__B6______。
10.键盘工作方式有三种,分别是__编程扫描______、___定时扫描______和中断扫描方式。
11.A/D转换的基本功能是把___模拟量______变成数字量。
12.溢出标志OV只有在进行___符号数______加法运算时才有意义,OV=0表示加法运算结果__正确_____,OV=1表示加法运算结果超出了_________所能表达的符号数有效范围。
13.MCS51单片机的外部中断信号请求信号若设定为电平方式,只有在中断请求引脚上采样到有效的___低电子______信号时,才能激活外部中断,而在脉冲方式时,只有在中断请求引脚上采样到脉冲的____后沿负跳_____有效信号时,才能激活外中断。
14.MCS51单片机的一个机器周期包含了___6______个状态周期,每个状态周期又可划分为___2______拍节,一个机器周期实际又包含了______12___个震荡周期。
目录第一章引言 (3)选题背景及其意义 (3)877A单片机的介绍 (3)设计要求及其功能 (4)本设计实现的功能 (4)第二章系统整体方案 (5)系统整体方案框图 (5)设计要求 (5)按照设计要求画出系统框图 (5)控制系统时刻分析表 (6)处置器的选择 (6)时钟芯片的选择 (7)液晶显示器的选择 (7)第三章硬件部份的设计 (7)系统部份 (7)键盘接口电路 (8)显示部份 (9)第四章控制系统软件部份 (10)软件介绍 (10)程序流程图 (11)按键的扫描子程序 (12)铃声控制程序 (12)仿真电路 (13)第五章总结 (15)参考文献 (16)致谢 (16)基于单片机的可编程作息时刻控制器的设计何欢(伊犁师范学院电子与信息工程学院电子信息科学与技术09-2班,新疆伊宁市 835000)摘要:本设计是作息时刻控制器,由单片机最小系统、按键模块、数码管显示模块、铃声模块组成。
采用PIC16F877A单片机、主频4MHZ晶振,通过按键STATE、TEN、UNIT控制时刻的校正时刻和铃声设定;数码管显示模块用来显示时刻,显示格式为“时分”,并能够按照需要显示年、月、日,由数码管小数点闪动作为秒计数;铃声模块进行到时提示并出相应动作:发光二极管闪亮,同时播放音乐。
时钟芯片采用的是DS1302,此芯片是DALLAS 公司推出的涓流充电时钟芯片,其内含有一个实不时钟/日历和31 字节静态RAM,并通过简单的串行接口与单片机进行通信。
实不时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每一个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。
DS1302 工作时功耗很低,维持数据和时钟信息时功率小于1mW。
该设计采用C语言编写程序,由于汇编语言的移植性比较差,而C语言则比较灵活,许多子函数都能够直接移植过去。
关键词:PIC16F877A单片机;晶振;液晶显示器;源程序Based on single chip microcomputer controller design ofprogrammable calendarHehuan(ili normal college of electronic and information engineering college of electronic information science and technology 09-2 class, xinjiang yining city, 835000 )Abstract:This is the time schedule controller designed by single chip microcomputer minimum system module, buttons, digital tube display module, alarm module. Using PIC16F877A MCU, 4 MHZ crystal vibration main frequency, through the button STATE, TEN, UNIT control time correction time and set ring; Digital tube display module is used to display time, display format of"time", and can according to need to display year, month, day, by the digital tube decimal counting flashing as seconds; Bell module to remind and make the corresponding action: light-emitting diodes, play music at the same time.Used clock chip DS1302, this chip is DALLAS company to launch a trickle charging the clock chip, containing a real-time clock/calendar and 31 bytes static RAM, and communicate with single chip microcomputer with simple serial interface. Real-time clock/calendar circuit provides seconds, minutes, and information day, date, month, year, number of days per month and leap year the number of days can be automatically adjusted, clock operation by an AM/PM indicator decided to adopt 12 or 24 hour format. DS1302 power consumption is low, while working to keep data and clock information when the power is less than 1 mw.This design USES the C language program, due to the portability of assembly language, but C is more flexible, Many functions can be directly transplanted in the past.Keywords: PIC16F877A MCU;crystals and liquid crystal display; the source program第一章引言选题背景和意义自从人类学会计时开始,计时方式由在木棍和骨头上刻标记,随着人类的智慧的进展,到后面利用计时工具不断的改良,由最开始的圭表、日晷、漏壶、漏箭、机械闹钟、秒表、沙漏、怀表、自摆钟、石英钟等。
CHANGZHOU INSTITUTE OF TECHNOLOGY科研实践题目:基于单片机的数字电子钟二级学院(直属学部):延陵学院专业:电气工程及其自动化班级:学生姓名:学号:指导教师姓名:职称:副教授目录一、绪论 (3)1.1课题研究的背景和意义 (3)1.2 课题研究的目的 (3)二、课题设计概况 (4)2.1 课题主要实现功能 (4)2.2 课题功能分析 (4)2.3 课题功能实现过程的描述 (4)三、总体设计方案 (5)3.1 单片机的选择 (5)3.2数字电子钟显示方案论证 (5)四、硬件设计 (6)4.1 总体设计结构图 (6)4.2 单片机最小系统的设计 (6)4.3 输入电路的设计 (7)4.4 输出电路的设计 (8)五、软件设计 (10)5.1 主程序结构图 (10)5.2 主程序流程图 (10)5.3 主要程序模块分析 (12)5.3.1 延时程序 (12)5.3.2 计24小时程序 (12)5.3.3 暂停/继续程序 (14)5.3.4 校时灯闪程序 (14)5.3.5 16进制转BCD码程序 (15)六、Protues和keil仿真 (16)6.1 proteus软件的介绍及使用 (16)6.2 Keil软件的介绍及使用 (16)6.3 数字电子钟的仿真 (16)七、实物制作 (21)7.1电路板焊接 (21)7.2电路板调试 (21)八、总结和展望 (22)8.1科研实践总结 (22)8.2对未来的展望 (22)附录 (23)参考文献 (23)元器件清单 (23)原理图和PCB图 (24)C语言程序代码 (25)实物图 (30)一、绪论1.1课题研究的背景和意义20世纪末,电子技术获得了飞速发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记时间,忘记了要做的事情,但是,一旦重要的事情,一时的耽误可能酿成大祸。
目录1 . 绪论 (1)1.1概述 (1)1.1.1 51电子闹钟发展趋势 (1)1.1.2 本课题研究的主要内容 (1)1.251电子闹钟简介 (1)1.2.1 开发的目的和意义 (2)1.2.2 51电子闹钟的优点 (2)1.2. 3 51电子闹钟的特点 (2)2. 系统方案的设计 (3)2.1系统概述 (3)2.1.1系统方案的确定 (3)2.1.2系统设计思路与步骤 (3)2.2芯片基本工作原理及其应用 (5)2.2.1引脚介绍 (4)2.2.2电源 (5)2.2.3存储器 (5)2.2.4应用 (5)2.3.1 LM386介绍 (6)2.3.2 LM386特点..................................... 错误!未定义书签。
3.系统的设计 (8)3.1.1单片机系统的设计 (8)3.1.2 按键电路的设计 (9)3.1.3复位电路的设计 (10)3.1.4显示电路的设计 (9)3.2系统软件的设计 (10)3.2.1软件设计 (10)3.2.2整个系统软件部分的总体设计 (16)4.系统的调试和性能分析 (16)4.1系统的调试方法 (16)4.1.1输入按键的调试 (16)4.1.2复位电路的调试 (17)4.1.3显示电路的调试 (17)4.1.4整个系统的联调 (17)参考文献 (19)附录1 原理图 (16)附录3 (程序) (17)1 .绪论1.1概述电子闹钟在科学技术高度发展的今天,千家万户都少不了它,所以很多家庭个人都需要有一个电子闹钟,为人们提供报时方便,但普通电子闹钟不够方便实用。
本文给出了一种以51芯片电子闹钟设计方法,从而给人们带来更为方便的工作与生活。
1.1.1 51电子闹钟发展趋势现代的快节奏生活给人们的精神上带来了很大压力。
如何排解或缓解这些压力已经成为很多人关心的问题。
单片机电子闹钟是具发前闹钟创新性的系统,它代表了时代的发展趋势。
4 软件设计模块4.1单片机编程语言随着单片机技术日新月益的发展,很多人经常会被单片机的各种各样的编程语言搞糊涂。
因为单片机目前的编程语言常见的有4种,即汇编语言、C语言、PL/M和BASIC 语言。
究竟要学习哪一种编程语言好呢?下面我们对这4种语言作详细介绍。
BASIC编程语言BASIC是一种高级语言,它的英文含义是“初学者通用符号指令代码”,是在1965年5月,由美国科学家托马斯·库尔兹研制出来的。
10多年后,微软公司把它移植到微型机上。
几十年来,BASIC语言一直被认为是初学者编程的语言。
它已经由QBASIC 发展到VB#版本,具备了很多结构化思想和编程方式,如函数、模块、局部变量、全局变量、数据传递等。
早期的BASIC语言由于生成的代码不是最终目标机器的代码,而是经过一个RUNTIME程序解释后运行的,所以执行效率低,但这种逐行解释的方法很容易找到程序中的错误,而不是当程序执行完才能显现出来。
而单片机的BASIC编译器是直接将程序代码编译成相应芯片的机器码,不需要在单片机的内存中驻留RUNTIME程序,执行效率与其他编译器编译出来的一样。
此外还需要注意,BASIC为简化使用变量,所有变量都用浮点值,这一点与c语言存在差异。
以MCS—Electronics公司开发出来的BASCOM一8051开发环境为例,简要介绍以BASIC语言为基础的单片机编程系统。
它和一般BASIC语言一样具有如:For、To、Step、If、Else、End、SelectCase等等命令,其用法及功能是没什么区别的,因此比较容易人门。
另外,它还有针对单片机硬件所设计的命令如:LCD命令可以用一条命令来实现LCD的显示操作。
Cls /清LCD屏Lcd“How are you”/向LCD输人字符串“How are you”类似于这样的命令主要是提供了直接对单片机及其外部硬件的操作,特别是提供了对单片机端口的直接操作,如:P1,P2,P2.1,Po.3等等,简化了整个开发过程,是开发人员重点学习的部分。
蓝桥杯单片机内部振荡器频率设置方法全文共四篇示例,供读者参考第一篇示例:蓝桥杯是一项面向大学生的计算机与软件类竞赛,旨在培养学生的计算机应用能力和创新精神。
在蓝桥杯比赛中,单片机内部振荡器频率设置是一个重要的技术问题。
本文将介绍关于单片机内部振荡器频率设置方法的相关内容。
在单片机中,振荡器是一个非常重要的部件,它用于产生时钟信号来控制单片机的运行。
在一些需要精准时钟信号的应用中,我们需要准确地设置振荡器的频率。
在蓝桥杯比赛中,有时候需要自己来设置单片机内部振荡器的频率,以满足某些特定的需求。
在单片机中,内部振荡器的频率可以通过设置相关的寄存器来实现。
不同的单片机厂家和型号可能有不同的设置方法,下面我们以常用的STC单片机为例来介绍设置内部振荡器频率的方法。
STC单片机的内部振荡器频率设置主要涉及两个寄存器:RCCCON和PLLCR。
RCCCON寄存器用于设置系统时钟源的选择和分频比,PLLCR寄存器用于设置PLL(锁相环)的倍频系数。
通过合理地设置这两个寄存器,我们就可以得到我们需要的内部振荡器频率。
我们需要了解STC单片机的时钟树结构,以便根据需要选择合适的时钟源和设置分频比。
接着,我们需要根据应用的需求来确定内部振荡器的频率。
通常情况下,我们可以选择晶振作为时钟源,然后通过PLL倍频来得到我们需要的频率。
在设置振荡器频率时,我们需要注意保证时钟信号的稳定性和精准性。
在实际应用中,我们还可以通过外部电路来进一步提高时钟信号的质量。
单片机内部振荡器频率设置是一个需要注意细节的技术问题。
通过合理地设置寄存器,并结合外部电路的辅助,我们可以实现我们需要的内部振荡器频率。
在蓝桥杯比赛中,掌握这项技术将有助于我们更好地完成相关的任务,也会对我们今后的学习和工作产生积极的影响。
【2000字】第二篇示例:蓝桥杯单片机内部振荡器频率设置方法在单片机的应用中,内部振荡器是非常重要的一个部分,它决定了单片机的运行速度,因此设置好内部振荡器的频率是非常关键的。
《单片机技术》课程设计说明书数字电子钟系、部:电气与信息工程学院学生姓名:指导教师:职称专业:班级:完成时间:2013-06-07摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。
所以设计一个简易数字电子钟很有必要。
本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。
该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。
具有时间显示、整点报时、校正等功能。
走时准确、显示直观、运行稳定等优点。
具有极高的推广应用价值。
关键词电子钟;AT89S52;硬件设计;软件设计ABSTRACTClock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value.Key words Electronic clock;;AT89S52;Hardware Design;Software Design目录1设计课题任务、功能要求说明及方案介绍 (1)1.1设计课题任务 (1)1.2功能要求说明 (1)1.3设计总体方案介绍及原理说明 (1)2设计课题硬件系统的设计 (2)2.1设计课题硬件系统各模块功能简要介绍 (2)2.2设计课题电路原理图、PCB图、元器件布局图 (2)2.3设计课题元器件清单 (5)3设计课题软件系统的设计 (6)3.1设计课题使用单片机资源的情况 (6)3.2设计课题软件系统各模块功能简要介绍 (6)3.3设计课题软件系统程序流程框图 (6)3.4设计课题软件系统程序清单 (10)4设计结论、仿真结果、误差分析、教学建议 (21)4.1设计课题的设计结论及使用说明 (21)4.2设计课题的仿真结果 (21)4.3设计课题的误差分析 (22)4.4设计体会 (22)4.5教学建议 (22)结束语 (23)参考文献 (24)致谢 (25)附录 (26)1 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务设计一个具有特定功能的电子钟。
蓝桥杯单片机内部振荡器频率设置方法全文共四篇示例,供读者参考第一篇示例:蓝桥杯单片机内部振荡器频率设置方法在单片机的应用中,振荡器频率的设置是非常重要的,它直接影响到单片机的工作性能和稳定性。
蓝桥杯是我国知名的计算机大赛,很多参赛选手都需要在比赛中进行单片机的编程和调试工作。
在蓝桥杯比赛中,单片机内部振荡器频率的设置是一个常见的问题。
本文将介绍关于蓝桥杯单片机内部振荡器频率设置方法的相关知识。
一、单片机内部振荡器单片机内部振荡器是一种基于晶体振荡原理的电子元件,用于为单片机提供时钟信号。
单片机通过时钟信号来同步各个系统模块的工作,实现数据的同步处理和指令的执行。
在蓝桥杯比赛中广泛应用的单片机有51系列和STC系列,它们都内置了振荡器电路。
在单片机内部振荡器电路中,一般会包含晶体振荡器和振荡放大器两部分。
晶体振荡器用于产生振荡信号,而振荡放大器用于放大振荡信号的幅度,使其能够驱动单片机的时钟输入端。
在单片机工作时,晶体振荡器会将外部的晶振信号转换为时钟信号,为单片机提供稳定的时序基准。
单片机内部振荡器的频率设置可以通过软件来实现。
在单片机的程序中,可以通过配置寄存器来设置内部振荡器的频率。
不同型号的单片机有不同的频率设置方法,下面以STC系列单片机为例,介绍一下内部振荡器频率的设置方法。
1. 设置晶振频率STC系列单片机内部振荡器默认的晶振频率为12MHz,如果需要改变振荡器的频率,首先需要设置晶振频率。
```cunsigned char CLK_SEL = 0x10; // 晶振频率设置为12MHz```2. 设置时钟分频单片机内部振荡器的频率一般比外部晶振频率高,需要通过时钟分频来控制内部振荡器的输出频率。
将设置好的晶振频率和时钟分频写入到相应的寄存器中,并打开内部振荡器输出。
```cunsigned char CLK_CFG = CLK_SEL | FREQ_DIV; // 合并设置CLK_REG = CLK_CFG; // 将设置写入时钟寄存器中```通过以上步骤,就可以实现STC系列单片机内部振荡器频率的设置。
第⼋届蓝桥杯省赛单⽚机组试题
基于单⽚机的电⼦钟程序设计与调试(70分)
⼀、基本要求
1.1使⽤CT107D单⽚机竞赛板,完成“电⼦钟”功能的程序设计与调试;
1.2设计与调试过程中,可参考组委会提供的“资源数据包”;
1.3Keil⼯程⽂件以准考证号命名,完成设计后,提交完整、可编译的Keil
⼯程⽂件到服务器。
⼆、硬件框图
三、功能描述
3.1初始化
1)关闭蜂鸣器、继电器等⽆关外设;
2)设备初始化时钟为23时59分50秒,闹钟提醒时间0时0分0秒。
3.2显⽰功能
1)时间显⽰格式
2)温度显⽰格式
3.3按键功能
1)按键S7定义为“时钟设置”按键,通过该按键可切换选择待调整的时、分、秒,当前选择的显⽰单元以1秒为间隔亮灭,时、
分、秒
的调整需注意数据边界属性。
2)按键S6定义为“闹钟设置”按键,通过该按键可进⼊闹钟时间设置功能,数码管显⽰当前设定的闹钟时间。
3)按键S5定义为“加”按键,在“时钟设置”或“闹钟设置”状态下,每次按下该按键当前选择的单元(时、分或秒)增加1个单位。
4)按键S4定义为“减”按键,在“时钟设置”或“闹钟设置”状态下,每次按下该按键当前选择的单元(时、分或秒)减少1个单位。
5)按键功能说明:
按键S4、S5的“加”、“减”功能只在“时钟设置”或“闹钟设置”
状态下有效;
在“时钟显⽰”状态下,按下S4按键,显⽰温度数据,松开按键,
返回“时钟显⽰”界⾯。
3.4闹钟提⽰功能
1)指⽰灯L1 以0.2秒为间隔闪烁,持续5秒钟;
2)闹钟提⽰状态下,按下任意按键,关闭闪烁提⽰功能。
//////////////////////////////main.c//////////////////////////////////////////////#include <reg52.h>#include <onewire.h>#include <ds1302.h>#define uchar unsigned char#define uint unsigned intvoid writedata(uchar gate,uchar mydata);void display();void choose(uchar value);uchar readtab();void m1c0();void blink5s();code uchar tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x0 0,0x40};uchar disp[]={16,16,17,16,16,17,16,16};bit flag20ms,flag500ms,flagin,flagblink,flag100ms,flag400ms,flagpush;uchar tem,shi1,fen1,miao1,shi,fen,miao,mode=1,ii=0,a,b,c,ala=0,alb=0,alc=0,temp80=0xff,count;void main(){uchar value=0xff;TMOD=0x01;TH0=(65536-2000)/256;TL0=(65536-2000)%256;TR0=1;ET0=1;EA=1;writedata(0xa0,0x00);set_time(23,59,50);while(1){miao1=Read_Ds1302(0x81);miao=miao1/16*10+miao1%16;fen1=Read_Ds1302(0x83);fen=fen1/16*10+fen1%16;shi1=Read_Ds1302(0x85);shi=shi1/16*10+shi1%16;tem=rd_tem();while(tem>50)tem=rd_tem();if(flagblink)blink5s();if(flag20ms){flag20ms=0;value=readtab();if(flagblink&&value!=0xff){flagblink=0;flagin=0;P0=0xff;temp80=0xff;writedata(0x80,temp80);}choose(value);}if(mode==1){if(ii==0&&flagpush==0){disp[0]=shi/10;disp[1]=shi%10;disp[3]=fen/10;disp[2]=17;disp[4]=fen%10;disp[5]=17;disp[6]=miao/10;disp[7]=miao%10;}if(mode==2&&flagpush==0){disp[0]=a/10;disp[1]=a%10;disp[3]=b/10;disp[2]=17;disp[4]=b%10;disp[5]=17;disp[6]=c/10;disp[7]=c%10;}if(ii==0){if(!flagin){if(shi==ala&&fen==alb&&miao==alc){count=0;flagin=1;flagblink=1;}}}}}}void choose(uchar value){if(mode==1){switch(value){case 0:m1c0();break;case 4:{if(ii==0){a=ala;b=alb;c=alc;mode=2;disp[0]=a/10;disp[1]=a%10;disp[3]=b/10;disp[2]=17;disp[4]=b%10;disp[5]=17;disp[6]=c/10;disp[7]=c%10;}}break;}}if(mode==2){switch(value){case 4:m1c0();break;}}switch(value){case 8:{if(ii!=0){switch(ii){case 1:{if(++a>=24) a=23;}break;case 2:{if(++b>=60) b=59;}break;case 3:{if(++c>=60) c=59;}break;}}}break;case 12:{if(ii!=0){switch(ii){case 1:{if(a--==0) a=0;};break;case 2:{if(b--==0) b=0;};break;case 3:{if(c--==0) c=0;};break;}}}break;}}void m1c0(){if(mode==1){if(ii==0) {a=shi;b=fen;c=miao;}}if(++ii==4)ii=0;if(mode==1){if(ii==0) set_time(a,b,c);}if(mode==2){if(ii==0) {ala=a;alb=b;alc=c;mode=1;}}}void blink5s(){flagin=0;if(flag100ms){flag100ms=0;temp80^=0x01;P0=0xff;writedata(0x80,temp80);}if(count==50||ii!=0){count=100;flagblink=0;P0=0xff;temp80=0xff;writedata(0x80,temp80);}}void writedata(uchar gate,uchar mydata){P2=(P2&0x1f)|gate;P0=mydata;P2&=0x1f;}void display(){static uchar i;if(ii!=0){if(flag500ms){switch(ii){case 1:{disp[0]=16;disp[1]=16;}break;case 2:{disp[0]=a/10;disp[1]=a%10;disp[3]=16;disp[4]=16;}break;case 3:{disp[3]=b/10;disp[4]=b%10;disp[6]=16;disp[7]=16;}break;}}else{switch(ii){case 1:{disp[0]=a/10;disp[1]=a%10;}break;case 2:{disp[0]=a/10;disp[1]=a%10;disp[3]=b/10;disp[4]=b%10;}break;case 3:{disp[6]=c/10;disp[7]=c%10;}break;}}}if(++i==8)i=0;writedata(0xe0,0xff);writedata(0xc0,1<<i);writedata(0xe0,~tab[disp[i]]);}uchar readtab(){static uchar i,ok,hang,value;static uint temp;P3=0x0f;temp=P3&0x0f;if(temp==0x0f)i=0;elsei++;if(i==3){i=0;ok=1;switch(temp){case 0x0e:hang=1;break;case 0x0d:hang=2;break;case 0x0b:hang=3;break;case 0x07:hang=4;break;default:hang=0x0f;break;}P3=0xf0;temp=P3&0xf0;switch(temp){case 0x70:value=4*(hang-1);break;case 0xb0:value=4*(hang-1)+1;break;case 0xd0:value=4*(hang-1)+2;break;case 0xe0:value=4*(hang-1)+3;break;default:value=0xff;break;}if(ii==0&&value==12){flagpush=1;disp[0]=16;disp[1]=16;disp[2]=16;disp[3]=16;disp[4]=16;disp[7]=12;disp[5]=tem/10;disp[6]= tem%10;}}P3=0xf0;temp=P3&0xf0;if(temp==0xf0&&ok==1){ok=0;flagpush=0;return value;}elsereturn 0xff;}void str_time0() interrupt 1{static uchar aa,cc,dd;static uint bb;TH0=(65536-2000)/256;TL0=(65536-2000)%256;display();if(aa++==10){aa=0;flag20ms=1;}if(bb++==250){bb=0;flag500ms^=1;}if(cc++==50){cc=0;if(count>=100) count=100;count++;flag100ms=1;}if(dd++==200){dd=0;flag400ms=1;}}//////////////////////////////ds1302.c////////////////////////////////////////////////////// /*程序说明: DS1302驱动程序软件环境: Keil uVision 4.10硬件环境: CT107单片机综合实训平台8051,12MHz日期: 2011-8-9*/#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit SCK=P1^7;sbit SDA=P2^3;sbit RST = P1^3; // DS1302复位void Write_Ds1302_Byte(unsigned char temp){unsigned char i;for (i=0;i<8;i++){SCK=0;SDA=temp&0x01;temp>>=1;SCK=1;}}void Write_Ds1302( unsigned char address,unsigned char dat ) {RST=0;_nop_();SCK=0;_nop_();RST=1;_nop_();Write_Ds1302_Byte(address);Write_Ds1302_Byte(dat);RST=0;}unsigned char Read_Ds1302 ( unsigned char address ){unsigned char i,temp=0x00;RST=0;_nop_();SCK=0;_nop_();RST=1;_nop_();Write_Ds1302_Byte(address);for (i=0;i<8;i++){SCK=0;temp>>=1;if(SDA)temp|=0x80;SCK=1;}RST=0;_nop_();RST=0;SCK=0;_nop_();SCK=1;_nop_();SDA=0;_nop_();SDA=1;_nop_();return (temp);}void set_time(uchar shi,uchar fen,uchar miao){Write_Ds1302(0x8e,0x00);Write_Ds1302(0x80,miao/10*16+miao%10);Write_Ds1302(0x82,fen/10*16+fen%10);Write_Ds1302(0x84,shi/10*16+shi%10);Write_Ds1302(0x8e,0x80);}///////////////////////onewire.c///////////////////////////////////////////*程序说明: 单总线驱动程序软件环境: Keil uVision 4.10硬件环境: CT107单片机综合实训平台(外部晶振12MHz) STC89C52RC单片机日期: 2011-8-9*/#include "reg52.h"#define uchar unsigned char#define uint unsigned intsbit DQ = P1^4; //单总线接口//单总线延时函数void Delay_OneWire(unsigned int t) //STC89C52RC{while(t--);}//通过单总线向DS18B20写一个字节void Write_DS18B20(unsigned char dat){unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = dat&0x01;Delay_OneWire(5);DQ = 1;dat >>= 1;}Delay_OneWire(5);}//从DS18B20读取一个字节unsigned char Read_DS18B20(void) {unsigned char i;unsigned char dat;for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;if(DQ){dat |= 0x80;}Delay_OneWire(5);}return dat;}//DS18B20设备初始化bit init_ds18b20(void){bit initflag = 0;DQ = 1;Delay_OneWire(12);DQ = 0;Delay_OneWire(80);DQ = 1;Delay_OneWire(10);initflag = DQ;Delay_OneWire(5);return initflag;}float rd_tem(){uchar low,high;float tem;uint temp;init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0x44);Delay_OneWire(200);init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0xbe);low=Read_DS18B20();high=Read_DS18B20();temp=high;temp=(temp<<8)|low;tem=temp*0.0625;return tem;}///////////////////////////////////////////////////////////////////////////////////////////。
单片机设计与开发项目程序设计部分模拟试题超声波测距机的功能设计与实现一、硬件框图图1 超声波测距机硬件框图二、功能描述2.1 初始化(1)关闭与试题要求实现功能无关的外围设备。
(2)设备上电初始状态下,处于测距显示界面。
2.2 显示功能(1)测距显示界面图2. 测距显示界面显示项说明:- 本次测量结果:直接显示本次超声测距的数据。
- 上次测量结果:显示上次超声测距的数据。
- 界面标识:字符‘C’用于标识测距显示界面。
(2)数据回显界面图3. 数据回显界面显示项说明:- 编号:设备保存最近4次的测量结果,测量超过4次,则循环覆盖,数据编号用于说明当前数码管显示的数据是第几次测量的结果。
数据编号与数码管显示的测量结果应具有对应关系。
(3)参数设置界面图3. 参数设置界面显示项说明:- 测量盲区:测量盲区用于校准DAC输出电压值,可通过按键进行参数设置。
- 界面标识:字符‘F’用于标识参数设置界面。
2.3 按键功能(1)S4按键,启动测量,按下按键启动一次测距过程,通过数码管显示本次和上次的测量结果。
(2)S5按键, 数据回显, 按下按键进入数据回显界面, 再次按下切换回测距显示界面。
在数据回显界面下, S7定义为翻页功能,查看4次以内的历史数据。
(3)S6按键, 参数设置, 按下按键进入参数设置界面, 再次按下, 保存当前设置, 并切换回测距显示界面。
在参数设置界面下,S7定义为参数调整按键,每次按下S7,测量盲区步进10cm,参数可在0-30之间循环切换调整。
2.4 模拟信号输出功能通过PCF8591实现DAC输出功能,DA输出的电压值取决于超声波测距的结果,关系如下:当S ≤ S0时 V OUT = 0V当S > S0 时 V OUT = (S – S0)*0.02V其中S0为测量盲区, S为当前测量结果, V OUT为DA输出的电压,当测距结果令计算后的VOUT >5V时,可当作异常状态处理,VOUT输出5V。
基于单片机的电子钟程序设计与调试(70分)
一、基本要求
1.1使用CT107D单片机竞赛板,完成“电子钟”功能的程序设计与调试;
1.2设计与调试过程中,可参考组委会提供的“资源数据包”;
1.3Keil工程文件以准考证号命名,完成设计后,提交完整、可编译的Keil
工程文件到服务器。
二、硬件框图
三、功能描述
3.1初始化
1)关闭蜂鸣器、继电器等无关外设;
2)设备初始化时钟为23时59分50秒,闹钟提醒时间0时0分0秒。
3.2显示功能
1)时间显示格式
2)温度显示格式
3.3按键功能
1)按键S7定义为“时钟设置”按键,通过该按键可切换选择待调整的时、分、秒,当前选择的显示单元以1秒为间隔亮灭,时、分、秒
的调整需注意数据边界属性。
2)按键S6定义为“闹钟设置”按键,通过该按键可进入闹钟时间设置功能,数码管显示当前设定的闹钟时间。
3)按键S5定义为“加”按键,在“时钟设置”或“闹钟设置”状态下,每次按下该按键当前选择的单元(时、分或秒)增加1个单位。
4)按键S4定义为“减”按键,在“时钟设置”或“闹钟设置”状态下,每次按下该按键当前选择的单元(时、分或秒)减少1个单位。
5)按键功能说明:
按键S4、S5的“加”、“减”功能只在“时钟设置”或“闹钟设置”
状态下有效;
在“时钟显示”状态下,按下S4按键,显示温度数据,松开按键,
返回“时钟显示”界面。
3.4闹钟提示功能
1)指示灯L1 以0.2秒为间隔闪烁,持续5秒钟;
2)闹钟提示状态下,按下任意按键,关闭闪烁提示功能。