|
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (25.48 KB, 下載次數(shù): 134)
下載附件
2019-6-10 03:15 上傳
近年來(lái),隨著計(jì)算機(jī)技術(shù)及集成電路技術(shù)的發(fā)展,嵌入式技術(shù)日漸普及,在通訊、網(wǎng)絡(luò)、工控、醫(yī)療、電子等領(lǐng)域發(fā)揮著越來(lái)越重要的作用。嵌入式系統(tǒng)無(wú)疑成為當(dāng)前最熱門(mén)最有發(fā)展前途的IT應(yīng)用領(lǐng)域之一。32位嵌入式系統(tǒng)發(fā)展很快,32位單片機(jī)已逐漸占領(lǐng)8位機(jī)的市場(chǎng),并以很高的性?xún)r(jià)比贏得了越來(lái)越多的用戶(hù)的青睞。隨著科技和工藝的進(jìn)步,32位單片機(jī)的優(yōu)勢(shì)會(huì)更加突顯出來(lái),將會(huì)成為嵌入式系統(tǒng)的主流。在32位嵌入式系統(tǒng)中,基于ARM的應(yīng)用占據(jù)了大部分份額。
實(shí)時(shí)時(shí)鐘(RTC)器件是一種能提供日歷/時(shí)鐘、數(shù)據(jù)存儲(chǔ)等功能的專(zhuān)用集成電路,常用作各種計(jì)算機(jī)系統(tǒng)的時(shí)鐘信號(hào)源和參數(shù)設(shè)置存儲(chǔ)電路。RTC具有計(jì)時(shí)準(zhǔn)確、耗電低和體積小等特點(diǎn),特別適用于在各種嵌入式系統(tǒng)忠記錄事件發(fā)生的時(shí)間和相關(guān)信息,尤其是在通信工程、電力自動(dòng)化、工業(yè)控制等自動(dòng)化程度較高領(lǐng)域的無(wú)人職守環(huán)境。隨著集成電路技術(shù)的不斷發(fā)展,RTC器件的新品也不斷推出。這些新品不僅具有準(zhǔn)確的RTC,還有大容量的存儲(chǔ)器、溫度傳感器和A/D數(shù)據(jù)采集通道等,已成為集RTC、數(shù)據(jù)采集和存儲(chǔ)于一體的綜合功能器件,特別適用于以微控制器為核心的嵌入式系統(tǒng)。
本次設(shè)計(jì)是采用LPC2138的32位芯片設(shè)計(jì)的可調(diào)萬(wàn)年歷,具有調(diào)時(shí)、調(diào)分、調(diào)月、調(diào)日和準(zhǔn)點(diǎn)報(bào)時(shí)的功能。當(dāng)整點(diǎn)時(shí),蜂鳴器響的次數(shù)為當(dāng)時(shí)小時(shí)的值以及LED會(huì)閃爍相應(yīng)的次數(shù)。
一、功能說(shuō)明 1
二、系統(tǒng)硬件設(shè)計(jì) 1
21 系統(tǒng)結(jié)構(gòu) 1
22元器件的選擇 2
三、系統(tǒng)軟件設(shè)計(jì) 3
31程序和芯片的初始化 3
32構(gòu)建功能模塊 4
四、實(shí)驗(yàn)測(cè)試 7
41IAR軟件的編譯,連接和運(yùn)行 7
42protues仿真軟件的聯(lián)合調(diào)試 8
五、實(shí)驗(yàn)結(jié)果 9
51仿真結(jié)果 9
52實(shí)驗(yàn)板結(jié)果 10
六、心得體會(huì) 11
七、程序清單 11
一、功能說(shuō)明
利用內(nèi)部RTC的實(shí)時(shí)時(shí)鐘,制作一個(gè)時(shí)鐘,通過(guò)液晶顯示模塊顯示年、月、日和時(shí)間。K1鍵、K2鍵、K3鍵和K4鍵分別可用于調(diào)整月份、日、小時(shí)和分鐘數(shù)。在調(diào)整過(guò)程中,日期和時(shí)鐘以新的時(shí)間為起點(diǎn)繼續(xù)刷新顯示。同時(shí),該設(shè)計(jì)具有整點(diǎn)報(bào)時(shí)的功能,當(dāng)整點(diǎn)時(shí),蜂鳴器響的次數(shù)為當(dāng)時(shí)小時(shí)的值以及LED會(huì)閃爍相應(yīng)的次數(shù)。
本設(shè)計(jì)采用的是OCM128128液晶顯示模塊是128×128點(diǎn)陣型液晶顯示模塊,可顯示各種字符及圖形,可與CPU直接接口,具有8位標(biāo)準(zhǔn)數(shù)據(jù)總線(xiàn)、6條控制線(xiàn)及電源線(xiàn)。采用T6963C驅(qū)動(dòng)IC進(jìn)行控制。本實(shí)驗(yàn)板中采用的是3.3V的液晶模塊,可以直接連接到LPC2138的GPIO上,而不需要進(jìn)行電平轉(zhuǎn)換。
二、系統(tǒng)硬件設(shè)計(jì)2.1 系統(tǒng)結(jié)構(gòu)
本實(shí)驗(yàn)是基于LPC2138ARM處理器而設(shè)計(jì)的實(shí)時(shí)時(shí)鐘,綜合性較強(qiáng),涉及到RTC外部中斷,引腳的GPIO功能,C語(yǔ)言編程等知識(shí)。
首先要定義P0口為基本I\O功能,然后通過(guò)引腳功能選擇寄存器PINSEL0及PINSEL1定義輸入輸出外部中斷口所在的位,另外還要對(duì)外部中斷進(jìn)行初始化,其中有規(guī)定他們的優(yōu)先級(jí),中斷觸發(fā)方式,中斷地址分配,
本實(shí)驗(yàn)采用液晶模塊OCM128128同時(shí)顯示實(shí)時(shí)時(shí)間,同樣要對(duì)他們進(jìn)行初始化,包括檢查總線(xiàn)忙與閑,傳送地址,傳送數(shù)據(jù)及顯示函數(shù)的編程、
LPC2138微控制器自帶有一個(gè)實(shí)時(shí)時(shí)鐘RTC帶日歷和時(shí)鐘功能,要使用它也要進(jìn)行一下的基本操作:
設(shè)置RTC基準(zhǔn)時(shí)鐘分頻器
初始化RTC的時(shí)鐘值如,YEAR,MONTH,HOUR等
啟動(dòng)RTC即CCR的CLKEN位職位
讀取完整時(shí)間寄存器值或等待中斷。
陳述完以上的模塊初始化后,下面簡(jiǎn)要說(shuō)明一下程序的流程。先調(diào)用以上各個(gè)模塊的初始化函數(shù)lcd_int(),RTCint()。然后開(kāi)啟RTC時(shí)鐘,并調(diào)用LCD顯示函數(shù)SendTimetRtc(),如果沒(méi)用中斷發(fā)生就判斷實(shí)時(shí)時(shí)間是否與以設(shè)定的報(bào)警時(shí)間相同,如果相同就馬上接通蜂鳴器報(bào)警并且點(diǎn)亮LED燈。假如有中斷發(fā)生,在無(wú)效狀態(tài)下,馬上給中斷標(biāo)志寄存器EXTINT對(duì)應(yīng)位,然后寫(xiě)1清零,然后轉(zhuǎn)到中斷服務(wù)程序。
根據(jù)項(xiàng)目要求,確定該系統(tǒng)的設(shè)計(jì)方案,圖2-1為該系統(tǒng)設(shè)計(jì)方案的結(jié)構(gòu)框圖。硬件電路由6個(gè)部分組成,即ARMLPC2138處理器、時(shí)鐘電路、復(fù)位電路、液晶顯示模塊、時(shí)間調(diào)整模塊、整點(diǎn)報(bào)時(shí)模塊。
2.2元器件的選擇
選用嵌入式arm 7系列的LPC2138芯片和LCDPG128128a顯示器:
三、系統(tǒng)軟件設(shè)計(jì)
3.1程序和芯片的初始化
程序中包括:Lcd的初始化:
void init_lcd (void)
{
IO0CLR=rst;
IO0SET=rst;
delay1(50);
IO0CLR=ce;
IO0SET=wr;
IO0SET=rd;
wr_xd(addr_w,0x40); //文本顯示區(qū)首地址
wr_xd(addr_t,0x42); //圖形顯示區(qū)首地址
wr_td(width,0x00,0x41); //文本顯示區(qū)寬度
wr_td(width,0x00,0x43); //圖形顯示區(qū)寬度
wr_comm(0x81); //邏輯"異或"
wr_td(0x56,0x00,0x22); //CGRAM偏置地址設(shè)置
wr_comm(0x9c); //啟用文本顯示,啟用圖形顯示
}
中斷向量的初始化:
VICIntSelect =0x00000000;
VICVectCntl0 = 0x20|13;
VICVectAddr0 = (uint32)RTC_int;
ILR=0x03;
VICIntEnable = (1<<13);
__enable_irq();
RTC的初始化:
void RTC_int(void)
{
uint32 i,h;
uint8hh[2];
h=HOUR;
hh[0] =HOUR /10+0x30;
hh[1] =HOUR% 10+0x30;
clrram(); //清屏
disp_img(0,16,64,nBitmapDot); //顯示圖畫(huà)
disp_zf(0,12,"Current Time:");
for(i=0;i<2;i++)
{
disp_zfyg(13+i,12,hh);
}
for(i=0;i<h;i++)
{
IO0CLR=LED;
IO0SET=BEAK;
DelayNS(30);
IO0SET=LED;
IO0CLR=BEAK;
DelayNS(30);
}
ILR = 0x03;
VICVectAddr= 0x00;
clrram(); //清屏
}
3.2構(gòu)建功能模塊
調(diào)整時(shí)間和日期的函數(shù)
void key()
{
if((IO0PIN&ATH)==0)
{
CIIR=0x00;
HOUR++;
if(HOUR>23)HOUR=0;
CIIR=0x04;
while((IO0PIN&ATH)==0);
}
if((IO0PIN&ATM)==0)
{
CIIR=0x00;
MIN++;
if(MIN>59) MIN=0;
CIIR=0x04;
while((IO0PIN&ATM)==0);
}
if((IO0PIN&ATS)==0)
{
CIIR=0x00;
MONTH++;
if(MONTH>12) MONTH=0;
CIIR=0x04;
while((IO0PIN&ATS)==0);
}
if((IO0PIN&ATD)==0)
{
CIIR=0x00;
DOM++;
CIIR=0x04;
while((IO0PIN&ATD)==0);
}
}
延時(shí)函數(shù)
void DelayNS(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
整點(diǎn)報(bào)時(shí)函數(shù)
void RTC_int(void)
{
uint32 i,h;
uint8 hh[2];
h=HOUR;
hh[0] = HOUR /10+0x30;
hh[1] = HOUR% 10+0x30;
clrram(); //清屏
disp_img(0,16,64,nBitmapDot); //顯示圖畫(huà)
disp_zf(0,12,"CurrentTime:");
for(i=0;i<2;i++)
{
disp_zfyg(13+i,12,hh);
}
for(i=0;i<h;i++)
{
IO0CLR=LED;
IO0SET=BEAK;
DelayNS(30);
IO0SET=LED;
IO0CLR=BEAK;
DelayNS(30);
}
ILR = 0x03;
VICVectAddr = 0x00;
clrram(); //清屏
}
輸出字符串函數(shù)
void disp_zf(uint32 x,uint32 y,uint8 *str)
{
char c;
wr_xd((addr_w+16*y+x),0x24);
wr_comm(0xb0);
while(*str!='\0')
{
c = (*str);
wr_auto(c-32);
str++;
}
wr_comm(0xb2);
}
輸出一個(gè)字符的函數(shù)
void disp_zfyg(uint32 x,uint32 y,uint8 str)
{
char c;
wr_xd((addr_w+16*y+x),0x24);
wr_comm(0xb0);
c = str;
wr_auto(c-32);
wr_comm(0xb2);
}
四、實(shí)驗(yàn)測(cè)試4.1IAR軟件的編譯,連接和運(yùn)行
構(gòu)建完整的程序:
添加頭文件,中斷處理匯編程序段,初始化函數(shù)和主函數(shù):
4.2protues仿真軟件的聯(lián)合調(diào)試
為L(zhǎng)PC2138芯片選擇Hex文件路徑:
五、實(shí)驗(yàn)結(jié)果5.1仿真結(jié)果
5.2實(shí)驗(yàn)板結(jié)果
六、心得體會(huì)
眾所周知,ARM微處理器功能特別的強(qiáng)大,與MC51單片機(jī)相比,它更適合做中高端數(shù)字系統(tǒng)的微處理器,ARM已經(jīng)成了現(xiàn)代主流微處理器內(nèi)核,目前,絕大多數(shù)碼產(chǎn)品,如,手機(jī),MP3,MP4,數(shù)碼相機(jī),他們的系統(tǒng)都嵌入了ARM系列內(nèi)核,ARM微處理器更新?lián)Q代很快,現(xiàn)在的諾基亞N系列智能手機(jī)如N78,N79已經(jīng)采用了ARM11了,使得運(yùn)行于塞班操作系統(tǒng)S60第三版的應(yīng)用程序流暢自如。
回顧起此次設(shè)計(jì),至今我仍感慨頗多,從理論到實(shí)踐,在整整半個(gè)月的日子里,我學(xué)到很多很多的東西,不僅鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的內(nèi)容。通過(guò)這次設(shè)計(jì)使我懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才是真正的知識(shí),才能提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程遇到了各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過(guò)這次設(shè)計(jì),把以前所學(xué)過(guò)的知識(shí)重新溫故,鞏固了所學(xué)的知識(shí)。
七、程序清單
0.png (6.18 KB, 下載次數(shù): 126)
下載附件
2019-6-10 03:16 上傳
全部資料51hei下載地址:
f742b19390cf1f8d6846f64f49a49657.rar
(193.42 KB, 下載次數(shù): 193)
2019-6-10 03:02 上傳
點(diǎn)擊文件名下載附件
1 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|