嵌入式系统原理与应用课程设计报告书.docx

上传人:b****7 文档编号:16283348 上传时间:2023-07-12 格式:DOCX 页数:17 大小:67.18KB
下载 相关 举报
嵌入式系统原理与应用课程设计报告书.docx_第1页
第1页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第2页
第2页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第3页
第3页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第4页
第4页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第5页
第5页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第6页
第6页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第7页
第7页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第8页
第8页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第9页
第9页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第10页
第10页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第11页
第11页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第12页
第12页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第13页
第13页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第14页
第14页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第15页
第15页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第16页
第16页 / 共17页
嵌入式系统原理与应用课程设计报告书.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式系统原理与应用课程设计报告书.docx

《嵌入式系统原理与应用课程设计报告书.docx》由会员分享,可在线阅读,更多相关《嵌入式系统原理与应用课程设计报告书.docx(17页珍藏版)》请在冰点文库上搜索。

嵌入式系统原理与应用课程设计报告书.docx

嵌入式系统原理与应用课程设计报告书

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

g:

电子时钟的设计与实现

级:

文专电0931

名:

号:

3

试验台号:

10

指导老师:

邱秀芹

程序成绩:

报告成绩:

总成绩:

优良中及格不及格

2012年2月25日

1.课程设计目的

通过该课程设计将嵌入式系统原理及应用课程中所学的处理器和接口等技术应用于实际设计中。

通过中断、PWM定时器、串口、SIO、GPIO等技术在实验平台上进行综合设计,在理论和实验的基础上进一步提高综合设计能力。

2.课程设计容及功能要求

1.通过一个PWM定时计数器,釆用定时中断的功能,设计能够在LED±进行时分秒显示的时钟;

2.通过键盘实现对钟的功能;

3.实现闹钟的功能,闹钟的时间由键盘输入进行设定;

4.将时钟在超级终端上显示;时间的设定可以通过超级终端实现;

3.功能实现

1・总体功能框图

2•详细设计:

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

详细的描述)

1.

#includeMuhal.hH

#mcludeHmyuart.hn

#mcludeHKeyBoaid.hH

#mcludeHTuner.hn

#mcludeHIsr.hn

#includeH44b.hH

#mclude”Zlg7289.1T

#mcludendef.hn

#mcludeHlcd320.hH

mtTiiner3INTCount=O;

iiithour=0;

iiitminute=0;

#pragniauupoil(_use_no_senuliostmg_swi)//ensuienofunctionsthatusesenuliostmgmtmaiii(void)

iiitclockJi=23;

iiitclock_m=59;

iiitclock_s=0;

iiitkev;

J7

iiitval=0;

ARMTaigetlnitQ;〃开发版初始化

Zlg7289_Reset();

Iiut_Tmier3(l00,16.40000,20000);

INTS_OFFQ;//DisableintemiptillPSR

SetISR_In忙mipt(INT_TIMER3_OFFSEI;Timei3_ISR,0);

Open_INT_GLOBAL();

Open_INT(EIT_TIMER3);

INTS_ONQ;//EnableintemiptillPSR

Stail_Timer3();

Uait_Prmtf(n\nH);

〃lcd^*************ic(j^*****************]ccj屏**********

LCD_Iiut();

LCD-ChaiigeMode(DspTxtMode);//转换LCD显示模式为文本显示模式〃lcd^*************ic(j^*****************]ccj屏**********

wlule(l)

〃***************杈寸钟************************〃

while(!

(iPDATG&ZLG7289_KEY))〃有按键按下时进入while死循环,松开时

跳出

 

 

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

Delay(l000):

Delay(1000);Delav(1000);

Delay(l000):

Delay(1000);Delav(1000);

Tiiner3INTCount=Timer3INTCount+1;

if(Tiiner3INTCount>59)

Tuner3INTCount=0;

}

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

{_

Delay(1000):

Delay(1000);Delav(1000);〃延时让数码管频率显示可见。

Delay(1000):

Delay(l000);Delav(1000);

〃分钟加一

〃分钟人于59时清零

〃秒清零

〃原理同分钟

niuiute=niuiute+1;

if(niuiute>59)

niniute=0;

//Tiiner3INTCount=0;

}

if(key=2)

Delay(l000):

Delay(1000);Delav(1000);

Delay(l000):

Delay(1000);Delav(1000);

Delay(l000):

Delay(1000);Delav(1000);

hour=hour+1;if(hour>23)

hour=0;

//Tiiner3INTCount=0;

J

Delay(1000);

LED_Display(Timer3DJTCount,minute,hour);

〃在数码管显示时分

Uait_P】intfV'%d:

%d%d\iT;hoi】i;ninn]©Timer3INTCoimt);

〃在超级终端显示时

分秒

〃闹钟设置*************I闹卡中设置****************闹钟设置***************elseif(key==1key==9|key==17)〃原理参照对钟设置

