1、 优 良 中 及格 不及格 2月25日一课程设计目的经过该课程设计将嵌入式系统原理及应用课程中所学的处理器和接口等技术应用于实际设计中。经过中断、 PWM定时器、 串口、 SIO、 GPIO等技术在实验平台上进行综合设计, 在理论和实验的基础上进一步提高综合设计能力。二. 课程设计内容及功能要求1. 经过一个PWM定时计数器, 采用定时中断的功能, 设计能够在LED上进行时分秒显示的时钟; 2. 经过键盘实现对钟的功能;3. 实现闹钟的功能, 闹钟的时间由键盘输入进行设定;4. 将时钟在超级终端上显示; 时间的设定能够经过超级终端实现;三功能实现1.总体功能框图 N Y Y2.详细设计: (
2、将所设计的各部分的功能程序框图及相关程序代码进行详细的描述) #includeuhal.hmyuart.hKeyBoard.hTimer.hIsr.h44b.h#include Zlg7289.hdef.hlcd320.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 ; in
3、t clock_s = 0 ; int key ; int val=0; ARMTargetInit(); /开发版初始化 Zlg7289_Reset(); Init_Timer3(100,16,40000, 0); 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
4、(n); /lcd屏*lcd屏*lcd屏* LCD_Init(); LCD_ChangeMode(DspTxtMode);/转换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)
5、 /秒设置, 键盘3按下时扫描值为18 Delay(1000);Delay(1000); /延时让数码管频率显示可见。 Timer3INTCount = Timer3INTCount + 1 ; if(Timer3INTCount59) Timer3INTCount = 0 ; if( key = 10 ) /秒设置, 键盘2按下时扫描值为10 minute = minute + 1 ; /分钟加一 if(minute 59 ) /分钟大于59时清零 minute = 0 ; / Timer3INTCount = 0 ; /秒清零 if( key =2 ) /原理同分钟 hour = hour
6、 + 1 ; if(hour 23 ) hour = 0 ; LED_Display(Timer3INTCount , minute , hour); /在数码管显示时分秒%d:%dn,hour,minute,Timer3INTCount); /在超级终端显示时分秒 /闹钟设置*闹钟设置*闹钟设置* else if( key =1 key = 9| key = 17 ) /原理参照对钟设置 if( key = 1) clock_h = clock_h + 1 ; if( clock_h clock_h = 0 ; if( key =9 ) clock_m = clock_m + 1 ; if(
7、 clock_m 59 ) clock_m = 0 ; if( key = 17 ) LED_Display(clock_s , clock_m , clock_h); else ; / Start_Timer3(); /闹钟判断*闹钟判断*闹钟判断* while( hour = clock_h & minute = clock_m & key != 1 &= 9 &= 17 &= 2 &= 10 &= 18 ) / 闹钟时间到且闹钟启动时, 进入下面的闹钟显示 / Uart_Printf( time is over ! geting up now ! n LCD_printf(r%d ,rT
8、CNTO3);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; case 8: div=0x02; case 16: div=0x03; default: /prescaler1 is for timer2&3 /Fre(Timer)=MCLK/(prescaler+1)/divider rTCFG0&=(0xff8); rTCFG0|=(prescaler1 /All interrupt,select MUX input for TimerN rTCFG1&=(0x0f24|0x0f12); rTCFG1|=(div rTCMPB3=compb3; rTCNTB3=countb3; rTCON|=(0x0119);/Auto reloadvoid Start_Timer
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1