嵌入式系统原理与应用课程设计报告书.docx
- 文档编号:16283348
- 上传时间:2023-07-12
- 格式:DOCX
- 页数:17
- 大小:67.18KB
嵌入式系统原理与应用课程设计报告书.docx
《嵌入式系统原理与应用课程设计报告书.docx》由会员分享,可在线阅读,更多相关《嵌入式系统原理与应用课程设计报告书.docx(17页珍藏版)》请在冰点文库上搜索。
嵌入式系统原理与应用课程设计报告书
嵌入式系统原理及应用课程设计报告
题
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通过对试验箱的操作实践中,使我们的动手能力有了更好的提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 原理 应用 课程设计 报告书