智能电子钟课程设计论文_第1页
智能电子钟课程设计论文_第2页
智能电子钟课程设计论文_第3页
智能电子钟课程设计论文_第4页
智能电子钟课程设计论文_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

专业方向课程设计报告题目:智能电子钟智能电子钟一、设计要求制作一个LCD显示的智能电子钟:(1)计时:秒、分、时、日、月、年、星期。(2)闰年自动判别。(3)时间、年、月、日、星期交替显示。(4)自定任意时刻自动开/关屏。(5)计时精度:误差≤1秒/月〔具有微调设置〕。二、方案论证1.时钟方案方案一:软件时钟。可以节约硬件本钱,但是软件编写更为复杂,且误差较大。方案二:硬件时钟。使用时钟芯片DS1302,虽然增加了硬件本钱,但可直接从芯片读取时间及日期数据,大大简化软件的编写,且计时精度高,满足设计要求。因此,本智能电子钟采用硬件时钟。2.软件编程方案方案一:所有子程序均处于主程序中。虽然最终仅一个程序文件,但由于本智能电子钟需用液晶显示屏显示且需根据不同按键状态转换至不同的功能,子程序较多,相应程序的层次结构也较复杂,假设采用该方案,不仅很大程度地加大了软件编写的难度,而且会使程序显得复杂冗长,易读性很差。方案二:监控程序。将各种功能定义为多个任务,用监控程序进行任务调度的工作,主函数进行各种初始化、控制及调用子函数等工作,而各子函数那么完成相应功能。该方案虽然要使用监控程序并且最终会有多个源程序文件,但由于移植性很好,各种功能模块定义清晰,表达了模块化的思想,不仅降低了软件编写的难度,也增强了程序的易读性。因此,本智能电子钟采用监控程序进行任务调度工作。3.按键方案方案一:一键一义型按键。每按下一个按键,就获得一个键盘编码信息,由键码散转到对应功能模块的入口,启动对应作业。该方案可使用以下三种方式获取键值:=1\*GB3①单纯查询,主程序用扫描键盘等方式来获取键盘信息,执行对应作业。=2\*GB3②键盘中断,按下任何按键都引起一个外部中断请求,键码分析过程放在外部中断子程序中。=3\*GB3③定时查询,每隔一段时间查询一次键盘,键盘查询过程安排在定时中断中完成。但由于一个按键只对应一个功能,在实现功能较多的情况下,所需按键数较多,不仅会加大成品体积,不易操作,也会增加总的硬件本钱。方案二:一键多义型按键。不根据当前获得的一个键码来决定哪一个作业投入运行,而是根据一个按键操作系列来启动一个作业,同一按键在不同操作系列中有不同的含义。该方案所需按键较少,因此占用的端口数较少,并且减少了硬件本钱,成品体积也较小,虽然在一定程度上,增加了按键功能分配的难度,但综合考虑,本智能电子钟采用一键多义型按键。三、理论设计1.硬件系统1.1硬件原理图1.2硬件总体框图1.3工作原理以单片机为核心,结合软件及硬件完成设计要求。在硬件上,时钟芯片DS1302提供时间及日期数据,LCD1602那么显示时间、日期、闹钟等信息,闹钟铃声用蜂鸣器发出,而软件上,主程序通过对各子程序的调用,初始化时钟芯片、液晶显示屏,接收时间、日期数据,按键信息等,并输出显示信息及各种控制信息。2.软件系统2.1软件流程图2.2监控程序2.2OSIntSendSignal中断中给指定任务发送信号,使指定任务就绪OSSendSignal任务中给指定任务发送信号,使指定任务就绪OSClearSignal去除指定任务信号,使指定任务休眠OSIntExit中断退出处理函数,在此进行中断后的任务切换OSSched非中断的任务切换函数OSTimeTick系统时钟处理函数,处理各个任务的延时OSWait系统等待函数,任务调用此函数可以等待一定时间或信号2.2OSQCreate初始化消息队列OSQPend等待消息队列中的消息OSQAccept无等待从消息队列中取得消息OSQIntPost中断中FIFO方式发送消息OSQIntPostFront中断中LIFO方式发送消息OSQPostFIFO方式发送消息OSQPostFrontLIFO方式发送消息OSQNMsgs取得消息队列中消息数OSQSize取得消息队列总容量OSQFlush清空队列2.2OSSemCreate初始化消息队列OSSemPend等待一个信号量OSSemAccept无等待请求信号量OSSemIntPost中断中发送一个信号量OSSemPost发送一个信号量OSSemQuery查询信号量OS_CPU_C.COSIdle优先级最低的任务OSStartSmallRTOS51初始化函数,调用此函数后多任务开始运行,首先执ID为0的任务OSTickISR系统时钟中断效劳函数OS_CPU_A.ASMLoadCtx任务环境恢复函数OSCtxSw任务主动放弃CPU环境保存函数C_OSCtxSw堆栈处理函数OSIntCtxSw中断使任务放弃CPU环境保存函数2.2KeyInput键盘输入效劳任务2.3子程序2.3#include"config.h"uint8xdataDS1302GetData[7];//秒、分、时、日、月、星期、年uint8xdataDS1302Temp0[9]={"23-59-50"};//秒、分、时uint8xdataDS1302Temp1[11]={"2012-01-01"};//年、月、日uint8xdataDS1302Week[4]={"Mon"};//星期voidDS1302WriteByte(uint8Data);uint8DS1302ReatByte();voidDS1302Write(uint8Addr,uint8Data);uint8DS1302Read(uint8Addr);uint8GetTime();voidDS1302Time();voidWriteTime(uint8Num,uint8Tdat);voidDS1302Init();2.3#include"config.h"voidDelay1602US();/*延时*/voidLCD1602SendComm(uint8Command);/*液晶显示屏写命令*/voidLCD1602SendData(uint8Data);/*液晶显示屏写数据*/voidLCD1602DispStr(uint8x,uint8y,char*Data);/*在lcd指定位置显示一个字符串*/voidLCD1602Disp(uint8x,uint8y,charStr);/*在lcd指定位置显示一个字符串*/voidLCD1602Clr(uint8y);/*去除lcd的指定行*/voidLCD1602Init(void);/*lcd初始化*/voidLCD1602LoadC(uint8Addr,uint8*Data,uint8NChar);/*从lcd指定地址处写多个字节数据*/2.4主程序main.c#include"config.h"sbitled=P2^0;sbitSwitchOn=P2^1;uint8Flag0=0;/*时间闪烁标志*/uint8Flag1=0;/*时间闪烁暂存标志*/uint8Flag2=0;/*显示数据标志*/uint8Flag3=0;/*闹钟暂存标志*/uint8Flag4=0;/*闹钟闪烁标志*/uint8Flag6=0;/*自定义开关屏闪烁标志*/uint8Flag7=0;/*自定义开关屏闪烁标志*/bitFlag5=0;/*秒表显示标志*/bitFlag8=0;/*日期显示标志*/bitAlarmSwitch0;/*闹钟开标志*/bitAlarmSwitch1;/*闹钟关标志*/bitFlag9=0;/*自动校时标志*/bitFlag10=0;/*自动校时标志*/bitFlag11=0;/*自定义开关屏标志*/bitFlag12=0;/*自定义开关屏标志*/uint8Ahour,Amin;/*闹钟变量*/uint8Shour,Smin;/*自定义开屏变量*/uint8Ehour,Emin=1;/*自定义关屏变量*/uint8Day1;/*自定义校时变量*/uint16Sec;/*秒表变量*/uint8xdataTemp3[]={"00-00"};/*闹钟数据显示变量*/uint8xdataTemp4[]={"00-00"};/*秒表数据显示变量*/uint8xdataTemp5[]={"00-00"};/*自定义开屏数据显示变量*/uint8xdataTemp6[]={"00-00"};/*自定义关屏数据显示变量*/uint8codeTemp1[]={31,29,31,30,31,30,31,31,30,31,30,31};/*闰年月份天数*/uint8codeTemp2[]={31,28,31,30,31,30,31,31,30,31,30,31};/*平年月份天数*/voidmain(){ TMOD=0x11; ET0=1; ET1=1;TR0=1; TH1=(65536-20000)/256; TL1=(65536-20000)%256; LCD1602Init(); DS1302Init(); OSStart();}voidTaskA();/*按键扫描并查找高优先级任务*/voidTaskB();/*时间按键处理任务*/voidTaskC();/*日期按键处理任务*/voidTaskD();/*闹钟按键处理任务*/voidTaskE();/*秒表按键处理任务*/voidTaskF();/*自定义开关屏按键处理任务*/voidTaskG();/*液晶扫描及显示处理任务*/voidTaskH();/*蜂鸣器处理任务*/voidTime1()interrupt3/*定时10毫秒*、{ TH1=(65536-20000)/256; TL1=(65536-20000)%256; if(++Sec>=10000) { Sec=0; } Temp4[4]=Sec%10+0x30; Temp4[3]=Sec/10%10+0x30; Temp4[1]=Sec/100%10+0x30; Temp4[0]=Sec/1000%10+0x30; //OSLCD1602DispStr(6,2,Temp4);}voidAlarm();/*闹钟显示计时*、{ Temp3[4]=Amin%10+0x30; Temp3[3]=Amin/10+0x30; Temp3[1]=Ahour%10+0x30; Temp3[0]=Ahour/10+0x30;}voidFlash()/*时间位标志*/{ switch(Flag0) { case1:OSLCD1602DispStr(8,1,"");break; case2:OSLCD1602DispStr(5,1,"");break; case3:OSLCD1602DispStr(13,1,"");break; case4:OSLCD1602DispStr(10,1,"");break; case5:OSLCD1602DispStr(7,1,"");break; case6:OSLCD1602DispStr(2,1,"");break; default:break; }}voidAlarmFlash()/*闹钟闪烁*/{ switch(Flag4) { case1:OSLCD1602DispStr(9,1,"");break; case2:OSLCD1602DispStr(6,1,"");break; default:break; }}voidSwitchFlash()/*自定义开关屏*/{ switch(Flag7) { case1:OSLCD1602DispStr(9,1,"");break; case2:OSLCD1602DispStr(6,1,"");break; case3:OSLCD1602DispStr(9,2,"");break; case4:OSLCD1602DispStr(6,2,"");break; default:break; }}voidTimeCompare()/*时间与闹钟时间及自定义开关屏时间比拟*/{ if((DS1302GetData[2]==Shour)&&(DS1302GetData[1]==Smin)&&Flag11) { led=1; Flag11=0; OSLCD1602Clr(1); OSLCD1602Clr(2); OSLCD1602DispStr(2,1,"YuLilingshikeshuichong"); } if((DS1302GetData[2]==Ehour)&&(DS1302GetData[1]==Emin)&&Flag12) { led=0; Flag12=0; OSLCD1602Clr(1); OSLCD1602Clr(2); } if((DS1302GetData[2]==Ahour)&&(DS1302GetData[1]==Amin)&&AlarmSwitch0) { AlarmSwitch1=1; Flag9=1; } else { AlarmSwitch1=0; SwitchOn=1; } if(((DS1302GetData[1]-Amin)%5==0)&&AlarmSwitch0&&Flag9) { AlarmSwitch1=1; } if(!AlarmSwitch0) { Flag9=0; } if((DS1302GetData[2]==23)&&(DS1302GetData[1]==59)&&(DS1302GetData[0]==59)&&Flag10) { DS1302GetData[0]=DS1302GetData[0]-1; //时间校准 WriteTime(0,DS1302GetData[0]); Flag10=0; } if(DS1302GetData[3]!=Day1) { Flag10=1; } Day1=DS1302GetData[3];}四、电路仿真及仿真结果分析1.仿真电路图2.仿真过程及结果分析将生成的HEX文件加载至单片机中,然后启动仿真。由于对液晶显示屏进行仿真要进行忙状态检测,但该仿真软件无该检测机制,所以需对程序进行相应修改,然后即可看见仿真结果。五、测试方案与测试结果连接计算机并下载相应程序,进行实际的硬件功能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论