嵌入式系统原理及应用课程设计Word文档格式.docx

上传人:b****5 文档编号:17455261 上传时间:2022-12-01 格式:DOCX 页数:17 大小:148.39KB
下载 相关 举报
嵌入式系统原理及应用课程设计Word文档格式.docx_第1页
第1页 / 共17页
嵌入式系统原理及应用课程设计Word文档格式.docx_第2页
第2页 / 共17页
嵌入式系统原理及应用课程设计Word文档格式.docx_第3页
第3页 / 共17页
嵌入式系统原理及应用课程设计Word文档格式.docx_第4页
第4页 / 共17页
嵌入式系统原理及应用课程设计Word文档格式.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

嵌入式系统原理及应用课程设计Word文档格式.docx

《嵌入式系统原理及应用课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统原理及应用课程设计Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。

嵌入式系统原理及应用课程设计Word文档格式.docx

三.功能实现

1.总体功能框图

N

YY

2.详细设计:

(将所设计的各部分的功能程序框图及相关程序代码进行详细的描述)

①.

#include"

uhal.h"

myuart.h"

KeyBoard.h"

Timer.h"

Isr.h"

44b.h"

#include"

Zlg7289.h"

def.h"

lcd320.h"

intTimer3INTCount=0;

inthour=0;

intminute=0;

#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihosting

intmain(void)

{

intclock_h=23;

intclock_m=59;

intclock_s=0;

intkey;

intval=0;

ARMTargetInit();

//开发版初始化

Zlg7289_Reset();

Init_Timer3(100,16,40000,20000);

INTS_OFF();

//DisableinterruptinPSR

SetISR_Interrupt(INT_TIMER3_OFFSET,Timer3_ISR,0);

Open_INT_GLOBAL();

Open_INT(BIT_TIMER3);

INTS_ON();

//EnableinterruptinPSR

Start_Timer3();

Uart_Printf("

\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)//秒设置,键盘3按下时扫描值为18

Delay(1000);

Delay(1000);

//延时让数码管频率显示可见。

Timer3INTCount=Timer3INTCount+1;

if(Timer3INTCount>

59)

Timer3INTCount=0;

}

if(key==10)//秒设置,键盘2按下时扫描值为10

minute=minute+1;

//分钟加一

if(minute>

59)//分钟大于59时清零

minute=0;

//Timer3INTCount=0;

//秒清零

if(key==2)//原理同分钟

hour=hour+1;

if(hour>

23)

hour=0;

}

LED_Display(Timer3INTCount,minute,hour);

//在数码管显示时分秒

%d:

%d\n"

hour,minute,Timer3INTCount);

//在超级终端显示时分秒

}

//闹钟设置*************闹钟设置****************闹钟设置***************

elseif(key==1key==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(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("

timeisover!

getingupnow!

!

\n"

LCD_printf("

\r%d"

rTCNTO3);

}

②.

ZLG7289.h"

externTimer3INTCount,hour,minute;

voidInit_Timer3(U8prescaler1,U8divider3,U16countb3,U16compb3)

{U8div;

switch(divider3)

{case2:

div=0x00;

break;

case4:

div=0x01;

case8:

div=0x02;

case16:

div=0x03;

default:

//prescaler1isfortimer2&

3

//Fre(Timer)=MCLK/(prescaler+1)/divider

rTCFG0&

=~(0xff<

<

8);

rTCFG0|=(prescaler1<

//Allinterrupt,selectMUXinputforTimerN

rTCFG1&

=~(0x0f<

24|0x0f<

12);

rTCFG1|=(div<

rTCMPB3=compb3;

rTCNTB3=countb3;

rTCON|=(0x01<

19);

//Autoreload

voidStart_Timer3(void)

{rTCON|=(0x01<

17);

//ManualUpdate

rTCON&

=~(0x01<

18);

//Inverteroff

16);

//StartTimer3

//MustclearManualupdatebit

voidStop_Timer3(void)

{rTCON&

//StopTimer3

voidTimer3_ISR(void)

{

Timer3INTCount++;

59)//秒累加到59时清零

Timer3INTCount=0;

59)//分钟累加到59时清零

if(hour>

23)//小时累加到23时清零

hour=0;

//LED_Display(Timer3INTCount,minute,hour);

//Uart_Printf("

Timer3INTCount);

③.

zlg7289.h"

intZlg7289SIOBand;

intZlg7289SIOCtrl;

voidZlg7289_Reset()

ZLG7289_ENABLE();

WriteSDIO(ZLG7289_CMD_RST);

ZLG7289_DISABLE();

Delay(20);

unsignedintZlg7289_ReadKey()

unsignedintkey;

WriteSDIO(ZLG7289_CMD_RDKEY);

key=ReadSDIO();

returnkey;

voidLED_Display(unsignedintvalue,unsignedintm,unsignedinth)

{unsignedcharLED[8];

inti;

if(value>

9999)return;

//无用

////////////////秒显示*****************************

for(i=0;

i<

2;

i++)

{LED[i]=value%10;

//分离秒个位

value=value/10;

//分离秒十位

if(value==0)break;

Delay(5);

WriteSDIO(ZLG7289_CMD_HIDE);

WriteSDIO(~(0xff<

(i+1)));

Delay

(1);

for(;

i>

=0;

i--)//八位循环显示

{WriteSDIO(ZLG7289_CMD_DATA0|i);

WriteSDIO(LED[i]);

////////////////秒显示*****************************

//分钟显示aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

for(i=3;

5;

{LED[i]=m%10;

//分离分钟个位

m=m/10;

//分离分钟十位

if(m==0)break;

LED[2]=10;

LED[5]=10;

WriteSDIO(ZLG7289_CMD_DATA0|i);

//分钟显示aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

//小时显示aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

LED[7]=0;

for(i=6;

8;

{LED[i]=h%10;

//分离小时个位

h=h/10;

//分离小时十位

if(h==0)

i=7;

break;

//时钟横杠显示

//小时显示aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

四.总结

(1)任务要求:

①把时钟设置中调整原小时1键改成0键,把原调整分钟2键改成.键,把原调整秒3键改成ENTER键

②把闹钟设置中调整原小时4键改成num键,把原调整5键改成/键,把原显示闹钟6键改成*键

(2)调整后的程序为

//****************对钟************************//

if(key==26|key==19|key==11)//对钟键按下是。

if(key==26)//秒设置,键盘ENTER按下时扫描值为26

if(key==19)//秒设置,键盘.按下时扫描值为19

if(key==11)//原理同分钟

elseif(key==4|key==12|key==20)//原理参照对钟设置

if(key==4)

if(key==12)

if(key==20)

(3)①通过中断、PWM定时器、串口、SIO、GPIO等技术在实验平台上进行综合设计使自己提高了对这门课程的认识,同时更加深了对PWM定时器所实现的功能的了解。

②通过以上程序的修改实现了利用“0键”“、键”“ENTER键”对时钟的调整,以及利用“number键”“/键”“*键”对闹钟的调整与查看。

③通过对实践任务的完成,更加了解熟悉了程序的编译过程以及实现过程。

④通过对试验箱的操作实践中,使我们的动手能力有了更好的提高。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1