{

if(key==1)

{

Delay(1000);Delay(1000);Delay(l000);

Delay(1000);Delay(1000);Delay(l000);

Delay(1000);Delay(1000);Delay(l000);

Delay(1000);Delay(1000);Delay(l000);clockh=clockh+1;

if(clock_h>23)clockJi=0;

}

if(key==9)

{

Delay(1000);Delay(1000);Delay(l000);

Delay(1000);Delay(1000);Delay(l000);

Delay(1000);Delay(1000);Delay(l000);

Delay(1000);Delav(1000);Delay(l000);

clockm=clockm+1;if(clock_m>59)

clock_m=0;

}

if(key=17)

Delay(1000);Delay(l000);Delay(l000);

Delay(1000);Delay(1000);Delay(l000);

Delay(1000);Delay(1000);Delay(l000);

Delay(1000);Delay(1000);Delay(l000);

}

Delav(lOOO);

LED_Display(clock_s,clock_m,clock_h);

Uart_Prmtf(n%d:

%d:

%d,di,\houi;niiniite,Timer3INTCount);

}

else;

〃闹钟设置*************|闹卡中设置****************闹钟设置***************

//Stail_Tmiei3Q;

}

〃闹钟判断*************闹卡中判断****************I闹卡中判断***************while(hour==clockji&niiiiute=clock_m&

key!

=1&key!

=9&key!

=17&

key!

=2&key!

=10&key!

=18)//闹钟时间到且闹钟启动时,进入下面的

闹钟显示

