版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目 錄</b></p><p> 1 設(shè)計(jì)目的 ……………………………………………………………………………………1</p><p> 2 硬件設(shè)計(jì) …………………………………………………………………………………………1</p><p> 2.1硬件方案設(shè)計(jì)…………………………………………………………………
2、………………1</p><p> 2.2單元電路設(shè)計(jì)…………………………………………………………………………………1</p><p> 2.2.1控制部件 ………………………………………………………………………………2</p><p> 2.2.2顯示模塊 ………………………………………………………………………………2</p><p>
3、 2.2.3讀寫時(shí)序 ………………………………………………………………………………4</p><p> 2.2.4讀寫函數(shù) ………………………………………………………………………………4</p><p> 2.2.5地址顯示 ………………………………………………………………………………5</p><p> 2.2.6數(shù)據(jù)處理 …………………………………………
4、……………………………………5</p><p> 2.3硬件調(diào)試………………………………………………………………………………………6</p><p> 3 軟件設(shè)計(jì) …………………………………………………………………………………………8</p><p> 3.1系統(tǒng)分析 ……………………………………………………………………………………8</p>
5、<p> 3.2軟件調(diào)試………………………………………………………………………………………8</p><p> 4 課程設(shè)計(jì)體會(huì)總結(jié) ………………………………………………………………………………9</p><p> 5 參考文獻(xiàn) …………………………………………………………………………………………9</p><p> 附錄 ……………………
6、……………………………………………………………………10</p><p><b> 1 設(shè)計(jì)目的</b></p><p> 用TMS320F2812芯片為核心控制部件,設(shè)計(jì)一個(gè)能用LCD液晶顯示屏顯示當(dāng)前年,月,日,時(shí),分,秒的具有電子時(shí)鐘功能的萬年歷,使用程序來控制時(shí)間的實(shí)時(shí)更新。</p><p> 熟悉CCS3.3軟件的使用;<
7、/p><p> 學(xué)習(xí)并了解DSP板及教學(xué)實(shí)驗(yàn)箱的使用;</p><p> 學(xué)習(xí)DSP芯片的I/O端口的控制方法;</p><p> 熟悉Emulator方式下的程序調(diào)試規(guī)程,并最終能夠熟練掌握在DSP軟硬件環(huán)境下的程序開發(fā)流程;</p><p> 能夠?qū)ΜF(xiàn)有器件進(jìn)行簡(jiǎn)單地編程,實(shí)現(xiàn)各種簡(jiǎn)單地顯示控制。</p><p&g
8、t;<b> 效果圖展示如下:</b></p><p><b> 2 硬件設(shè)計(jì)</b></p><p> 2.1 硬件方案設(shè)計(jì)</p><p> 本系統(tǒng)以TMS320F2812為核心控制部件,利用軟件編程,通過CPU中斷,使用12864 LCD液晶顯示器進(jìn)行時(shí)鐘顯示,實(shí)現(xiàn)基本要求,盡量做到硬件電路簡(jiǎn)單穩(wěn)定,減小電
9、磁干擾和其他環(huán)境干擾,充分發(fā)揮軟件編程的優(yōu)點(diǎn),減小因元器件精度不夠引起的誤差。由于時(shí)間有限和本身知識(shí)水平的發(fā)揮,我們認(rèn)為本系統(tǒng)還有需要改進(jìn)和提高的地方,例如選用更高精度的元器件,硬件電路更加精確穩(wěn)定,軟件測(cè)量算法進(jìn)一步的改進(jìn)與完善等。</p><p> 2.2 單元電路設(shè)計(jì)</p><p> 2.2.1 控制部件 TMS320F2812 CUPTime結(jié)構(gòu)及性能</p>
10、<p> 本次課設(shè)所使用的TMS320F2812是DSP開發(fā)板,主要用到的是其中的CPU定時(shí)器功能,其整體思路如下:</p><p> 初始化系統(tǒng),為系統(tǒng)分配時(shí)鐘,處理看門狗電路等等,</p><p> 初始化CPU定時(shí)器0.</p><p> 定時(shí)器0開始計(jì)數(shù),等待周期中斷,然后進(jìn)入中斷控制,對(duì)時(shí)分秒進(jìn)行自加計(jì)數(shù),并控制一個(gè)LED燈進(jìn)行工作顯
11、示 </p><p><b> 程序部分如下:</b></p><p> int myhour = 12,mymin = 32,mysec = 20;</p><p> int myyear = 2017,mymon = 06,myday = 8; //預(yù)置時(shí)鐘</p><p> interrupt voi
12、d TINT0_ISR(void) // CPU-Timer0中斷函數(shù)</p><p><b> {</b></p><p><b> mysec++;</b></p><p> if((mysec%2) == 0)</p><p><b> {</b>&l
13、t;/p><p> GpioDataRegs.GPADAT.bit.GPIOA0 = 1; //進(jìn)入中斷測(cè)試</p><p><b> }else</b></p><p><b> {</b></p><p> GpioDataRegs.GPADAT.bit.GPIOA0 = 0;</
14、p><p><b> }</b></p><p> if(mysec == 60) //時(shí)分秒自計(jì)數(shù)</p><p><b> {</b></p><p><b> mymin++;</b></p><p> mysec = 0;&
15、lt;/p><p><b> }</b></p><p> if(mymin == 60)</p><p><b> {</b></p><p><b> myhour++;</b></p><p> mymin = 0;</p>&
16、lt;p><b> }</b></p><p> if(myhour == 24) //年月日自計(jì)數(shù)</p><p><b> {</b></p><p><b> myday++;</b></p><p> myhour = 0;</p&g
17、t;<p><b> }</b></p><p> if(myday == 30)</p><p><b> {</b></p><p><b> mymon++;</b></p><p> myday = 1;</p><p>
18、<b> }</b></p><p> if(mymon == 12)</p><p><b> {</b></p><p><b> myyear++;</b></p><p> mymon = 1;</p><p><b> }
19、</b></p><p> CpuTimer0Regs.TCR.bit.TIF=1; //清除定時(shí)器中斷標(biāo)志位</p><p> PieCtrl.PIEACK.bit.ACK1=1; //響應(yīng)同組其他中斷</p><p> EINT; //開全局中斷</p><p><b> }</b>&l
20、t;/p><p> 2.2.2 顯示模塊 LCD12864液晶顯示</p><p> 采用LCD12864液晶顯示。液晶顯示器(LCD)具有功耗低、體積小、重量輕、超薄等許多其它顯示器無法比擬的優(yōu)點(diǎn)。12864分左屏和右屏是由兩塊64*64的液晶組成,有CS1和CS2左右屏使能引腳。64*64的共分8頁, 8行l(wèi)ed液晶是一頁,每行分別是由DB0_DB7控制,也就是從單片機(jī)中發(fā)64次8位
21、的二進(jìn)制數(shù)可以掃一頁,發(fā)64(8頁)次的二進(jìn)制數(shù)可以掃一個(gè)半屏,再乘以二就可以掃全屏,當(dāng)把二進(jìn)制數(shù)全發(fā)完了,才可以控制液晶開始顯示。單片機(jī)可以通過數(shù)據(jù)總線與控制信號(hào)直接采用存儲(chǔ)器訪問形式、I/O設(shè)備訪問形式控制該液晶顯示模塊。</p><p> 液晶顯示模塊的訪問、控制是由2812DSP 對(duì)擴(kuò)展擴(kuò)展接口的操作完成。</p><p> 2.2.3 顯示模塊 LCD12864液晶讀寫時(shí)序
22、</p><p> 數(shù)據(jù)傳輸過程(8位):</p><p><b> MCU寫資料</b></p><p><b> MCU讀資料</b></p><p> 2.2.4 顯示模塊 LCD12864液晶讀寫函數(shù)</p><p> void wr_lcd (uchar
23、 dat_comm,uint content)</p><p><b> {</b></p><p><b> uint i,j;</b></p><p><b> sclk=0;</b></p><p><b> std=0;</b><
24、/p><p><b> delay(1);</b></p><p> for(i=0;i<5;i++)</p><p> wr_byte1(); </p><p> wr_byte0();</p><p> if(dat_comm)</p><p&
25、gt; wr_byte1(); //data</p><p><b> else</b></p><p> wr_byte0(); //command</p><p> wr_byte0();</p><p> for(j=0;j<2;j++)</p><p><b&
26、gt; {</b></p><p> for(i=0;i<4;i++)</p><p><b> {</b></p><p> if(content&0x80)</p><p> wr_byte1();</p><p><b> else</b
27、></p><p> wr_byte0();</p><p> content=content<<1;</p><p><b> }</b></p><p> for(i=0;i<4;i++)</p><p> wr_byte0();</p><
28、;p><b> }</b></p><p><b> delay(3);</b></p><p> } </p><p> 2.2.5 顯示模塊 LCD12864液晶按地址分行顯示函數(shù)</p><p> 為了使得程序可讀性更加良好,我組編寫了按地址分
29、行顯示函數(shù),這個(gè)函數(shù)主要有兩個(gè)參數(shù),第一個(gè)參數(shù)為所需要在液晶屏上顯示的字符,第二個(gè)參數(shù)為所需要顯示的行數(shù),因?yàn)?2864液晶顯示是按照地址顯示的,其起始地址為0x80,第二行的地址為0x90,第三行為0x88,第四行為0x98,一行是8個(gè)地址,每個(gè)地址位可以顯示一個(gè)漢字或者是兩個(gè)字符,所以使用此函數(shù)可以簡(jiǎn)單明了的表示想要顯示字符的位置。</p><p><b> 顯示函數(shù)如下:</b>&l
30、t;/p><p> void chn_disp (uchar *chn,int m)</p><p><b> {</b></p><p><b> uchar k;</b></p><p> wr_lcd (comm,0x30);</p><p> wr_lcd (
31、comm,0x80);</p><p> if(m == 1)</p><p><b> {</b></p><p> wr_lcd (comm,0x30);</p><p> wr_lcd (comm,0x80);</p><p> for (k=0;k<16;k++)</
32、p><p><b> {</b></p><p> wr_lcd (datt,chn[k]);</p><p><b> }</b></p><p><b> }</b></p><p> if(m == 2)</p><p&g
33、t;<b> {</b></p><p> wr_lcd (comm,0x30);</p><p> wr_lcd (comm,0x90 + 1);</p><p> for (k=0;k<10;k++)</p><p><b> {</b></p><p>
34、 wr_lcd (datt,chn[k]);</p><p><b> }</b></p><p><b> }</b></p><p> if(m == 3)</p><p><b> {</b></p><p> wr_lcd (comm
35、,0x30);</p><p> wr_lcd (comm,0x88 + 1);</p><p> for (k=0;k<8;k++)</p><p><b> {</b></p><p> wr_lcd (datt,chn[k]);</p><p><b> }<
36、/b></p><p><b> }</b></p><p> if(m == 4)</p><p><b> {</b></p><p> wr_lcd (comm,0x30);</p><p> wr_lcd (comm,0x98);</p>
37、<p> for (k=0;k<16;k++)</p><p><b> {</b></p><p> wr_lcd (datt,chn[k]);</p><p><b> }</b></p><p><b> }</b></p>&l
38、t;p><b> }</b></p><p> 2.2.6 顯示模塊 LCD12864液晶對(duì)各數(shù)據(jù)進(jìn)行處理</p><p> 使用extern函數(shù)對(duì)外部變量進(jìn)行處理</p><p> void dis_year()//年月日按位裝入buff1</p><p><b> {</b
39、></p><p> buff1[0]= myyear/1000 + '0';</p><p> buff1[1]= (myyear/100%10) + '0';</p><p> buff1[2]= (myyear/10%10) + '0';</p><p> buff1[3]=
40、 myyear%10 + '0';</p><p> buff1[4]= '-';</p><p> buff1[5]= mymon/10 + '0';</p><p> buff1[6]= mymon%10 + '0';</p><p> buff1[7]= '
41、-';</p><p> buff1[8]= myday/10 + '0';</p><p> buff1[9]= myday%10 + '0';</p><p><b> }</b></p><p> void dis_sec() //時(shí)分秒按位裝入buff2
42、</p><p><b> {</b></p><p> buff2[0]= myhour/10 + '0';</p><p> buff2[1]= myhour%10 + '0';</p><p> buff2[2]= ':';</p><p&
43、gt; buff2[3]= mymin/10 + '0';</p><p> buff2[4]= mymin%10 + '0';</p><p> buff2[5]= ':';</p><p> buff2[6]= mysec/10 + '0';</p><p> bu
44、ff2[7]= mysec%10 + '0';</p><p><b> }</b></p><p><b> 2.3 硬件調(diào)試</b></p><p> 硬件調(diào)試可分為靜態(tài)調(diào)試與動(dòng)態(tài)調(diào)試兩步進(jìn)行。</p><p> 靜態(tài)調(diào)試是在用戶系統(tǒng)未工作時(shí)的一種硬件檢測(cè)。</p
45、><p> 第一步:目測(cè)。檢查外部的各種元件或者是電路是否有斷點(diǎn)。</p><p> 第二步:用萬用表測(cè)試。先用萬用表復(fù)核目測(cè)中有疑問的連接點(diǎn),再檢測(cè)各種電源線與地線之間是否有短路現(xiàn)象。</p><p> 第三步:加電檢測(cè)。給板加電,檢測(cè)所有插座或是器件的電源端是否符合要求的值。 </p><p> 第四步:聯(lián)機(jī)檢查。因?yàn)橹挥杏脝纹瑱C(jī)開發(fā)
46、系統(tǒng)才能完成對(duì)用戶系統(tǒng)的調(diào)試。 </p><p> 動(dòng)態(tài)調(diào)試是在用戶系統(tǒng)工作的情況下發(fā)現(xiàn)和排除用戶系統(tǒng)硬件中存在的器件內(nèi)部故障、器件連接邏輯錯(cuò)誤等的一種硬件檢查。動(dòng)態(tài)調(diào)試的一般方法是由近及遠(yuǎn)、由分到合。由分到合是指首先按邏輯功能將用戶系統(tǒng)硬件電路分為若干塊,當(dāng)調(diào)試電路時(shí),與該元件無關(guān)的器件全部從用戶系統(tǒng)中去掉,這樣可以將故障范圍限定在某個(gè)局部的電路上。當(dāng)各塊電路無故障后,將各電路逐塊加入系統(tǒng)中,在對(duì)各塊電路功能
47、及各電路間可能存在的相互聯(lián)系進(jìn)行調(diào)試。由分到合的調(diào)試既告完成。由近及遠(yuǎn)是將信號(hào)流經(jīng)的各器件按照距離單片機(jī)的邏輯距離進(jìn)行由近及遠(yuǎn)的分層,然后分層調(diào)試。調(diào)試時(shí),仍采用去掉無關(guān)元件的方法,逐層調(diào)試下去,就會(huì)定位故障元件了。</p><p><b> 3 軟件設(shè)計(jì)</b></p><p><b> 3.1 系統(tǒng)分析</b></p>&l
48、t;p> 根據(jù)本系統(tǒng)設(shè)計(jì)要求和硬件連接電路,軟件實(shí)現(xiàn)主要包括兩個(gè)主要部分:液晶顯示程序和主函數(shù)部分。</p><p> 液晶顯示部分,主要是利用通過字模提取軟件計(jì)算出來的數(shù)組矩陣,選擇要顯示的漢字、數(shù)字或者字符。顯示每一個(gè)漢字、數(shù)字或字符時(shí),應(yīng)先設(shè)置起始頁,起始列,然后將所對(duì)應(yīng)的數(shù)組中的數(shù)據(jù)按序?qū)懭氲絃CD數(shù)據(jù)控制擴(kuò)展接口中,其中寫入左屏的數(shù)據(jù)地址為0x108003 ,寫入右屏的數(shù)據(jù)地址為0x10800
49、4,依次分別寫入年、月、日、星期、時(shí)、分、秒。主程序的編寫,首先要對(duì)2812DSP芯片的寄存器進(jìn)行設(shè)置,選擇輸入輸出方式。設(shè)置完成,打開顯示器,清除顯示器顯示內(nèi)存,設(shè)置起始行,然后循環(huán)讀取1302中指示的當(dāng)前時(shí)間。便可以在12864液晶顯示屏上準(zhǔn)確讀出當(dāng)前時(shí)刻。</p><p><b> 3.2 軟件調(diào)試</b></p><p> 軟件調(diào)試是通過對(duì)程序的編譯、連接
50、、執(zhí)行來發(fā)現(xiàn)程序中存在的語法錯(cuò)誤與邏輯錯(cuò)誤并加以排除糾正的過程。最終實(shí)現(xiàn)了利用DSP芯片控制并用LCD液晶顯示器進(jìn)行實(shí)時(shí)顯示當(dāng)前秒、分、時(shí)、日、月和年。</p><p> 4 課程設(shè)計(jì)總結(jié)體會(huì)</p><p> 通過這次課程的設(shè)計(jì),萬年歷設(shè)計(jì)基本完成了所要求實(shí)現(xiàn)的功能。這次的設(shè)計(jì)過程中主要是在LCD顯示屏上顯示出年、月、日、時(shí)、分、秒,主要是針對(duì)2812進(jìn)行實(shí)現(xiàn)功能的代碼編寫。2812
51、集成了大部分的硬件,所以在硬件的操作上較為簡(jiǎn)單。此次的課程設(shè)計(jì),組內(nèi)成員分工明確,各個(gè)環(huán)節(jié)緊密結(jié)合,才使得設(shè)計(jì)成功完成,讓我們受益匪淺。</p><p><b> 5 參考文獻(xiàn) </b></p><p> 顧衛(wèi)鋼,《手把手教你學(xué)DSP》,北京航空航天大學(xué)出版社,2011.4;</p><p><b> 附錄 </b>
52、;</p><p><b> 主函數(shù)部分:</b></p><p> /*----------------主函數(shù)-----------------*/</p><p> void main(void)</p><p><b> { </b></p><p>&l
53、t;b> /*初始化系統(tǒng)*/</b></p><p> InitSysCtrl();</p><p><b> DINT;</b></p><p> IER = 0x0000; //禁止CPU中斷</p><p> IFR = 0x0000; //清除CPU中斷標(biāo)志</p>
54、<p> /*初始化PIE*/</p><p> InitPieCtrl();</p><p> /*初始化PIE中斷矢量表*/</p><p> InitPieVectTable();</p><p> InitGpio();</p><p> InitPeripherals(); //初
55、始化Cpu定時(shí)器模塊</p><p> init_lcd(); //初始化LCD</p><p> PieCtrl.PIEIER1.bit.INTx7 =1; //使能PIE模塊中的Cpu定時(shí)器0的中斷</p><p> IER|=M_INT1; //開CPU中斷</p><p> EINT; //使能全局中斷</p>
56、<p> ERTM; //使能實(shí)時(shí)中斷</p><p> ConfigCpuTimer(&CpuTimer0, 150, 150000);//Cpu定時(shí)器0的周期為1s</p><p> StartCpuTimer0(); //啟動(dòng)Cpu定時(shí)器0</p><p><b> for(;;)</b></p&g
57、t;<p><b> {</b></p><p> dis_year(); //顯示年月日</p><p> dis_sec(); //顯示時(shí)分秒</p><p> lat_disp (0x00,0x00); //清屏,作用等同于clrram();</p><p>
58、clrram(); //清屏</p><p> chn_disp (tab2,1); //分別按行顯示萬年歷、年月日、時(shí)分秒、模式</p><p> chn_disp (buff1,2);</p><p> chn_disp (buff2,3); </p><p> chn_disp (mo
59、de,4); </p><p> delay(0xffff); //延時(shí) </p><p> lat_disp (0x00,0x00); //清屏,作用等同于clrram(); </p><p><b> } </b></p><p><b> }&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)--萬年歷電子時(shí)鐘
- java萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì)報(bào)告
- 數(shù)字萬年歷課程設(shè)計(jì)
- java課程設(shè)計(jì)--萬年歷
- 萬年歷課程設(shè)計(jì)論文
- 課程設(shè)計(jì)-萬年歷系統(tǒng)
- 萬年歷課程設(shè)計(jì)報(bào)告
- 數(shù)碼萬年歷課程設(shè)計(jì)
- 萬年歷課程設(shè)計(jì).doc
- java課程設(shè)計(jì)--萬年歷設(shè)計(jì)
- 編寫萬年歷系統(tǒng)課程設(shè)計(jì)
- c++萬年歷課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論