嵌入式系统原理及应用课程设计_第1页
嵌入式系统原理及应用课程设计_第2页
嵌入式系统原理及应用课程设计_第3页
嵌入式系统原理及应用课程设计_第4页
嵌入式系统原理及应用课程设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统原理及应用课程设计报告题 目:电子时钟的设计与实现 班 级:文专电0931 姓 名:杨 阳 学 号:200990607145 试验台号:10 指导老师:邱秀芹 程序成绩: 报告成绩: 总 成 绩:优 良 中 及格 不及格2012年2月25日一课程设计目的通过该课程设计将嵌入式系统原理及应用课程中所学的处理器和接口等技术应用于实际设计中。通过中断、PWM定时器、串口、SIO、GPIO等技术在实验平台上进行综合设计,在理论和实验的基础上进一步提高综合设计能力。二. 课程设计内容及功能要求1. 通过一个PWM定时计数器,采用定时中断的功能,设计能够在LED上进行时分秒显示的时钟;2. 通过键盘实现对钟的功能;3. 实现闹钟的功能,闹钟的时间由键盘输入进行设定;4. 将时钟在超级终端上显示;时间的设定可以通过超级终端实现;三功能实现1.总体功能框图开始设置中断72中断到时钟运转键盘按下键值时钟设置闹钟设置闹钟判断 显示控制 N Y Y 2.详细设计:(将所设计的各部分的功能程序框图及相关程序代码进行详细的描述) #includeuhal.h#includemyuart.h#includeKeyBoard.h#includeTimer.h#includeIsr.h#include44b.h#include Zlg7289.h#include def.h#include lcd320.hint Timer3INTCount=0;int hour = 0 ;int minute = 0 ;#pragma import(_use_no_semihosting_swi) / ensure no functions that use semihosting int main(void) int clock_h = 23 ; int clock_m = 59 ; int clock_s = 0 ; int key ; int val=0; ARMTargetInit();/开发版初始化 Zlg7289_Reset(); Init_Timer3(100,16,40000,20000); INTS_OFF();/Disable interrupt in PSR SetISR_Interrupt(INT_TIMER3_OFFSET, Timer3_ISR,0); Open_INT_GLOBAL(); Open_INT(BIT_TIMER3); INTS_ON();/Enable interrupt in PSR Start_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(minute 59 ) /分钟大于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(hour 23 ) hour = 0 ; / Timer3INTCount = 0 ; Delay(1000); LED_Display(Timer3INTCount , minute , hour); /在数码管显示时分秒 Uart_Printf(%d:%d:%dn,hour,minute,Timer3INTCount); /在超级终端显示时分秒 /闹钟设置*闹钟设置*闹钟设置* else if( key =1 key = 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_h 23 ) 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_m 59 ) 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:%dn,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( time is over ! geting up now ! n ); LCD_printf( time is over ! geting up now ! n ); Delay(1000); LED_Display(clock_s , clock_m , clock_h); /闹钟判断*闹钟判断*闹钟判断* Uart_Printf(%d:%d:%dn,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); #include Timer.h#include 44b.h#include def.h#include ZLG7289.hextern Timer3INTCount , hour , minute ;void Init_Timer3(U8 prescaler1,U8 divider3,U16 countb3,U16 compb3) U8 div; switch(divider3) case 2: div=0x00;break; case 4: div=0x01;break; case 8: div=0x02;break; case 16: div=0x03;break; default: div=0x00; /prescaler1 is for timer2&3 /Fre(Timer)=MCLK/(prescaler+1)/divider rTCFG0&=(0xff8); rTCFG0|=(prescaler18); /All interrupt,select MUX input for TimerN rTCFG1&=(0x0f24|0x0f12); rTCFG1|=(div12); rTCMPB3=compb3; rTCNTB3=countb3; rTCON|=(0x0119);/Auto reloadvoid Start_Timer3(void) rTCON|=(0x0117);/Manual Update rTCON&=(0x0118);/Inverter off rTCON|=(0x0116);/Start Timer3 rTCON&=(0x0117);/Must clear Manual update bitvoid Stop_Timer3(void)rTCON&=(0x0159) /秒累加到59时清零 Timer3INTCount=0; minute = minute + 1 ; if(minute 59) /分钟累加到59时清零 minute = 0 ; hour = hour + 1 ; if(hour23) /小时累加到23时清零 hour=0 ; / LED_Display(Timer3INTCount , minute , hour);/ Uart_Printf(r%d ,Timer3INTCount); #include 44b.h#includeuhal.h#include zlg7289.h#include def.hint Zlg7289SIOBand;int Zlg7289SIOCtrl;void Zlg7289_Reset()ZLG7289_ENABLE();WriteSDIO(ZLG7289_CMD_RST);ZLG7289_DISABLE();Delay(20);unsigned int Zlg7289_ReadKey()unsigned int key;ZLG7289_ENABLE();WriteSDIO(ZLG7289_CMD_RDKEY);key=ReadSDIO();ZLG7289_DISABLE();return key;void LED_Display(unsigned int value , unsigned int m , unsigned int h) unsigned char LED8; int i ; if(value9999)return;/无用 /秒显示* for(i=0;i2;i+) LEDi=value%10; / 分离秒个位 value=value/10; / 分离秒十位 if(value=0)break; ZLG7289_ENABLE(); Delay(5); WriteSDIO(ZLG7289_CMD_HIDE); WriteSDIO(0xff=0;i-) /八位循环显示 WriteSDIO(ZLG7289_CMD_DATA0|i); WriteSDIO(LEDi); Delay(1); /秒显示* / 分钟显示 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa for(i=3;i5;i+) LEDi=m%10; / 分离分钟个位 m=m/10; / 分离分钟十位 if(m=0)break; ZLG7289_ENABLE(); Delay(5); WriteSDIO(ZLG7289_CMD_HIDE); WriteSDIO(0xff=0;i-) /八位循环显示 LED2 = 10 ; LED5 = 10 ; WriteSDIO(ZLG7289_CMD_DATA0|i); WriteSDIO(LEDi); Delay(1); / 分钟显示 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa / 小时显示 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa LED7 = 0 ; for(i=6;i8;i+) LEDi=h%10; / 分离小时个位 h=h/10; / 分离小时十位 if(h=0) i=7 ; break; ZLG7289_ENABLE(); Delay(5); WriteSDIO(ZLG7289_CMD_HIDE); WriteSDIO(0xff=0;i-) /八位循环显示 LED2 = 10 ; /时钟横杠显示 LED5 = 10 ; /时钟横杠显示 WriteSDIO(ZLG7289_CMD_DATA0|i); WriteSDIO(LEDi); Delay(1); / 小时显示 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ZLG7289_DISABLE();四总结(1)任务要求:把时钟设置中调整原小时1键改成0键,把原调整分钟2键改成.键,把原调整秒3键改成ENTER键把闹钟设置中调整原小时4键改成num键,把原调整5键改成/键,把原显示闹钟6键改成*键(2)调整后的程序为/*对钟*/ while(!(rPDATG&ZLG7289_KEY) /有按键按下时进入while死循环,松开时跳出 key=Zlg7289_ReadKey(); /按键值赋给key 。/ Stop_Timer3() ; /防止中断影响键盘扫描,关掉中断。 Delay(100); /延时防止时序错误。 if( key = 26 | key = 19 | key = 11 ) /对钟键按下是。 if( key = 26) /秒设置,键盘ENTER按下时扫描值为26 Delay(1000);Delay(1000);Delay(1000); /延时让数码管频率显示可见。 Delay(1000);Delay(1000);Delay(1000); Timer3INTCount = Timer3INTCount + 1 ; if(Timer3INTCount59) Timer3INTCount = 0 ; if( key = 19 ) /秒设置,键盘.按下时扫描值为19 Delay(1000);Delay(1000);Delay(1000); /延时让数码管频率显示可见。 Delay(1000);Delay(1000);Delay(1000); minute = minute + 1 ; /分钟加一 if(minute 59 ) /分钟大于59时清零 minute = 0 ; / Timer3INTCount = 0 ; /秒清零 if( key =11 ) /原理同分钟 Delay(1000);Delay(1000);Delay(1000); Delay(1000);Delay(1000);Delay(1000); Delay(1000);Delay(1000);Delay(1000); hour = hour + 1 ; if(hour 23 ) hour = 0 ; / Timer3INTCount = 0 ; Delay(1000); LED_Display(Timer3INTCount , minute , hour); /在数码管显示时分秒 Uart_Printf(%d:%d:%dn,hour,minute,Timer3INTCount); /在超级终端显示时分秒 /闹钟设置*闹钟设置*闹钟设置* else if( key = 4 | key = 12 | key = 20 ) /原理参照对钟设置 if( key = 4 ) Delay(1000);Delay(1000);Delay(1000); Delay(1000);Delay(1000);Delay(1000); Delay(1000);Delay(1000);Delay(1000); Dela

温馨提示

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

评论

0/150

提交评论