嵌入式系统原理及应用课程设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

嵌入式系统原理及应用课程设计报告题目:电子时钟的设计与实现班级:文专电0931姓名:杨阳学号:200990607145试验台号:10指导老师:邱秀芹程序成绩:报告成绩:总成绩:优良中及格不及格2012年2月25日一.课程设计目的通过该课程设计将嵌入式系统原理及应用课程中所学的处理器和接口等技术应用于实际设计中。通过中断、PWM定时器、串口、SIO、GPIO等技术在实验平台上进行综合设计,在理论和实验的基础上进一步提高综合设计能力。二.课程设计内容及功能要求1.通过一个PWM定时计数器,采用定时中断的功能,设计能够在LED上进行时分秒显示的时钟;2.通过键盘实现对钟的功能;3.实现闹钟的功能,闹钟的时间由键盘输入进行设定;4.将时钟在超级终端上显示;时间的设定可以通过超级终端实现;三.功能实现1.总体功能框图NYY开始设置中断72中断到时钟运转键盘按下键值时钟设置闹钟设置闹钟判断显示控制2.详细设计:(将所设计的各部分的功能程序框图及相关程序代码进行详细的描述)①.#includeuhal.h#includemyuart.h#includeKeyBoard.h#includeTimer.h#includeIsr.h#include44b.h#includeZlg7289.h#includedef.h#includelcd320.hintTimer3INTCount=0;inthour=0;intminute=0;#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihostingintmain(void){intclock_h=23;intclock_m=59;intclock_s=0;intkey;intval=0;ARMTargetInit();//开发版初始化Zlg7289_Reset();Init_Timer3(100,16,40000,20000);INTS_OFF();//DisableinterruptinPSRSetISR_Interrupt(INT_TIMER3_OFFSET,Timer3_ISR,0);Open_INT_GLOBAL();Open_INT(BIT_TIMER3);INTS_ON();//EnableinterruptinPSRStart_Timer3();Uart_Printf(\n);//lcd屏*************lcd屏*****************lcd屏**********LCD_Init();LCD_ChangeMode(DspTxtMode);//转换LCD显示模式为文本显示模式//lcd屏*************lcd屏*****************lcd屏**********while(1){//****************对钟************************//while(!(rPDATG&ZLG7289_KEY))//有按键按下时进入while死循环,松开时跳出{key=Zlg7289_ReadKey();//按键值赋给key。//Stop_Timer3();//防止中断影响键盘扫描,关掉中断。Delay(100);//延时防止时序错误。if(key==18|key==10|key==2)//对钟键按下是。{if(key==18)//秒设置,键盘3按下时扫描值为18{Delay(1000);Delay(1000);Delay(1000);//延时让数码管频率显示可见。Delay(1000);Delay(1000);Delay(1000);Timer3INTCount=Timer3INTCount+1;if(Timer3INTCount59)Timer3INTCount=0;}if(key==10)//秒设置,键盘2按下时扫描值为10{Delay(1000);Delay(1000);Delay(1000);//延时让数码管频率显示可见。Delay(1000);Delay(1000);Delay(1000);minute=minute+1;//分钟加一if(minute59)//分钟大于59时清零minute=0;//Timer3INTCount=0;//秒清零}if(key==2)//原理同分钟{Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);hour=hour+1;if(hour23)hour=0;//Timer3INTCount=0;}Delay(1000);LED_Display(Timer3INTCount,minute,hour);//在数码管显示时分秒Uart_Printf(%d:%d:%d\n,hour,minute,Timer3INTCount);//在超级终端显示时分秒}//闹钟设置*************闹钟设置****************闹钟设置***************elseif(key==1key==9|key==17)//原理参照对钟设置{if(key==1){Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);clock_h=clock_h+1;if(clock_h23)clock_h=0;}if(key==9){Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);clock_m=clock_m+1;if(clock_m59)clock_m=0;}if(key==17){Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);}Delay(1000);LED_Display(clock_s,clock_m,clock_h);Uart_Printf(%d:%d:%d\n,hour,minute,Timer3INTCount);}else;//闹钟设置*************闹钟设置****************闹钟设置***************//Start_Timer3();}//闹钟判断*************闹钟判断****************闹钟判断***************while(hour==clock_h&minute==clock_m&key!=1&key!=9&key!=17&key!=2&key!=10&key!=18)//闹钟时间到且闹钟启动时,进入下面的闹钟显示{//Uart_Printf(timeisover!getingupnow!!!!\n);LCD_printf(timeisover!getingupnow!!!!\n);Delay(1000);LED_Display(clock_s,clock_m,clock_h);}//闹钟判断*************闹钟判断****************闹钟判断***************Uart_Printf(%d:%d:%d\n,hour,minute,Timer3INTCount);Delay(1000);LED_Display(Timer3INTCount,minute,hour);//Uart_Printf(\r%d,rTCNTO3);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);Delay(1000);}}②.#includeTimer.h#include44b.h#includedef.h#includeZLG7289.hexternTimer3INTCount,hour,minute;voidInit_Timer3(U8prescaler1,U8divider3,U16countb3,U16compb3){U8div;switch(divider3){case2:div=0x00;break;case4:div=0x01;break;case8:div=0x02;break;case16:div=0x03;break;default:div=0x00;}//prescaler1isfortimer2&3//Fre(Timer)=MCLK/(prescaler+1)/dividerrTCFG0&=~(0xff8);rTCFG0|=(prescaler18);//Allinterrupt,selectMUXinputforTimerNrTCFG1&=~(0x0f24|0x0f12);rTCFG1|=(div12);rTCMPB3=compb3;rTCNTB3=countb3;rTCON|=(0x0119);//Autoreload}voidStart_Timer3(void){rTCON|=(0x0117);//ManualUpdaterTCON&=~(0x0118);//InverteroffrTCON|=(0x0116);//StartTimer3rTCON&=~(0x0117);//MustclearManualupdatebit}voidStop_Timer3(void){rTCON&=~(0x0116);//StopTimer3}voidTimer3_ISR(void){Timer3INTCount++;if(Timer3INTCount59)//秒累加到59时清零{Timer3INTCount=0;minute=minute+1;}if(minute59)//分钟累加到59时清零{minute=0;hour=hour+1;}if(hour23)//小时累加到23时清零{hour=0;}//LED_Display(Timer3INTCount,minute,hour);//Uart_Printf(\r%d,Timer3INTCount);}③.#include44b.h#includeuhal.h#includezlg7289.h#includedef.hintZlg7289SIOBand;intZlg7289SIOCtrl;voidZlg7289_Reset(){ZLG7289_ENABLE();WriteSDIO(ZLG7289_CMD_RST);ZLG7289_DISABLE();Delay(20);}unsignedintZlg7289_ReadKey(){unsignedintkey;ZLG7289_ENABLE();WriteSDIO(ZLG7289_CMD_RDKEY);key=ReadSDIO();ZLG7289_DISABLE();returnkey;}voidLED_Display(unsignedintvalue,unsignedintm,unsignedinth){unsignedcharLED[8];inti;if(value9999)return;//无用////////////////秒显示*****************************for(i=0;

1 / 13
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功