{

//Uart__Prmtf(ntimeisover!

getiiigupnow!

!

!

!

\n");

LCD_priiitf(ntimeisover!

getingupnow!

!

!

!

\uJ;Delay(1000);

LED_Display(clock_s,clock_m、clockJi);

}

〃闹钟判断*************|闹钟判断****************|闹钟判断***************

Uart_Prmtf(n%d:

%d:

%d,ii,\houi;niinute,Tiiiier3INTCount);

Delav(lOOO);

LED_Display(Timer3INTCount,niuiute,hour);

//Uart_Prmtf(H\i-%dTTCNTO3);

Delav(lOOO);Delay(1000):

Delay(1000);

Delav(lOOO);Delay(1000):

Delay(1000);

②.

#includenTuner.hM

#mcludeH44b.hn

#mcludeHdef.hn

#mcludeHZLG7289.ir・

externTimer3INTCount,hour、minute;

voidInit_Tuner3(U8prescaler1,U8divider3,U16countb3,U16compb3){U8div;

switch(divider3)

{case2:

div=OxOO;bieak;

case4:

div=0x01;bieak;

case8:

div=0x02;bieak;

case16:

div=0x03;bwak;

default:

div=0x00;

}

//prescaler1isfortiiner2&3

//Fie(Tim亡i)=MCLK/(pwscal亡】+1)/divider

rTCFGO&=〜(Oxff«8);

rTCFG0|=(prescalerl«8);

//AllmteiTupt,selectMUXmputforTunerN

rTCFG1&=〜(0x0f«24|OxOfvv12);

rTCFGl|=(div«12);

rTCMPB3=compb3;

rTCNTB3=countb3;rTCON|=(OxO1«19);//Autoreload

}

voidStart_Timer3(void)

{iTCON|=(OxO17);//ManualUpdate

rTCON&s(0x01«18);//Iiiveigoff

rTCON|=(OxO1«16);//StaitTmier3

rTCON&s(0x01«17);//MustcharManualupdatebit

}voidStop_Tiiner3(void){rTCON&=-(OxO1«16)//StopTuner3

voidTimer3_ISR(void)

Tiiner3INTCount++;

if(Tmier3INTCount>59)//秒累加到59时清零

{

Timer3INTCount=0;

minute=niiiiute+1;

}

if(mmute>59)〃分钟累加到59时清零

{

inuiute=0;

hour=hour+1;

}

if(houi>23)〃小时累加到23时清零

{

hour=0;

}

//LED_Displav(Tiiner3INTCount,minute,hour);//Ua【t_Pnntff\i*%d^TmieiSINTCount);

}

③.

#mcluden44b.hn

#mcludeHuhal.hM

#mcludeHzlg7289.h"

#mcludeHdef.hn

mtZlg7289SIOBand;

mtZlg7289SIOCtii;

voidZlg7289_Reset()

{

ZLG7289_ENABLE();

WnteSDIO(ZLG7289-CMD_RST);

ZLG7289_DISABLEQ;

Delav(20);

unsignedmtZlg7289_ReadKey()

{

unsignedmtkey;

ZLG7289_ENABLE();

WriteSDIO(ZLG7289_CMD_RDKEY);kev=ReadSDIOQ;

ZLG7289_DISABLEQ;

returnkey;

}

voidLED_Display(unsignedmtvalue、unsignedintm,unsignedmth){unsignedcharLED[8];

inti;

if(value>9999)retuni;//无用

////////////////秒显示*****************************fbr(i=0;i<2;i-H-)

{LED[i]=value%10;//分离秒个位

value=value/10;//分离秒十位

if(value==O)break;

}

ZLG7289.ENABLEQ;

Delay(5);

WriteSDIO(ZLG7289_CMD_HIDE);

WriteSDIO(-(Oxff«(i+l)));

Delay(l);

for(;i>=0;i-)〃八位循坏显示

{WriteSDIO(ZLG7289_CNID_DATAO|i);

WriteSDIO(LED[i]);

Delay(l);

}

////////////////秒显^*****************************

//分钟显示aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafor(i=3;i<5;i-H-)

{LED[i]=m%10;//分离分钟个位

m=in/10;//分离分钟十位

if(m=0)bieak;

}

ZLG7289_ENAELE();

Delay(5);

WriteSDIO(ZLG7289_CMD_HIDE);

WriteSDIO(-(Oxff«(i+l)));

Delay(l);

for(;i>=0;i-)〃八位循环显示

{

LED[2]=10;

LED[5]=10;

WnteSDIO(ZLG7289_CMD_DATAO|i);

WriteSDIO(LED[i]);

Delay(l);

}_

//分钟显示aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

//小时显示aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

LED[7]=0;

{LED[i]=h%10;h=h/10;

if(h==0)

{

1=7;

//分离小时个位

//分离小时十位

break;

}

ZLG7289_ENAELE();

Delay(5);

WnteSDIO(ZLG7289_CMD_HIDE);

WriteSDIO(-(Oxff«(i+l)));

Delay(l);

fdr(;i>=0;i-)

{

LED[2]=10;

LED[5]=10;

〃八位循坏显示

//时钟横杠显示

//时钟横杠显示

WriteSDIO(ZLG7289_CMD_DATAO|i);

WiiteSDIO(LED[i]);

Delay(l);

}

//

小时显示aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

ZLG7289_DISABLE();

 

•总结

(1)任务要求:

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

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

(2)调整后的程序为

while(!

(iPDATG&ZLG7289_KEY))〃有按键按下时进入while死循坏,松开时

跳出

 

key=Zlg7289_ReadKey();

Stop_Timei30;

Delay(100);

if(key==26|key==19|key==11)

〃按键值赋给keyo

〃防止中断影响键盘扫描,关掉中断。

〃延时防止时序错误。

〃对钟键按卞是。

 

if(key=26)

〃秒设置,键盘ENTER按卜•时扫描值为26

 

 

Delay(1OOO):

Delay(1000);Delav(1000);〃延时让数码管频率显示可见。

Delay(1000):

Delay(l000);Delav(1000);

Tiiner3INTCount=Timer3INTCount+1;

if(Tiiner3INTCount>59)

Tuner3INTCount=0;

 

Delay(1000):

Delay(1000);Delay(1000);〃延时让数码管频率显示可见。

Delay(l000):

Delay(l000);Delav(1000);

niiiiute=niiiiute+1;

if(niuiute>59)

niiiiute=0;

Tlinei3INTCount=0;

 

〃原理同分钟

if(key=11)

Delay(1000):

Delay(l000);Delav(1000);

Delay(l000):

Delay(l000);Delav(1000);

Delay(lOOO):

Delay(1000);Delav(1000);

hour=hour+1;if(hour>23)

hour=0;

//Tiiner3INTCount=0;

J

Delay(1000);

LED_Display(Timei3INTCount,minute,hour);

〃在数码管显示时分

Uart_P】intfV'%d:

%d%d\iT,hoigniiimeTimei3INTCoimt);

〃在超级终端显示时

分秒

〃闹钟设置*************|闹卡中设置****************闹钟设置***************elseif(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);

Delay(1000);Delay(1000);Delay(1000);clockh=clockh+1;if(clock_h>23)

clockJi=0;

}

if(key==12)

{

Delay(1000);Delay(1000);Delay(1000);

Delay(1000);Delay(1000);Delay(1000);

Delay(1000);Delay(1000);Delay(1000);

Delay(1000);Delay(1000);Delay(1000);

clockm=clockm+1;

if(clock_m>59)clock_m=0;

}

if(key=20)

Delay(1000);Delay(l000);Delay(l000);

Delay(1000);Delay(l000);Delay(l000);

Delay(1000);Delay(l000);Delay(l000);

Delay(1000);Delay(l000);Delay(l000);

}

Delav(lOOO);

LED_Display(clock_s,clock_m,clock_h);

Uart_Prmtf(n%d:

%d:

%d\iinJioiu;niiiiute,Tiiiier3INTCount);

}

else;

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

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

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

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

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2