用PIC16F627制作的可调倒计时提醒器
- 格式:doc
- 大小:13.94 KB
- 文档页数:3
基于PIC16F887单片机的温度、时钟显示以及闹钟功能一、课程设计的目的《PIC 单片机课程设计》是电气工程及其自动化专业及相近专业的一门重要的专业实践课,本课程在《PIC 单片机》课程的基础上,通过硬件设计与软件编程与调试的实践,进一步掌握PIC 单片机的应用方法,熟练PIC 单片机的C 程序的编写与调试,是毕业设计前的一次重要的实践,为今后走上工作岗位打下坚实的单片机应用基础。
二、设计内容1 Proteus 线路图绘制根据所设计的线路图,绘制与之一致的,能用于仿真的Proteus 线路图。
要求所绘的线路图美观、紧凑,参数要与课设一致。
2、软件编制与调试根据所设计的线路图制相应的单片机C 程序,要求所制的程序符合C 语言格式并加上注解。
每编一段即进行译,有错及时修改,并先在Proteus 上仿真,基本正确后再用PICkit3 在线调试,最后应脱机运行。
三、设计目标1该设计包括数字钟及数字温度计:按键的使用.LCD.蜂鸣器时钟芯片DS1307和温度传感器TC74。
2功能;此设计可以感测环境的温度,显示当前的时间,及闹钟。
温度与时间都显示在LCD显示屏上,以及如何调整闹钟界面四硬件设计及说明1复位按键2时钟芯片DS1307及附属接线时钟芯片DS1307用于产生时间,它提供了秒、分、时、日、年、和星期等数据,能算只瑞年2100年,时钟的晶振是典型的32.768Hz。
(1)其引脚作用如下:2(2)DS1307的读写如下;1写DS1307 的步骤如下:a) 发送启始位;b) 发送DS1307 的7位地址+0 (写),即0b11010000;c) 发送要写入DS1307 的地址,地址见图16,如要修改分,此值为1;d) 发送要写入DS1307 的数,如要把分修改为十进制数37,则此数为0x37;e) 发送停止位;2读DS1307 的步骤如下:a) 发送启始位;b) 发送DS1307 的7位地址+0 (写),即0b11010000;c) 发送要读的DS1307 的起始地址,如要从秒读起,为0;d) 发送停止位;e) 发送重新开始位;f) 发送DS1307 的7位地址+1 (读),即0b11010001;g) 发送读使能位,接收一个数据,单片机发送应答位;h) 发送读使能,接收下一个数据(地址会自动+1),单片机发送应答位,直到读数完成,接收最后一个数时单片机不发送应答位;i) 发送停止位;注意在DS1307仿真的时候七位地址为0b1001101 而实际为0b1001000 ;(3)功能是;提供时间通过pic16F877送入LCD中显示。
1 设计任务描述1.1设计题目:24秒倒计时牌1.2设计要求1.2.1 设计目的(1)掌握24秒倒计时牌的组装方法与技巧;(2)掌握元器件的实现功能与使用;(3)能够通过对元器件组装来实现各种功能的电路;1.2.2 基本要求(1)可手动暂停,还原;(2)到0时有长报警,到倒数5秒时每秒有一声短报警;(3)可显示计数,每过十秒有一次闪烁;1.2.3 发挥部分(1)24秒可调;2 设计思路24秒倒计时器牌的核心部分是倒计时部分,我选择了两个74HC290连级来实现,因为它有置数端和预置端,可完成可调的倒计时器。
本次设计有基本要求:可手动暂停、还原;每十秒显示器闪烁一次;到倒数5秒时每秒有一声短报警,到0秒时是长报警,发挥部分是24秒可调。
首先是要给计时器提供一个秒脉冲发生器,由于555定时器内部的比较器灵敏度非常高,输出驱动电流大,功能灵活,而且采用差分电路形式,用555定时器组成的多谐振荡器的振荡频率手电源电压和温度变化的影响很小,因此采用555定时器来提供发生脉冲。
手动暂停还原中,由于需要暂时锁住显示器显示的数,所以可以在秒脉冲的输出端加一个开关,当要计数时关闭开关进行计数,需要暂停时断开开关终止秒脉冲的输入,即可实现手动暂停还原此时显示器保持原来的数字。
每十秒显示器闪烁一次,若想有闪烁效果需要给需要给显示器提供5~10赫兹的脉冲信号才能有闪烁效果,只要当个位为“0000”时闪烁即为每十秒闪烁一次,通过各种门电路把“0000”的信号与5~10赫兹的脉冲信号共同作用提供给显示器。
到5秒时开始每秒都有一次短报警,到0秒时是长报警,则十位输出是“0000”,5秒时个位的最高位也为零,使个位输出“101”、“100”、“011”、“010”、“001”时有效列真值表,通过门来连接;当为“000”时,为长报警。
给短报警一个500赫兹的脉冲信号,给长报警一个1000赫兹的脉冲信号,再通过一个或门来控制输出那个报警信号提供给报警电路。
倒计时计时器设计倒计时计时器是一种常见的时间管理工具,可以帮助人们准确地计时和组织时间。
设计一个高效和易于使用的倒计时计时器需要考虑多个方面,包括用户界面设计,功能设置,报警方式等等。
本文将详细阐述如何设计一个倒计时计时器。
首先,倒计时计时器的用户界面应该简洁明了,使用户能够方便地进行操作。
主界面应该包括一个显示倒计时时间的区域,一个开始/暂停按钮,以及一个重置按钮。
倒计时时间应以小时、分钟和秒的形式显示,并且具有易于辨认的字体和颜色。
开始/暂停按钮应该有明显的标识,以便用户一目了然地知道当前的功能状态。
重置按钮则用于重设倒计时器到初始状态。
其次,倒计时计时器的功能设置应该灵活多样,便于用户根据需要进行调整。
用户应该可以设置倒计时的总时间,并且能够选择倒计时结束时是否自动重新开始或者报警。
此外,用户还可以选择报警方式,比如声音报警、振动报警或者文字提示。
一些情况下,用户可能需要设置多个倒计时器,并且可以为每个倒计时器设置不同的总时间和报警方式。
倒计时计时器应该具备准确的计时功能,保证计时时间精确到秒。
计时器的算法应该优化,能够准确地计算出时间的流逝,且不会受到设备性能或者其他因素的影响。
此外,倒计时计时器还应该具备倒计时结束自动停止的功能,以免用户忘记停止计时器。
报警方式是倒计时计时器的重要功能之一、报警方式应该能够有效地吸引用户的注意力,并且能够根据用户的喜好进行调整。
声音报警可以设置为不同的音量和音调,振动报警可以设置为不同的强度和频率,文字提示也可以根据用户的需求进行自定义。
在报警方式上,可以提供预设的模式供用户选择,也可以允许用户自定义报警方式。
安全性也是倒计时计时器设计中需要考虑的一个重要方面。
倒计时计时器应当保证用户设置的倒计时时间和设置不受恶意程序或者其他因素的影响。
为了实现这一点,倒计时计时器应具备数据加密和处理安全的机制。
同时,倒计时计时器的数据也应当能够在设备间进行同步和备份,以保证用户的数据不会意外丢失。
ppt 倒计时器的制作(flash 法)制作方法:在 ppt 文档中插入 flash 倒计时器,如果倒计时器在全 ppt 文档中计时,就将flash倒计时器插入PPT的母版中。
有关ppt文档插入flash文件,请参考《》 flash 倒计时器制作步骤(5 步):1、启动flash软件,创建空白文档,设置舞台大小(280X 12),背景颜色(白色)。
单击工具面板中的“文本工具”,在舞台上输入文字“00:00:00”;选中文字,打开“属性面板”,设置字体(黑体)、字号( 65)、颜色(黑色);点击文字属性的下拉菜单,选中“动态文本”(这一点非常关键,动态文本意味着我们可以通过程序来随时改变显示的文字),在“变量”一栏(右下角红色框的部分)中输入“szsz('这是为这个动态文本起个名字,一边将来我们在程序中调用)。
锁住图层 1。
2、新建一图层(图层 2),单击菜单中的【窗口】-【其它面板】-【公用库】-【按钮】,打开公用按钮库,选择三个适当的按钮拖到舞台上,分别为开始按钮(点击开始到计时)、暂停按钮(点击暂停倒计时,再点击开始按钮后,又从暂停的时间开始倒计时)、停止按钮(点击停止倒计时,时间恢复到设定的时间)。
3、新建一图层(图层 3),分别在第 1、 2、 3 帧处插入三个空白关键帧。
在第1 帧加入如下脚本代码(后面的说明可以不要):stop();szsz = "02:30:00"; '这里是倒计时的时间,根据需要修改。
szsz8 = 9000; '倒计时的秒数。
在第2帧加入如下脚本代码(后面的说明可以不要):time = new Date(); seconds1 = ();countdown = szsz8; 在第 3 帧加入如下脚本代码(后面的说明可以不要)stop();hs1 = setInterval( showTime, 100 ); function showTime() { time = newDate();seconds2 = ();nnn0 = seconds2-seconds1; nnn = (nnn0/1000);var hour = (nnn/3600);if (hour<10) { hour0 = "0"+hour;} else {hour0 = hour; var minute = ((nnn/3600)*3600)/60);if (minute<10) {minute0 = "0"+minute;} else {minute0 = minute; var second = (nnn6/ 0)*60);if (second<10) {second0 = "0"+second;} else {second0 = second; if (hour0==0 and minute0==0 and second0==0) { szsz8 = 9000;此' 处为倒计时秒数,根据需要修改。
单片机课程设计60秒倒计时前言在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。
现在尽管单片机的应用已经很普遍了,但仍有许多可以用单片机控制而尚未实现的项目,因此,单片机的应用大有想像和拓展空间。
单片机的应用有利于产品的小型化、多功能化和智能化,有助于提高劳动效率,减轻劳动强度,提高产品质量,改善劳动环境,减少能源和材料消耗,保证安全等。
但是,单片机应用的意义绝不仅限于它的广阔范围以及所带来的经济效益上,更重要的意义还在于:单片机的应用正从根本上改变着传统的控制系统设计思想和设计方法。
从前必须有模拟电路或数字电路实现的大部分功能,现在已能使用单片机通过软件(编程序)方法实现了。
这种以软件取代硬件并提高系统性能的控制系统“软化”技术,称之为微控制技术。
微控制技术是一种全新的概念,是对传统控制技术的一次革命。
随着单片机应用的推广普及,微控制技术必将不断发展、日益完善和更加充实。
近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
模拟多通道压力系统是利用压力传感器采集当前压力并反映在显示器上,它可以分析压力过量程,并发出报警。
并采用电子秤原理可根据输入单价准确的计算出物体的金额。
本篇论文讨论了简单的倒计时器的设计与制作,对于倒计时器中的四位LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。
第一章方案论证1.1课程设计的目的和要求1.目的课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。
进行课程设计可以让学生把学过的比较零碎的知识系统化,真正的能够把学过的知识落到实处,能够开发简单的系统,也进一步激发了学生再深一步学习的热情,因此课程设计是必不可少的,是非常必要的。
用C语言写的一个PIC16F877的时闹钟程序单片机用16F877,主时钟用20MHz,用32768作定时时间。
可以实现2路定闹,每一路都可分别设置和开关,采用4x4键盘,16x2的字符型LCD显示。
连线在程序开头有说明。
程序的功能:(1)上电后LCD背光打开,并显示倒计时5秒,然后时钟开始工作。
(2)用模式键(*)切换模式,如显示时间、日期、闹钟1、闹钟2等,并且可以用上、下键控制加1、减1或是闹钟的On、Off。
(3)原程序有16个键,包括0~9数字键,可以直接输入要设置的时间值,但后来将数字键取消了,你仍然可以通过修改程序的部分注释恢复此功能。
(4)闹钟有2路,时间到后闹2分钟,可按任意键取消本次闹钟。
闹钟响时有2种音调,是用PIC的PWM实现的。
(5)按任意键可打开背光,1分钟后自动关闭背光。
(6)RA0~RA3为按键扫描输入,应接下拉电阻。
主程序// FileName: Main.c// MCU: Microchip PIC16F877// Tool: CCS-C compiler// Author: KingEDA, MSN:kingeda@, skype:kingeda, E-mail:kingeda@// Website: // Description:// A timer program// Ver 0.1: 2003-03-31, all clock function with date display, 2 way alarm.// Ver 0.2: 2003-05-05, (1) Alarm default is on,modify alarm1 time to 7:00:00,// and alarm2 to 13:30:00.// (2) Backlight will be enabled when alarming.// (3) Automatic adjust day(28,30,31).// (4) Automatic move cursor to next location when set item.// PIN Connection:// RC0~1 : 32768Hz crystal// RC2 : Buzzer// RC3 : LCD Back Light,drive a PNP BJT// RD0~RD7 : to LCD DB0~DB7// RA0~RA3 : keypad col in// RC4~RC7 : keypad line out// 7 8 9 #// 4 5 6 ↑// 1 2 3 ↓// 0 ←→*// RE0 : LCD RS// RE1 : LCD RW// RE2 : LCD E#include "my16f877.h"#device ICD=true//#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT #use delay(clock = 24000000)//#use fast_io(C)#use fast_io(E)#define lcd_busy (lcd_read_addr()&0x80) == 0x80#define time_start_addr 0x80+0x04#define time_hourh_addr time_start_addr#define time_hourl_addr time_start_addr+1#define time_minuteh_addr time_start_addr+3#define time_minutel_addr time_start_addr+4#define time_secondh_addr time_start_addr+6#define time_secondl_addr time_start_addr+7#define key_0 0x11#define key_1 0x21#define key_2 0x22#define key_3 0x24#define key_4 0x41#define key_5 0x42#define key_6 0x44#define key_7 0x81#define key_8 0x82#define key_9 0x84#define key_left 0x12#define key_right 0x14#define key_up 0x48#define key_down 0x28#define key_mode 0x18#define key_cancel 0x88char StrPower1[] = " * Power on * ";char StrSetTime[] = " * Adjust time* ";char StrSetDate[] = " * Adjust date* ";char StrAlarm1[] = " * Set alarm 1* ";char StrAlarm2[] = " * Set alarm 2* ";unsigned char PORTC_MAP;#bit BackLightEn = PORTC_MAP.3unsigned char BackLightTimer;int1 led;#bit lcd_rs = PORTE.0#bit lcd_rw = PORTE.1#bit lcd_e = PORTE.2#byte lcd_bus = PORTD#byte lcd_dir = TRISD#define PWM_on 0x0c#define PWM_off 0x00#define PWM_period 200#define PWM_DC 100unsigned char lcd_addr;unsigned char KeyLine;unsigned char KeyOld;unsigned char KeyNew;struct mTime {unsigned char hourh; // hour,0~23unsigned char hourl;unsigned char minuteh; // minute,0~59unsigned char minutel;unsigned char secondh; // second,0~59unsigned char secondl;};struct mTime CurrentTime = {1,2,0,0,0,0};struct mTime AlarmTime1 = {0,7,0,0,0,0}; // 07:00:00 struct mTime AlarmTime2 = {1,3,3,0,0,0}; // 13:30:00 unsigned char AlarmStatus;#bit Alarm1Enable = AlarmStatus.0#bit Alarm2Enable = AlarmStatus.1#bit Alarm1Alarm = AlarmStatus.2#bit Alarm2Alarm = AlarmStatus.3unsigned char Alarm1Cnt; // alarm1 second count unsigned char Alarm2Cnt;unsigned char CurrentMode;#define mode_time 0#define mode_set_time 1#define mode_set_date 2#define mode_set_alarm1 3#define mode_set_alarm2 4unsigned char adjust_item;struct mDate {unsigned char year1; //unsigned char year2;unsigned char year3;unsigned char year4;unsigned char monthh;unsigned char monthl;unsigned char dayh;unsigned char dayl;};struct mDate CurrentDate = {2,0,0,3,0,1,0,1}; unsigned char *pStr;// ------------------------------------------------------- unsigned char lcd_read_addr(){unsigned char ch;lcd_dir = 0xff; // read from lcdlcd_rs = 0;lcd_rw = 1; // instlcd_e = 1;#asmnopnopnop#endasmch = lcd_bus;lcd_e = 0;lcd_dir = 0x00; // set write to lcdreturn ch;}// ------------------------------------------------------- unsigned char lcd_write_data(unsigned char ch) {while (lcd_busy){ restart_wdt(); }lcd_rs = 1; // datalcd_rw = 0; // writelcd_bus = ch; // write outlcd_e = 1;#asmnopnopnop#endasmlcd_e = 0;return 'Y';}// ------------------------------------------------------- unsigned char lcd_write_inst(unsigned char ch) {while (lcd_busy){ restart_wdt(); }lcd_rs = 0; // instlcd_rw = 0; // writelcd_bus = ch;lcd_e = 1;#asmnopnopnop#endasmlcd_e = 0;return 'Y';}// ------------------------------------------------------- unsigned char lcd_read_data(){unsigned char ch;while (lcd_busy){ restart_wdt(); }lcd_dir = 0xff; // read from lcdlcd_rs = 1; // datalcd_rw = 1; // readlcd_e = 1;#asmnopnopnop#endasmch = lcd_bus; // read inlcd_e = 0;lcd_dir = 0x00; // set write to lcdreturn ch;}// ------------------------------------------------------- void lcd_init(){unsigned char Tempch;lcd_addr = 0;delay_ms(100);Tempch = 0x38; // 1-line mode,5x8 dotslcd_write_inst(Tempch); // Function setTempch = 0x0f; // lcd on,cursor on,blink onlcd_write_inst(Tempch); // Display on/offTempch = 0x06; // Increment mode,Entire shift offlcd_write_inst(Tempch);Tempch = 0x01; // clear displaylcd_write_inst(Tempch);delay_ms(3);}// -------------------------------------------------------//#int_timer1//void timer1_interrupt(void)#int_ccp2void ccp2_interrupt(void){//TMR1H = 0x80;if (CurrentTime.secondl==9){CurrentTime.secondl=0;if (CurrentTime.secondh==5){CurrentTime.secondh=0;if (CurrentTime.minutel==9){CurrentTime.minutel=0;if (CurrentTime.minuteh==5){CurrentTime.minuteh=0;if (CurrentTime.hourl==9){CurrentTime.hourl=0;CurrentTime.hourh++;}else if((CurrentTime.hourl==3) && (CurrentTime.hourh==2)){CurrentTime.hourl=0;CurrentTime.hourh=0;if ((((CurrentDate.dayl == 8) || (CurrentDate.dayl == 9)) && (CurrentDate.dayh == 2) && (CurrentDate.monthl == 2) && (CurrentDate.monthh == 0)) ||((CurrentDate.dayl == 0) && (CurrentDate.dayh == 3) && ((((CurrentDate.monthl == 4) || (CurrentDate.monthl == 6)|| (CurrentDate.monthl == 9)) && (CurrentDate.monthh == 0)) || ((CurrentDate.monthl == 1) && (CurrentDate.monthh == 1)))) ||((CurrentDate.dayl == 1) && (CurrentDate.dayh == 3))){CurrentDate.dayl=1;CurrentDate.dayh=0;if ((CurrentDate.monthl == 2) && (CurrentDate.monthh == 1)){CurrentDate.monthl = 1;CurrentDate.monthh = 0;if (CurrentDate.year4 == 9){CurrentDate.year4 = 0;if (CurrentDate.year3 == 9){CurrentDate.year3 = 0;if (CurrentDate.year2 == 9){CurrentDate.year2 = 0;CurrentDate.year1++;}elseCurrentDate.year2++;}elseCurrentDate.year3++;}elseCurrentDate.year4++;}else if(CurrentDate.monthl == 9){CurrentDate.monthl = 0;CurrentDate.monthh++;}elseCurrentDate.monthl++;}else if(CurrentDate.dayl == 9){CurrentDate.dayl=0;CurrentDate.dayh++;}elseCurrentDate.dayl++;}elseCurrentTime.hourl++;}elseCurrentTime.minuteh++;}elseCurrentTime.minutel++;}elseCurrentTime.secondh++;}elseCurrentTime.secondl++;if ((Alarm1Alarm == false) & (Alarm2Alarm == false)){led = 0;CCP1CON = PWM_off;}else{if (led == 1){led = 0;PR2 = PWM_period; // set pwm periodCCPR1L = PWM_DC; // set pwm duty cycle//CCP1CON = PWM_on;}else{led = 1;PR2 = PWM_period/2; // set pwm periodCCPR1L = PWM_DC/2; // set pwm duty cycle//CCP1CON = PWM_off;}}Alarm1Cnt++;Alarm2Cnt++;if (BackLightEn == 0)if (((BackLightTimer++)>=60) & (Alarm1Alarm == false) & (Alarm1Alarm == false))BackLightEn = 1; // disable backlight PORTC = PORTC_MAP;//TMR1IF = 0;//PIR1 = PIR2 = 0x00;CCP2IF = 0;}// ------------------------------------------------------- unsigned char get_key(void){unsigned char key_in,tmp;TRISC = 0x03;KeyLine = 0xf0;PORTC = KeyLine | PORTC_MAP;#asmnopnopnop#endasmif ((PORTA & 0x0f) != 0){tmp = 0x10;for (KeyLine = tmp;KeyLine!=0;KeyLine = tmp){PORTC = KeyLine | PORTC_MAP;tmp = KeyLine <<1;#asmnopnopnop#endasmkey_in = PORTA & 0x0f;if (key_in != 0){return (key_in | KeyLine);}}return 0;}elsereturn 0;}// -------------------------------------------------------void set_mode(void){if (CurrentMode == mode_set_alarm2)CurrentMode = mode_time;else{CurrentMode++;adjust_item = 0;}lcd_write_inst(0x01); // clear LCD displaylcd_write_inst(time_start_addr); // set LCD line1 if (CurrentMode == mode_set_time){lcd_write_data(CurrentTime.hourh + '0');lcd_write_data(CurrentTime.hourl + '0');lcd_write_data(':');lcd_write_data(CurrentTime.minuteh + '0');lcd_write_data(CurrentTime.minutel + '0');lcd_write_data(':');lcd_write_data(CurrentTime.secondh + '0');lcd_write_data(CurrentTime.secondl + '0');pStr = StrSetTime;}else if(CurrentMode == mode_set_date){lcd_write_data(CurrentDate.year1 + '0');lcd_write_data(CurrentDate.year2 + '0');lcd_write_data(CurrentDate.year3 + '0');lcd_write_data(CurrentDate.year4 + '0');lcd_write_data('/');lcd_write_data(CurrentDate.monthh + '0');lcd_write_data(CurrentDate.monthl + '0');lcd_write_data('/');lcd_write_data(CurrentDate.dayh + '0');lcd_write_data(CurrentDate.dayl + '0');pStr = StrSetDate;}else if(CurrentMode == mode_set_alarm1){lcd_write_data(AlarmTime1.hourh + '0');lcd_write_data(AlarmTime1.hourl + '0');lcd_write_data(':');lcd_write_data(AlarmTime1.minuteh + '0');lcd_write_data(AlarmTime1.minutel + '0');lcd_write_data(':');lcd_write_data(AlarmTime1.secondh + '0');lcd_write_data(AlarmTime1.secondl + '0');lcd_write_data(' ');lcd_write_data('O');if (Alarm1Enable){lcd_write_data('n');}else{lcd_write_data('f');lcd_write_data('f');}pStr = StrAlarm1;Alarm1Cnt =0;}else if(CurrentMode == mode_set_alarm2) {lcd_write_data(AlarmTime2.hourh + '0');lcd_write_data(AlarmTime2.hourl + '0');lcd_write_data(':');lcd_write_data(AlarmTime2.minuteh + '0');lcd_write_data(AlarmTime2.minutel + '0');lcd_write_data(':');lcd_write_data(AlarmTime2.secondh + '0');lcd_write_data(AlarmTime2.secondl + '0');lcd_write_data(' ');lcd_write_data('O');if (Alarm2Enable){lcd_write_data('n');}else{lcd_write_data('f');lcd_write_data('f');}pStr = StrAlarm2;Alarm2Cnt = 0;}lcd_write_inst(0xc0); // set LCD line2 if (CurrentMode != mode_time){for (;*pStr!=0;pStr++){ // write hint messagelcd_write_data(*pStr);}lcd_write_inst(0x0f); // LCD cursor onlcd_write_inst(time_start_addr); // move cursor to start }else // time mode,write date to second line{lcd_write_inst(0x0c); // LCD sursor off/* lcd_write_inst(0xc0 + 3); // set date start address lcd_write_data(CurrentDate.year1 + '0');lcd_write_data(CurrentDate.year2 + '0');lcd_write_data(CurrentDate.year3 + '0');lcd_write_data(CurrentDate.year4 + '0');lcd_write_data('/');lcd_write_data(CurrentDate.monthh + '0');lcd_write_data(CurrentDate.monthl + '0');lcd_write_data('/');lcd_write_data(CurrentDate.dayh + '0');lcd_write_data(CurrentDate.dayl + '0');*/ }if (CurrentMode == mode_set_time){lcd_write_inst(time_start_addr); // move cursor to start }else if (CurrentMode == mode_set_date){lcd_write_inst(time_start_addr); // move cursor to start }else if (CurrentMode == mode_set_alarm1){lcd_write_inst(time_secondl_addr+3);adjust_item = 6;}else if (CurrentMode == mode_set_alarm2){lcd_write_inst(time_secondl_addr+3);adjust_item = 6;}else{lcd_write_inst(0x0c); // LCD cursor off}}// ------------------------------------------------------- void set_date(void){if (adjust_item == 0) // adjust year{if ((KeyNew >=0) & (KeyNew <= 9)){CurrentDate.year1 = KeyNew;lcd_write_data(CurrentDate.year1 + '0');//lcd_write_inst(time_start_addr);adjust_item ++;}else if (KeyNew == key_left){adjust_item = 7;lcd_write_inst(time_start_addr + 9);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 1);}}else if(adjust_item == 1){if ((KeyNew >=0) & (KeyNew <= 9)){CurrentDate.year2 = KeyNew;lcd_write_data(CurrentDate.year2 + '0');//lcd_write_inst(time_start_addr + 1);adjust_item ++;}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 0);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 2);}}else if(adjust_item == 2){if ((KeyNew >=0) & (KeyNew <= 9)){CurrentDate.year3 = KeyNew;lcd_write_data(CurrentDate.year3 + '0');//lcd_write_inst(time_start_addr + 2);adjust_item ++;}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 1);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 3);}}else if(adjust_item == 3){if ((KeyNew >=0) & (KeyNew <= 9)){CurrentDate.year4 = KeyNew;lcd_write_data(CurrentDate.year4 + '0');//lcd_write_inst(time_start_addr + 3);adjust_item ++;lcd_write_inst(time_start_addr + 5);}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 2);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 5);}}else if(adjust_item == 4)if (((CurrentDate.monthl>2) & (KeyNew == 0)) | ((CurrentDate.monthl == 0) & (KeyNew == 1))| (((CurrentDate.monthl == 1) | (CurrentDate.monthl == 2)) & (KeyNew <2))) {CurrentDate.monthh = KeyNew;lcd_write_data(CurrentDate.monthh + '0');//lcd_write_inst(time_start_addr + 5);adjust_item ++;}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 3);}else if (KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 6);}}else if(adjust_item == 5){if (((CurrentDate.monthh == 3) & (KeyNew <2)) | ((CurrentDate.monthh != 3) & (KeyNew >=0) & (KeyNew <=9))){CurrentDate.monthl = KeyNew;lcd_write_data(CurrentDate.monthl + '0');//lcd_write_inst(time_start_addr + 6);adjust_item ++;lcd_write_inst(time_start_addr + 8);}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 5);}else if (KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 8);}}else if(adjust_item == 6)if (((CurrentDate.dayl>1) & ((KeyNew == 1) | (KeyNew == 2))) | ((CurrentDate.dayl == 0) & (KeyNew >0) & (KeyNew<4))| ((CurrentDate.dayl == 1) & (KeyNew <4))){CurrentDate.dayh = KeyNew;lcd_write_data(CurrentDate.dayh + '0');//lcd_write_inst(time_start_addr + 8);adjust_item ++;}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 6);}else if (KeyNew == key_right){adjust_item ++;lcd_write_inst(time_start_addr + 9);}}else if(adjust_item == 7){if (((CurrentDate.dayh == 3) & (KeyNew <2)) | ((CurrentDate.dayh != 3) & (KeyNew >=0) & (KeyNew <=9))){CurrentDate.dayl = KeyNew;lcd_write_data(CurrentDate.dayl + '0');//lcd_write_inst(time_start_addr + 9);adjust_item ++;lcd_write_inst(time_start_addr + 0);}else if (KeyNew == key_left){adjust_item --;lcd_write_inst(time_start_addr + 8);}else if (KeyNew == key_right){adjust_item = 0;lcd_write_inst(time_start_addr + 0);}}}// -------------------------------------------------------void set_time(void){if (adjust_item == 0) // set hourh{if (((CurrentTime.hourl <4) & (KeyNew < 3)) | ((CurrentTime.hourl >3) & (KeyNew <2))){CurrentTime.hourh = KeyNew;lcd_write_data(CurrentTime.hourh + '0'); // refresh hourh//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item = 5;lcd_write_inst(time_secondl_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_hourl_addr);}}else if (adjust_item == 1) // set hourl{if (((CurrentTime.hourh == 2) & (KeyNew < 4)) | ((CurrentTime.hourh < 2) & (KeyNew <=9))){CurrentTime.hourl = KeyNew;lcd_write_data(CurrentTime.hourl + '0'); // refresh hourl//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minuteh_addr);}}else if (adjust_item == 2) // set minuteh{if (KeyNew <6){CurrentTime.minuteh = KeyNew;lcd_write_data(CurrentTime.minuteh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourl_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minutel_addr);}}else if (adjust_item == 3) // set minutel{if ((KeyNew >=0) & (KeyNew <=9)){CurrentTime.minutel = KeyNew;lcd_write_data(CurrentTime.minutel + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondh_addr);}}else if (adjust_item == 4) // set secondh{if (KeyNew <6){CurrentTime.secondh = KeyNew;lcd_write_data(CurrentTime.secondh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;&nb, sp; lcd_write_inst(time_minutel_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondl_addr);}}else if (adjust_item == 5) // set secondl{if ((KeyNew >=0) & (KeyNew <=9)){CurrentTime.secondl = KeyNew;lcd_write_data(CurrentTime.secondl + '0');//lcd_write_inst(0x10); // move cursor backadjust_item = 0;lcd_write_inst(time_hourh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_right){adjust_item = 0;lcd_write_inst(time_hourh_addr);}}}// -------------------------------------------------------void set_alarm1(void){if (adjust_item == 0) // set hourh{if (((AlarmTime1.hourl <4) & (KeyNew < 3)) | ((AlarmTime1.hourl >3) & (KeyNew <2))){AlarmTime1.hourh = KeyNew;lcd_write_data(AlarmTime1.hourh + '0'); // refresh hourh//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item = 6;lcd_write_inst(time_secondl_addr + 3);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_hourl_addr);}}else if (adjust_item == 1) // set hourl{if (((AlarmTime1.hourh == 2) & (KeyNew < 4)) | ((AlarmTime1.hourh < 2) & (KeyNew <=9))){AlarmTime1.hourl = KeyNew;lcd_write_data(AlarmTime1.hourl + '0'); // refresh hourl//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minuteh_addr);}}else if (adjust_item == 2) // set minuteh{if (KeyNew <6){AlarmTime1.minuteh = KeyNew;lcd_write_data(AlarmTime1.minuteh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourl_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minutel_addr);}}else if (adjust_item == 3) // set minutel{if ((KeyNew >=0) & (KeyNew <=9)){AlarmTime1.minutel = KeyNew;lcd_write_data(AlarmTime1.minutel + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondh_addr);}}else if (adjust_item == 4) // set secondh{if (KeyNew <6){AlarmTime1.secondh = KeyNew;lcd_write_data(AlarmTime1.secondh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_minutel_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondl_addr);}}else if (adjust_item == 5) // set secondl{if ((KeyNew >=0) & (KeyNew <=9)){AlarmTime1.secondl = KeyNew;lcd_write_data(AlarmTime1.secondl + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_secondl_addr+3);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondl_addr+3);}}else if (adjust_item == 6) // set on/off{if ((KeyNew == key_up) | (KeyNew == key_down)){if (Alarm1Enable){Alarm1Enable =false; // disable alarm1lcd_write_data('f');lcd_write_data('f');}else{Alarm1Enable =true; // enable alarm1lcd_write_data('n');lcd_write_data(' ');}//lcd_write_inst(time_secondl_addr+3);adjust_item = 0;lcd_write_inst(time_hourh_addr);Alarm1Cnt = 0;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_secondl_addr);}else if(KeyNew == key_right){adjust_item = 0;lcd_write_inst(time_hourh_addr);}}}// -------------------------------------------------------void set_alarm2(void){if (adjust_item == 0) // set hourh{if (((AlarmTime2.hourl <4) & (KeyNew < 3)) | ((AlarmTime2.hourl >3) & (KeyNew <2))){AlarmTime2.hourh = KeyNew;lcd_write_data(AlarmTime2.hourh + '0'); // refresh hourh//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item = 6;lcd_write_inst(time_secondl_addr+3);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_hourl_addr);}}else if (adjust_item == 1) // set hourl{if (((AlarmTime2.hourh == 2) & (KeyNew < 4)) | ((AlarmTime2.hourh < 2) & (KeyNew <=9))){AlarmTime2.hourl = KeyNew;lcd_write_data(AlarmTime2.hourl + '0'); // refresh hourl//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minuteh_addr);}}else if (adjust_item == 2) // set minuteh{if (KeyNew <6){AlarmTime2.minuteh = KeyNew;lcd_write_data(AlarmTime2.minuteh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_hourl_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_minutel_addr);}}else if (adjust_item == 3) // set minutel{if ((KeyNew >=0) & (KeyNew <=9)){AlarmTime2.minutel = KeyNew;lcd_write_data(AlarmTime2.minutel + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_minuteh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondh_addr);}}else if (adjust_item == 4) // set secondh{if (KeyNew <6){AlarmTime2.secondh = KeyNew;lcd_write_data(AlarmTime2.secondh + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_minutel_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondl_addr);}}else if (adjust_item == 5) // set secondl{if ((KeyNew >=0) & (KeyNew <=9)){AlarmTime2.secondl = KeyNew;lcd_write_data(AlarmTime2.secondl + '0');//lcd_write_inst(0x10); // move cursor backadjust_item ++;lcd_write_inst(time_secondl_addr+3);}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_secondh_addr);}else if(KeyNew == key_right){adjust_item ++;lcd_write_inst(time_secondl_addr+3);}}else if (adjust_item == 6) // set on/off{if ((KeyNew == key_up) | (KeyNew == key_down)){if (Alarm2Enable){Alarm2Enable =false; // disable alarm2lcd_write_data('f');lcd_write_data('f');}else{Alarm2Enable =true; // enable alarm2lcd_write_data('n');lcd_write_data(' ');}//lcd_write_inst(time_secondl_addr+3);adjust_item = 0;lcd_write_inst(time_hourh_addr);Alarm2Cnt = 0;}else if(KeyNew == key_left){adjust_item --;lcd_write_inst(time_secondl_addr);}else if(KeyNew == key_right){adjust_item = 0;lcd_write_inst(time_hourh_addr);}}}// -------------------------------------------------------void main(void){unsigned char cnt;TRISC = 0x03; // PORTC.3 drive led,low activePORTC_MAP = 0x00;led = 0;BackLightEn = 0;BackLightTimer = 0;PORTC = PORTC_MAP;TRISA = 0xff; // low half byte as keyscan inTRISE = 0x00;ADCON0 = 0x00;ADCON1 = 0x06; // all digital I/Oslcd_init();INTCON = 0x00;lcd_write_inst(0x80); // set lcd ddram addressfor (pStr = StrPower1;*pStr!=0;pStr++){lcd_write_data(*pStr);}lcd_write_inst(0x0c); // LCD cursor offPIR1 = PIR2 = 0x00;T1CON = 0x0f; // T1CON: -- T1CKPS1 T1CPS0 T1OSCEN /T1SYNC TMR1CS TMR1ONTMR1H = 0x80;TMR1L = 0x00;。
目录一、设计要求 (3)二、设计的作用目的 (3)三、具体设计 (4)1.问题分析 (4)2.总体设计思想 (5)3.具体实现方法 (7)四、Proteus调试过程及现象 (14)五、调试问题及解决方法 (15)六、设计的优缺点分析 (16)七、总结 (16)八、参考文献 (17)一、设计要求由单片机接收小键盘阵列设定倒计时时间,倒计时的范围最大为60分钟,由LED 显示模块显示剩余时间,显示格式为 XX(分):XX(秒).X,精确到0.1s的整数倍。
倒计时到,由蜂鸣器发出报警。
绘制系统硬件接线图,并进行系统仿真和实验。
画出程序流程图并编写程序实现系统功能。
二、设计的作用目的此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。
通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法,提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
三、具体设计1.问题分析:在电子技术飞速发展的今天,电子产品的人性化和智能化已经非常成熟,其发展前景仍然不可估量。
如今的人们需求的是一种能给自己带来方便的电子产品,当然最好是人性化和智能化的,如何能做到智能化呢?单片机的引入就是一个很好的例子。
单片机又称单片微型计算机,也称为微控制器,是微型计算机的一个重要分支,单片机是20世纪70年代中期发展起来的一种大规模集成电路芯片,是集CPU,RAM,ROM,I/O接口和中断系统于同一硅片上的器件。
倒计时数字显示器的设计摘要:根据设计的指标和要求,设计出以分频﹑计数﹑与译码显示模块为主要构成部分的倒计时数字显示器。
此系统还具有快速对分﹑秒分别预置﹑及语音报时等功能。
关键词:倒计时,译码显示,报警设计目的:(1)进一步掌握数字数字电子技术课程所学的理论知识。
(2)熟悉CC40106、CC40192、CC4020、CC4511、CC4068、74LS20集成数字芯片以及七段LED数码管,并掌握其工作原理,进一步学会使用其进行电路设计。
设计技术指标与要求:(1)基本功能①采用倒计时方式定时,最大定时范围60分钟。
时钟信号源要精度较高;②定时时间可以快速对分、秒分别预置;③数字式显示剩余时间的分、秒;④定时时间到,能提前十秒提供类似“的、的、的、的、的、的、的、的、的、答”声响提示。
(2)设计成果要求①利用EWB技术在计算机上完成电路的设计与模拟;②利用集成芯片、分立元件在实验室完成具体的电路,并能实现基本功能。
目录前言 (1)1 倒计时数字显示装置 (1)1.1设计思想 (1)1.1.1设计方案 (1)1.1.2设计所需的元件 (1)1.2设计原理 (5)1.2.1逻辑开关部分 (5)1.2.2脉冲产生电路部分 (5)1.2.3分频器电路部分 (6)1.2.4计数器电路部分 (6)1.2.5译码驱动显示电路部分 (6)1.2.6报警电路部分 (6)2电路连接测试 (7)3设计体会 (8)参考文献 (8)钦州学院本科课程设计报告前言在日常生活中,倒计时数字显示器应用广泛,尤其应用于各种比赛中。
诸如在体育比赛,游戏中的倒计时,交通信号灯、红绿灯、行人灯、交通纤毫控制器、还可以用来作为各种药丸,药片,胶囊在指定时间提醒用药等等,由此可见倒计时在现代社会是何其重要的。
本设计采用倒计时方式定时,最大定时范围60分钟,时钟信号精度较高,它可以快速对分、秒分别预置,它还能够在定时时间到之前提前十秒提供类似“的、的、的、的、的、的、的、的、的、答”声响提示,该计时器采用按键操作,LED显示,非常实用。
课程设计报告课程名称:单片机课程设计题目:计时提醒器摘要单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。
因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。
该实物是一个由两位七段数码管、小键盘和蜂鸣器组成的计时提醒器,它是一个很传统的制作项目,这是因为自14世纪出现第一台沙漏作为早期工厂中的计时器,到近代的机械式计时器,人们一直把计时器看作便利的计时工具。
与钟表不同,计时器可以简单地设置一个时间长度,并在这个时间消逝完毕后给人以提示。
该实物就是利用单片机和外围器件制作一个21世纪的“沙漏”。
关键词:数码管;开关;单片机目录1、设计任务、要求 (1)1.1、设计任务 (1)1.2、设计要求 (1)1.3、发挥部分 (1)1.4、创新部分 (1)2、方案总体设计与论证 (1)3、硬件设计 (2)3.1、单片机最小系统 (2)3.2、单片机复位电路 (2)3.3、系统电源 (3)3.4、小键盘 (3)3.5、发光二极管 (3)3.6、数码管 (4)3.7、整体电路 (4)4、软件设计 (6)5、系统仿真与调试 (6)5.1、仿真软件简介、调试过程等 (6)5.2、调试与仿真过程图 (7)5.3、使用说明等 (9)6、设计总结 (9)7、参考文献 (10)附录一源程序 (10)附录二硬件名称列表 (15)1、设计任务、要求1.1、设计任务完成一个计时提醒器的设计。
1.2、设计要求开机时,七段数码管显示“00”,等待输入计时时间,在小键盘输入14秒等。
ppt中flash倒计时器PPT中Flash倒计时器摘要:倒计时器是一种常用的工具,可以在各种场合使用,包括演讲、比赛、培训等。
PPT作为一种常见的演示工具,经常需要使用倒计时器来控制时间。
本文将介绍如何在PPT中使用Flash倒计时器,以及一些注意事项和常见问题。
导言:在制作PPT演示时,时间管理十分重要。
倒计时器可以帮助演讲者控制时间,让演示更加有条不紊。
目前市场上有很多可以在PPT中使用的倒计时器工具,其中使用Flash倒计时器是一种常见的选择。
下面将详细介绍如何在PPT中使用Flash倒计时器。
步骤一:下载并安装Flash倒计时器插件1. 打开浏览器,搜索“Flash倒计时器插件”,选择一个适合的下载源。
2. 下载插件后,双击运行安装程序并按照提示进行安装。
3. 安装完成后,重新启动PPT。
步骤二:在PPT中插入Flash倒计时器1. 打开PPT,选择要插入倒计时器的页面。
2. 在菜单栏中选择“插入”-“对象”,弹出插入对象对话框。
3. 在对象类型中选择“Flash动画”,点击“浏览”按钮选择已安装的Flash倒计时器插件文件。
4. 确认选择后,点击“插入”按钮,将倒计时器插入到PPT页面中。
5. 根据需要调整倒计时器的大小、位置和样式。
步骤三:设置倒计时时间和触发条件1. 双击倒计时器,弹出设置窗口。
2. 在设置窗口中,输入倒计时的时间(以秒为单位)。
3. 根据需要,选择倒计时触发的条件,例如自动开始、点击触发或其他自定义触发方式。
4. 点击确定按钮保存设置。
步骤四:测试和调整倒计时器1. 在PPT播放模式下,测试倒计时器是否按照预期工作。
2. 如果需要调整倒计时器的样式或位置,返回设计模式,修改倒计时器的设置。
3. 反复测试和调整,直到倒计时器符合要求。
注意事项:1. 在下载并安装插件时,请确保从可靠的来源下载,以防止安装恶意软件。
2. 在安装插件之前,最好先备份PPT文件,以免出现意外情况。
用PIC16F627制作的可调倒计时提醒器
用PIC16F627制作的可调倒计时提醒器本可调倒计时提醒器具有:电路简洁、显示醒目、定时准确、制作容易、可调倒计0~99 分钟,使用方便的优点。
它既有制作的趣味性,又有使用的实用性。
一、硬件电路如图1所示,电源变压器T1将AC220V市电变换为AC9V交流电压后,经D1~D4整流、C4滤波、U2MC7805(或LM7805)稳压后,得到5V直流电压,为整机供电。
主控芯片为PIC16F627单片机,其每个端口的拉电流或灌电流可达
25mA,无需外加三极管,就可以直接驱动LED数码管。
设PIC16F627的RB口为输出,其中RB0~RB6用于数码管的段驱动,因选用的是LG5621BH共阳数码管,故只有当RBO~RB6输出低电平时,数码管才能被点亮,RB7口用于控制蜂鸣器,三极管Q3(S8050)作驱动放大,只有在RB7输出高电平时,蜂鸣器才能鸣响报警。
设RA0~RA2为输出口,其中RA0、RAI用于数码管的位驱动,输出为低电平使能;RA2用于数码管的小数点位驱动,低电平使能,用作定时器工作指示灯,当定时器工作时,数码管的小数点位以2s的频率闪烁。
设RA5、RA4、RA3为输入口,RR4、RR5、R6为RA5、RA4、RA3口的上拉电阻。
在RA5、RA4、RA3口上接有按键开关S1~S3。
S1为启动/报警解除键;
S2为十位数预置调整键,按一次该键,定时器的十位数减1,减到0时再按一下该键,数值回到了9,如此循环显示;S3为定时器个位数预置调整键,调整方法与S2相同。
至此,PIC16F627单片机的所有端口都用上了。
定时器功能:定时器初始上电时,两位数码管显示99,并处于待机状态。
此时,如按一下个位定时数预置键S3,个位数码管显示值减1,如按一下S2,则十位数码管显示值减小1。
S1为启动/报警解除键。
按动S1,定时器进入工作状态,倒计时开始(定时时间为分钟),定时时长从数码管当前的显示值开始倒计时。
在倒计时期间,数码管的小数点dp位以2s 的频率闪烁,并且每过一分钟,个位显示值减1;每过10
分钟,十位显示值减1,当数码管显示值减至00后,再过60秒,蜂鸣器开始报警。
在报警期间,数码管始终显示00,直至再次按下S1键,蜂鸣器才会停止报警,数码管显示上次预置的定时时间。
在倒计时期间内,按键S1~S3均被屏蔽,不能使能。
二、程序设计 1.程序流程主程序流程如图2 所示。
1 分钟定时子程序流程如图3 所示。
数码管显示子程序流程如图4所示。
2.程序设计要点(1)本定时器使用PIC16F627 的定时器模块TM10 做成50ms 定时中断,再用寄存器的递减、判零语句“DECFSZ F”判断是否到20 次中断来确定显示到1 分钟没有,未到1 分钟,继续显示当前的数码值,
到1 分钟,当前显示的数码值减1 后再显示1 分钟??,这样,每过1 分钟数码管个位显示值减1,每过10 分钟,数码管十位显示值减1,直到两位数码管的显示值减到00 为止。
(2)定时器如何区分在程序设计中,用一个寄存器的标志位区分预置显示程序和定时工作显示程序。
该标志位为0,执行预置显示程序;为1,执行定时器工作程序。
(3)按键的防抖动问题,机械按键在按下和抬起的瞬间均存在着多次接通与断开的情况,本程序使用软件来解决按键防抖问题。
具体方法是,在按键按下和抬起的过程中均加有延时程序,一般延时时间以10ms 左右为宜。
(4)周用显示查表程序,用查表法作数码管的数码值显示可使软、硬件设计变得更加简洁、易懂。
但本定时器设计中把数码管的小数点位用作了“工作指示灯”,又由于数码管采用的是“动态扫描”的方式点亮的,所以此查表码非彼查表码,即查表码发生了变化。
右边为本项目共阳极数码所用的查表程序的码表。
如将码表的值颠倒书写,即将RETLW 0X40 写在最前面,RETLW 0X10 写在最后面,则本定时器就变成“正”定时器了。
三、程序烧写注意事项烧写程序时,一定要注意编程器的“配置位”设置,否则可能导致程序不能正常运行等问题。