《电子漏斗课程设计.doc》由会员分享,可在线阅读,更多相关《电子漏斗课程设计.doc(48页珍藏版)》请在三一办公上搜索。
1、电子课程设计课题:电子漏斗系别:专业名称:学生姓名:学号:指 导 教 师 姓 名 :目录1.摘要12.设计内容、设计要求23.本次课程设计已实现的功能24.系统框图45.设计思路46.系统概述57.电路原理图58.实现方案详解描述59.软件环境及调配下载工具610.软件流程图及设计思想611.软件功能及模块描述615.系统测试1516.尚未完成工作的困难及解决思路1617.本设计已有的创新点及后期升级优化的思路方案1618.本设计收获的心得1719.参考文献1820.致谢1821.附录19摘要:本次课程设计的内容为电子漏斗,漏斗为古代计时的一种重要工具,现在我们需要设计一个基于单片机为控制核心
2、的现代电子漏斗。漏斗的主要特点为:漏斗分为2层,上面的沙子不断减少,下面的沙子不断增加;漏斗中的沙子数量是固定的;漏斗可以正反颠倒,但计数值并不会发生突变而且上面的沙子减少,下面的沙子增多。根据以上的特点,在设计现代的电子漏斗时我们可以在此基础上做出优化:漏斗中的计数量可以随着人们的设置量而改变;可以改变单位时间的计数值,即可以一秒计数一次,可以一分钟计数一次;在计数到达最大值时,可以作出报警声,以提醒人们;可以随时停止计数和开启计数;增加电子时钟功能;具有掉电保持当前计数值和设置值。当电子漏斗处于水平放置的时候,则电子漏斗就工作于电子时钟的状态,每当一秒的时候则计数一次,在电子漏斗板上的上面
3、2位数码管显示秒,下面2位数码管显示分,但当过一个小时之后,上面2位数码管显示分,下面2位数码管显示时。通过长按按键约2秒的时候,电子时钟进入设置状态,此时,时钟停止计时,在设置状态下可以分别对时,分,秒进行设置。通过短按按键,使电子时钟进入设置状态,电子时钟仍然在计时,不会影响到时间的准确性,在设置状态中,可以对分和小时进行设定,竖直放置时则对分进行加设置,随后电子漏斗平放的时候则对分进行减设置;颠倒放置时则对时进行加设置,随后电子漏斗平放的时候则对时进行减设置。然后水平放置通过长按按键约1秒的时候则退出电子时钟设置状态,并且电子时钟从所设定的时分秒开始计时,若计时到了我们所设定的时间后,则
4、蜂鸣器就会以响0.5s停0.5s的报警声工作,此时当我们按下功能按键时,则蜂鸣器停止,并且显示我们我设定的时刻,当松开功能按键时,电子时钟继续计时,不会因为报警而停止计时。若此时掉电了,单片机则保存掉电前所设定的闹钟值,再次上电时就不用从新设定闹钟值。当电子漏斗在时钟工作状态下竖直或颠倒放置时,则就会进入漏斗计数状态。在漏斗状态下无论是竖直或者颠倒放置,上面2位数码管的计数值减小,下面2位数码管的计数值增加,而且在翻转后计数值会跟随翻转前的计数值减小下增上减的计数方式进行。此时当短按功能键的时候(按下时间小于1秒)则漏斗计数停止,若再次短按功能键时,漏斗继续停止前的状态继续工作。若长按功能键大
5、于1秒的时候,此时则进入漏斗设置功能状态。在漏斗设置功能状态下,竖直放置且按下功能键时,每按下一次则漏斗设置值加1,若颠倒放置时,每按下一次功能键,漏斗设置值减1,若在漏斗设置状态下水平放置电子漏洞时,当按下一次功能按键,则电子漏洞进入分钟模式,即每过一分钟计数一次,若连续按下两次则退出分钟模式,即返回秒计时模式。在漏斗设置功能状态下长按功能按键大于2秒的时候则退出设置状态,并且漏斗以所设置的值开始计时,若计时计完了之后,蜂鸣器就会1秒钟响一次,与漏斗LED灯同步,若将电子漏洞翻转后则消除报警声。若此时掉电了,单片机自动保存漏斗此时所计数的值与我们所设定的值,再次上电后,漏斗数码管会以掉电前的
6、状态继续开始计时,并且计完掉电前的所设定的值后,蜂鸣器则报警。 关键词:STC89C52RC单片机、EEPROM、定时器中断、电子漏斗、电子时钟一、设计内容、设计要求(1)设计内容本次课程设计需要设计一个基于单片机为控制核心的电子漏斗。电子漏斗无论是竖直放置或者颠倒放置,数码管所显示的数值均要竖直向上,并且要模仿漏斗的计时方式,即上方的数据无论处于何种状态都为减少计时,下方的数据无论处于何种状态都为增加计时,并且LED灯随着计时的进行做出动态的漏斗式流动效果。在此基础上,我们可以增加更多的辅助功能体现出电子漏斗比传统的漏斗的功能更强大。在电子漏斗上,增加对计数值的设置。可以对电子漏斗所计数的值
7、进行动态设置,在设置的过程中,不仅可以对设置值进行加设置,也可以对计数值进行减设置。当我们需要计时比较长的时间的时候,我们也可以使漏斗进入分钟状态,即每一分钟计数一次,当然,当我们不需要计时较长时间的时候,我们也可以进入默认的秒状态。在计时的过程中,可以对漏斗进行停止和继续操作,即在漏斗计时的过程中,可以通过按键停止漏斗的计时状态,使漏斗停止在某一计时状态,同时也可以通过按键使漏斗从停止的时刻继续开始计时。在电子漏斗运行的过程中,若突然掉电,我们需要对电子漏斗在掉电前的数值进行保存,这样,当再次上电后,电子漏斗可以继续从掉电前的状态开始计时。由于电子漏斗工作在竖直放置和颠倒放置的状态,若当电子
8、漏斗处于水平放置状态的时候,可以使电子漏斗工作于电子时钟的模式。在电子时钟模式下,数码管就会以时钟的形式计时,并利用LED灯从而实现秒、分、时显示效果。在电子时钟下,可以对电子时钟进行时间的设置,即可以对秒、分、时进行任意设置,不仅可以对所需要设定的值进行加设置也可以对所需要设定的值进行减设置,从而起到矫正时间的功能和方便设置的效果。为了增强电子时钟的功能,可以对电子时钟增加闹钟的功能,我们可以设定一个时间值,每当时间到了我们所设定的时间值的时候,电子时钟的蜂鸣器就会报警,在设置的过程中,可以独立对分或者时进行设定,同样在设置过程中也同时实现加设置和减设置的功能。当电子时钟在工作的过程中,若掉
9、电的时候,可以对当前时钟值以及闹钟所设定的值进行保存同时也可以对电子漏斗的设定值和当前的计数值进行保存。(2)设计要求在设计的时候,根据所提供的电路板进行焊接,焊接完成后,分析电路的结构组成,根据提供的电路图进行编程。在设计的过程中不能照搬别人所设计完成的程序,更不能直接使用别人已经完成的作品。必须通过自己查找资料,根据自己的了解进行编程,调试,最终设计出能够完成基本要求的作品。通过自己的思考,增加更多的功能,使所设计出来的作品性能更好,功能强大,更加贴近我们的日常生活。二、 本次课程设计已实现的功能在本次课程设计中,我们实现的功能有以下几点:电子漏斗计数。我们所设计的电子漏斗模仿了传统的漏斗
10、计数方法,即上方的数为不断减少,下方的数不断增加,而且不管是竖直放置或者颠倒放置,其数码管所显示的数值均为向上显示,若计到最大值的时候,蜂鸣器就会以1秒响1次的频率进行报警。在电子漏斗计数过程中,我们可以通过短按按键使电子漏斗计数暂停,若继续短按功能键,电子漏洞就会以暂停前的状态继续进行计数。若长按功能键时,电子漏斗就会进入到设置的状态,在设置状态中,当电子漏斗为竖直放置的时候,每按一下功能键,漏斗的设置值就会加1,若加到99的时候,再按一下功能键,这时设置值就会变回0;当电子漏斗为颠倒放置的时候,每按一次功能键,漏斗的设置值就会减1,当设置值减到0的时候,若再按一次功能键,设置值就会变成99
11、。当在设置状态下水平放置的时候,按一下功能键,这时计数方式就会变成分钟模式,即每一分钟漏斗计数值变化一次,若在水平放置的时候连续按下2次功能键时,漏斗的计数方式重新变回秒计数模式。在设置状态下,若长按功能键约3秒的时候,这时就会自动退出设置状态,返回到电子漏斗的工作状态,电子漏斗就会根据我们所设定的方式进行工作,倘若此时掉电的时候,单片机就会将掉电前漏斗的设置状态和漏斗掉电前的计数值装进EEPROM中,当再次上电时,漏斗就会恢复到掉电前计数值和设置值,并且在此基础上进行运行。漏斗LED动态显示。当电子漏斗竖直放置工作的时候,板上的11盏LED灯就会由上至下地流动,每一秒钟流动一次,其动态流动方
12、式模仿了常规的沙漏的流动方式,从而形象表现出电子漏斗的工作状态。若当电子漏斗颠倒放置工作的时,漏斗LED灯也会颠倒流动。当短按功能键时,漏斗LED灯的流动就会停止,当再次短按功能键时,LED灯就会以暂停前的状态继续流动工作。若电子漏斗工作在沙漏的状态,此时将电子漏洞水平放置的时候,这时电子漏斗就会从电子沙漏的状态切换到电子时钟的工作状态。电子钟可以显示当前的时、分、秒,由于只有2组数码管,故通过沙漏LED灯以1HZ的频率闪烁来表示秒的计时,然后通过上2位数码管来显示分钟值,下2位数码管显示小时,从而可以将时、分、秒同时显示。在电子钟工作的过程中,当短按功能键的时候,电子钟就会进入闹钟的设置状态
13、,在闹钟设置状态中,可以设定时和分,若到达所设定的时刻,蜂鸣器就会以响1秒停1秒的声音报警。通过长按功能键约2秒即可退出闹钟设置状态。在整个闹钟设置的过程中,电子钟并不会停止计时,当退出闹钟设置状态的时候,设置经过多长时间,显示值也会相应增加多长时间,从而保障电子钟的准确性。在电子钟工作的过程中,我们可以通过长按功能键约2秒的时候,电子漏斗就会进入到电子钟的时间调节模式,在此模式下,我们可以对电子钟的时间进行调节。在调节模式下,若竖直放置,每按1次功能键就会对分钟加1,在加1的条件下,当水平放置后每按1次功能键分钟就会减1;颠倒放置后,每按1次功能键就会对小时加1,在加1的条件下,当水平放置后
14、每按1次功能键小时就会减1;若颠倒转为竖直放置或者竖直转为颠倒放置时,没有按下功能键就水平放置后,此时若是水平向上放置的时候,每按一次功能键,秒就会加1,若是水平向下放置的时候,每按一次功能键,秒就会减1。若长按功能键约2秒的时候,点在漏斗就会从时间调节模式转为电子钟模式,若超过2秒不松开,我们就可以查看我们所设定的小时和分,松开功能键后,电子钟的时间就会从我们所设定的时间进行计时。在整个时间调节的过程中,定时器2是处于关闭状态,故不会对时间进行计时。三、 系统框图报警 按键是否按下 设置值是否到 闹钟设置时间设置电子钟 短按 长按约2秒 长按约2秒 长按约2秒 竖 颠 水 直 倒 平 放 放
15、 放 置 置 置沙漏设置暂停/继续电子沙漏 短按 长按约2秒 短按 长按约2秒 按键是否按下 计数是否计满 报警四、 设计思路在系统的过程中,主要围绕着漏斗和时间来进行设计。首先让数码管来模仿沙漏的方式进行计时,接着使LED模仿沙漏动态流动。在基本能够体现沙漏的动作显示后,我们再从方便我们日常使用需求来对我们的作品进行修改。通过按键来修改沙漏的计数值,使沙漏的计数范围可以动态变化,然后通过水银开关的传感效果来对设置的方式进行判断,判断是加设置还是减设置。增加完设置功能后,我们可以继续对漏斗继续优化,比如可以继续封钟模式和秒计数模式的切换,还可以对沙漏进行暂停计数和继续计数的功能等。在设计完沙漏
16、功能后,倘若水平放置的时候,我们可以使电子漏斗实现电子钟的功能。电子钟的功能有:时间显示 闹钟设置 时间调节 等功能,由于电子钟工作在水平放置,故不能再使用水银开关来对闹钟设置功能和时间调节功能之间的切换,因此,我们就通过按键按下的时间长短来区分闹钟设置和时间调节功能,在闹钟设置的功能中,对时、分进行设定。在时间调节状态中,可以分别对秒、分、时进行设置。通过长按按键分别退出各自的状态。作为一个电子作品,其掉电后能够继续保存其数据在对设置值和当前计时值在很多方面的利用都是有利的。故我们就在作品上添加了数据掉电保存的功能,使我们所设计的电子漏斗更加完善和实用。五、 系统概述我们这次所设置的系统中,
17、通过数码管来显示计数值和时间,并且通过LED灯来模仿沙漏流动的动态显示,在电子钟中,利用LED的闪烁来显示秒的计时。通过将功能按键按下的时间长短与水银开关的传感效应结合起来,对电子沙漏和电子钟来进行设置和调节,使作品的实用性更高。我们还利用了STC89C52RC的EEPROM和定时器2,利用EEPROM来对时间、沙漏计数值、闹钟设置值、沙漏设置值等进行掉电保存,当再次上电后恢复掉电前的状态。利用定时器2来对电子钟进行计时,这样减少了对定时器0和定时器1的利用,降低了电子沙漏与电子钟之间的影响,提高计时的准确性。六、 电路原理图七、 实现方案细节描述通过两个2位数码管实现沙漏计数和电子钟时间的显
18、示,利用水银开关在不同的放置方式会有2中不同电平的产生来实现加、减设置和电子沙漏与电子钟之间的切换。利用三极管的开关特性,通过单片机I/O口输出的高低电平使三极管分别工作于截止状态和饱和状态,从而实现开关特性,这样我们控制蜂鸣器只需令连接蜂鸣器I/O口输出低电平即可使其工作,同理对数码管的位选也是只需向相应的位输出低电平即可选择数码管并使其工作。复位电路我们采用的是上电复位的电路。八、 软件环境及调配下载工具uVision4IDE 是一个基于Window的开发平台,包含一个高效的编辑器,一个项目管理器和一个MAKE工具。uVision4支持所有的KEIL 8051工具,包括C编译器,宏汇编器,
19、连接/定位器,目标代码到HEX的转换器。下载工具是采用USB串口下载,安装相应的驱动程序,通过STC_ISP_V480.exe下载软件将编写的程序下载到单片机上。九、 软件流程图及设计思想(1)流程图开始 水平放置 非水平放置电子钟电子沙漏 K=0? K长按 K长按 K长按 K长按K=0? 短按 长按 短按 长按沙漏暂停计数闹钟设置(计时不停止)时间设置(计时停止)沙漏设置 K=0 竖直 水平 颠倒沙漏继续计数竖直放置 颠倒放置 竖直 颠倒K=0?K=0?K=0?K=0?K=0?K=0?K=0? Y Y Y N Y N Y Y Y暂停计数值-1计数值+1K=0?shi+K=0?Fen+Shi+
20、Fen+ 水平放置? 水平 Y 水平 Y Miao-K=0?Miao+K=0?shi-Fen-Fen-Fen-K=0?Fen- Y Yshi- Y继续(2) 设计思想在软件设计的过程中,灵活运用硬件特点,在仅有1个按键的情况下结合2个水银开关的传感特性来实现不同工作状态的转换和控制。在软件方面使用多个标志位,使工作状态转换的过程中能够稳定地工作,也使每个工作模式之间互不干扰,提高了系统的工作性能。十、 软件功能及模块描述(1) 数码管显示1.数码管电路图2.数码管显示的实现我们要在一个2位数码管中显示不同的数值,这样我们就需要采用数码管的动态显示方法,即我们先让数码管的1位先显示数值,然后把这
21、位数码管关闭,延时约15ms后,再让另外一位数码管显示另外一个数值。由于两组数码管的连接是相反的,为了使无论是竖直放置或者是颠倒放置,其所显示的值均为竖直向上,我们的解决方法是建立2组查找表,分别是竖直放置的段选和颠倒放置的段选,然后编写4个数码管显示子程序,分别为:上方数码管竖直放置显示、上方数码管颠倒放置显示、下方数码管竖直放置显示、下方数码管颠倒放置显示,这样当我们需要显示哪个数码管和以什么放置方式显示时,我们直接调用其子函数即可。3. 数码管显示子函数void display(uchar num)/正显示上数码管gewei1=0;/个位显示P0=table_dulanum%10;del
22、ay_ms(1);gewei1=1;/消隐shiwei1=0;/十位显示P0=table_dulanum/10;delay_ms(1);shiwei1=1;/消隐 void downdisplay(uchar num)/反显示上数码管shiwei1=0;/个位显示P0=table_dula1num%10;delay_ms(1);shiwei1=1;/消隐gewei1=0;/十位显示P0=table_dula1num/10;delay_ms(1);gewei1=1;/消隐 void display2(uchar num) /正显示下数码管gewei2=0;/个位显示P0=table_dulanu
23、m%10;delay_ms(1);gewei2=1;/消隐shiwei2=0;/十位显示P0=table_dulanum/10;delay_ms(1);shiwei2=1;/消隐 void downdisplay2(uchar num) /反显示下数码管shiwei2=0;/个位显示P0=table_dula1num%10;delay_ms(1);shiwei2=1;/消隐gewei2=0;/十位显示P0=table_dula1num/10;delay_ms(1);gewei2=1;/消隐(2) 掉电保存通过驱动STC89C52RC单片机片内自带的4KB、地址范围为0x20000x2FFF的E
24、EPROM来存储掉电前的数据,由于EEPROM所存储的数据掉电后不丢失,这样通过使用EEPROM我们就可以实现了掉电保存数据的功能。对单片机片内EEPROM的操作驱动程序如下:/定义ISP写操作命令#define rdcommand 0x01/字节读数据命令#define prgcommand 0x02/字节编程数据命令#define erasecommand 0x03 /扇区擦除数据命令#define waittime 0x01 /设置等待时间/*寄存器声明*/sfr ISP_DATA=0XE2;sfr ISP_ADDRH=0XE3;sfr ISP_ADDRL=0XE4;sfr ISP_CM
25、D=0XE5;sfr ISP_TRIG=0XE6;sfr ISP_CONTR=0XE7;sfr T2MOD = 0xC9;/*对单片机片内EEPROM的操作驱动程序*/void ISP_IAP_enable()/打开ISP,IAP功能EA=0;ISP_CONTR=ISP_CONTR&0x18; /0001,1000ISP_CONTR=ISP_CONTR|waittime;/写入硬件延时ISP_CONTR=ISP_CONTR|0x80;/ISPEN=1void ISP_IAP_disable() /关闭ISP,IAP功能ISP_CONTR=ISP_CONTR&0x7f;/ISPEN=0ISP_T
26、RIG=0x00;EA=1;void ISPgoon() /公用触发代码ISP_IAP_enable();/打开ISP,IAP功能ISP_TRIG=0x46;/触发器ISP_IAP命令字节1ISP_TRIG=0xb9;/触发器ISP_IAP命令字节2_nop_();uchar bety_read(uint addr)/字节读 地址为0x2000到0x21FFISP_ADDRH=(uchar)(addr8);/地址赋值ISP_ADDRL=(uchar)(addr&0x00ff);ISP_CMD=ISP_CMD&0xf8;/清除低3位ISP_CMD=ISP_CMD|rdcommand;/写入读命令
27、ISPgoon();/触发执行delay_10us(1);ISP_IAP_disable();/关闭ISP,IAP功能return (ISP_DATA);void sectorerase(uint sector_addr)/写数据前对扇区擦除ISP_ADDRH=(uchar)(sector_addr8);/取扇区地址ISP_ADDRL=sector_addr;ISP_CMD=ISP_CMD&0xf8;/清空低三位ISP_CMD=ISP_CMD|erasecommand;/擦除命令3ISPgoon(); /触发执行delay_ms(10);ISP_IAP_disable();/关闭ISP,IAP
28、功能void bety_write(uint addr,uchar original_data)/字节写,地址为0x2000到0x21FFISP_ADDRH=(uchar)(addr8);/地址赋值ISP_ADDRL=(uchar)(addr&0x00ff);ISP_CMD=ISP_CMD&0xf8;/清除低3位ISP_CMD=ISP_CMD|prgcommand;/写入命令2ISP_DATA=original_data;/写入数据准备ISPgoon();/触发执行delay_10us(6);ISP_IAP_disable();/关闭ISP,IAP功能由于在对单片机的片内EEPROM进行擦除和
29、写操作的时候,我们需要保证其操作过程的完整性和操作的次数不能过于频繁,因此我们在每次进行擦除和写操作的时候,先将中断关闭,在操作完成后再打开中断。通过使用标志位的方法,每当数据改变的时候,我们将相应的标志位置1,从而进行擦除和写EEPROM的操作,操作完成后再将标志位清0,因此,只有需要存储的数据变化的时候我们才对EEPROM进行操作,避免操作频繁而无法准确将数据写进EEPROM中。例:对EEPROM进行擦除和写操作的程序if(flag4=1)sectorerase(0x2400);bety_write(0x2400,shezi1);flag4=0;(3) 按键延时程序按键延时程序实现的功能为
30、:通过传递相应的时间值,当按键按下的时间大于传递的时间时,则函数返回0,否则返回大于0的数。我们实现其效果就是在一个延时子程序中,若延时时间到了就返回0,假如延时时间没有到但松开按键时,我们就退出for语句组成的延时程序,并且返回大于0的数。程序如下:uint key_delay(uint z)uint x,y;for(x=z;x0;x-) /按键延时if(k=1)break; /退出for语句for(y=124;y0;y-);return x;(4) 沙漏LED动态显示LED电路图LED动态显示在控制11盏LED灯模仿沙漏流动的动态显示时,我们采用的事查表法来实现,每一秒钟哪盏LED亮哪盏L
31、ED灭都在查表中列出,这样就可以方便、简单地实现了LED的动态显示。程序如下:uchar code table_deng=0x80,0xc0,0xe0;/竖直放置911亮灭顺序uchar code table_deng1=0x1e,0x1c,0x18,0x50,0xc0;/竖直放置18亮灭顺序uchar code table_deng2=0x7f,0x3f,0x1f; /颠倒放置911亮灭顺序uchar code table_deng3=0xc1,0xc3,0xc7,0x4f,0x1f;/颠倒放置18亮灭顺序if(flag8=0) /漏斗初始化P2=0Xc0;P1=P1|0Xf0;flag8=
32、1;ds=0;dx=0;flag9=0;if(e=20)/1秒if(flag93)/查表3次P1=P1&table_deng2ds+;flag9+;if(flag9=3)ds=0;e=0;if(f=20)/1秒P2=table_deng3dx+;if(dx=6)/查表6次dx=0;flag9=0;P2=0Xc0;P1=P1|0Xf0;f=0;(5) 按键长短实现状态的选择通过按键延时程序所返回的值进行选择,短按返回大于0的数,长按达到延时时间时返回0,这样我们就可以实现了功能的选择。例:电子沙漏设置与退出设置程序:if(k=0)delay_ms(30);if(k=0)x=key_delay(2
33、000); /按键延时if(x=0)/退出设置flag3=0;flag11=0;while(!k)/等待按键松开a=20;b=20;c=20;d=20;e=20;f=20;flag5=0;if(s1=1 & s2=0)display(shezi1);downdisplay2(0);num1=shezi1;num2=0;if(s1=0 & s2=1)downdisplay(0);display2(shezi1);num1=0;num2=shezi1;break;else /进入设置flag3=1;if(s1=1 & s2=0)flag4=1;shezi1+;if(shezi1=100)shezi
34、1=0;if(s1=0 & s2=1)flag4=1;shezi1-;if(shezi10)shezi1=99;if(flag4=1)sectorerase(0x2400);bety_write(0x2400,shezi1);flag4=0;while(s1=0 & s2=0) /进入分钟模式flag17=1;/分钟模式标志display(shezi1);downdisplay2(shezi1);if(k=0)/退出分钟模式delay_ms(20);if(k=0)flag17=0;while(!k);break;(6) 闹钟蜂鸣器报警蜂鸣器电路程序设计设计闹钟蜂鸣器报警时,我们不能在报警的过程
35、中关闭定时器,以保证时间精确,在报警的过程中我们通过按下功能键使蜂鸣器停止报警,因为报警设定的最小时间为分钟,所以我们需要通过设定标志位使其当按键按下了之后就不会再次进入报警程序中。程序如下:while(fen=shezi2 & shi=shezi3) /蜂鸣器报警if(flag26=0)while(1)bee=0;delay_ms(500);bee=1;delay_ms(500);if(k=0)delay_ms(20);if(k=0)while(!k)display(shezi2); downdisplay2(shezi3);flag26=1;/停止报警,通过再次按下功能键才能再次报警bre
36、ak;break;十一、 系统测试在完成硬件分析和软件程序设计后,将编写的程序下载到单片机上,进行调试和优化。在调试过程中,按键的延时效果基本符合我们我希望设计的延时。在工作态与设置状态之间的切换是通过按键来实现的。在电子钟工作状态下,通过短按功能键实现了进入闹钟调节的模式,然后结合水银开关来实现在竖直放置的时候对分钟进行加1调节,随后水平放置后实现对分钟进行减1调节。颠倒放置的时候对小时进行加1调节,随后水平放置后实现对小时进行减1调节。长按功能键就退出闹钟的设置。在电子钟工作状态下,通过长按功能键2秒时就会进入到时间的调节模式,在时间调节模式下,若竖直放置却没有按下功能键或者转换到颠倒放置
37、没有按下功能键时,当将作品水平放置时就可以对秒进行调节,水平向上为加1调节,水平向下为减1调节。若竖直放置时按下了功能键,则此时就可以对分钟进行调节,竖直放置为加1调节,水平向上放置为减1调节。若颠倒放置时按下了功能键,则此时就可以对小时进行调节,颠倒放置为加1调节,水平向下放置为减1调节。长按功能键约2秒即可返回电子钟工作状态,并且此时的电子钟会以我们所设定的时间开始计时。在电子沙漏工作状态下,短按功能键会使沙漏停止计数,若在次短按功能键就会继续计数。若长按功能键约2秒时,电子沙漏就会进入设置状态,竖直放置可以对设置值进行加1调节,颠倒放置可以对设置值进行减1调节。若此时水平放置时,当按1次
38、按键就会使沙漏进入分钟模式,当按2次按键就会使沙漏返回秒模式。通过长按功能键约2秒就可以退出设置状态返回到电子沙漏模式。十二、 尚未完成工作的困难及解决思路(1)尚未完成工作的困难在设计我们的作品完成之后,我们希望在我们所设计的作品中添加电子秒表的计时功能。未能完成的原因是我们在编写我们所需要实现的功能的程序已经达到了STC89C52RC单片机的程序存储量8KB的大小,无法在添加更多的功能了(2) 解决思路我们可以通过仔细分析程序的结构,尽可能使我们已经设计完的程序更加精简高效,尽可能多地节省程序空间。设计秒表的方案:我们可以通过在电子钟切换到电子沙漏时,作品的放置方式来决定究竟是进入电子沙漏
39、还是电子秒表的工作状态。例如我们可以是在竖直放置的时候从电子钟切换到电子沙漏,颠倒放置的时候从电子钟切换到电子秒表的状态。在电子秒表中每一秒计时,电子秒表计时多数是在1小时以内的,那么我们可以不用显示小时,从而在上方的数码管显示秒,下方的数码管显示分,若短按功能键的停止计时,再次短按功能键则继续计时。另外我们可以通过翻转电子秒表来实现计数清零的功能。十三、 本设计已有的创新点及后期升级优化的思路方案(1) 创新点本次设计的电子漏斗不仅实现了电子沙漏的功能同时也实现了电子钟的功能。在电子钟中,现在大多数的电子钟都没有对秒的设置,在这次设计中,我们添加了对秒设置的功能,同时我们将秒以LED灯的形式表现出来,使得电子钟的显示灵动美观。在设计电子沙漏时,我们添加了控制沙漏工作的暂停和继续工作的功能,可以让我们随时掌控沙漏的工