【正文】
起初編完按鍵顯示程序的時(shí)候,如果快速的連續(xù)按鍵就會(huì)造成 LCD 顯示的不正常,而且會(huì)造成按鍵控制的 LED 顯示方式的不正確, 調(diào)試了很長(zhǎng)時(shí)間才發(fā)現(xiàn)由于延時(shí)的時(shí)間和時(shí)序的不。 電路設(shè)計(jì)硬件電路仿真設(shè)計(jì)過(guò)程中的難點(diǎn)。由于仿真軟件中沒(méi)有 DSP2812系列的單片機(jī),因此這次只能采用 8051單片機(jī)來(lái)代替 DSP2812,來(lái)驗(yàn)證硬件電路的設(shè)計(jì)是否正確,又因?yàn)椴捎玫氖?C語(yǔ)言來(lái)實(shí)現(xiàn)編寫(xiě)程序, C語(yǔ)言的移植性很強(qiáng),更能體現(xiàn)出 C語(yǔ)言的通用性,所以由此可知用 8051來(lái)代替 DSP2812單片機(jī)加上用 C語(yǔ)言來(lái)編程,更能論證得到此時(shí)硬件電路設(shè)計(jì)是否正確,可得到真實(shí)的硬件電路設(shè)計(jì)正確與否的可行性。 沈陽(yáng)工業(yè)大學(xué)成人高等教育??? 25 X T A L 218X T A L 119A L E30EA31PSEN29R S T9P 0 . 0 / A D 039P 0 . 1 / A D 138P 0 . 2 / A D 237P 0 . 3 / A D 336P 0 . 4 / A D 435P 0 . 5 / A D 534P 0 . 6 / A D 633P 0 . 7 / A D 732P 2 . 7 / A 1 528P 2 . 0 / A 821P 2 . 1 / A 922P 2 . 2 / A 1 023P 2 . 3 / A 1 124P 2 . 4 / A 1 225P 2 . 5 / A 1 326P 2 . 6 / A 1 427P 1 . 01P 1 . 12P 1 . 23P 1 . 34P 1 . 45P 1 . 56P 1 . 67P 1 . 78P 3 . 0 / R X D10P 3 . 1 / T X D11P 3 . 2 / I N T 012P 3 . 3 / I N T 113P 3 . 4 / T 014P 3 . 7 / R D17P 3 . 6 / W R16P 3 . 5 / T 115U8 0 C 5 1P A C K A G E = D I L 4 0X1 2 M H zC133pC233p+ 5 V+ 5 V+5VR V 110k234567891RP10K+5VD714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3LCD1L M 0 1 6 LK E Y 1 K E Y 2 K E Y 3K E Y 5 K E Y 6 K E Y 7K E Y 9 K E Y 1 0 K E Y 1 1R 1 110KR 1 210KR 1 310K+ 5 VK E Y 4K E Y 8K E Y 1 2K E Y 1 3 K E Y 1 4 K E Y 1 5 K E Y 1 6R 1 410KD1D2D3D4D5D6D7D8R1470R2470R3470R4470R5470R6470R7470R8470+5V 論證方案的可行性 以上對(duì)于硬件電路設(shè)計(jì)的電路一部分進(jìn)行的仿真,對(duì) LED, LCD進(jìn)行了仿真,因?yàn)檎麄€(gè)仿真的過(guò)程用了 8051單片機(jī)進(jìn)行的,只是單片機(jī)的類型不一樣,但是硬件電路圖的原理是一樣的,而且本次仿真中,軟件編程僅涉及到了單 片機(jī)的可編程 I/O口,對(duì)單片機(jī)內(nèi)部結(jié)構(gòu)沒(méi)有涉及太多,加上使用移植性很強(qiáng)的 C語(yǔ)言來(lái)編寫(xiě)程序,就更增加了仿真的效果,可以非常逼真的模擬出硬件電路的實(shí)際運(yùn)行情況。 X T A L 218X T A L 119A L E30EA31PSEN29R S T9P 0 . 0 / A D 039P 0 . 1 / A D 138P 0 . 2 / A D 237P 0 . 3 / A D 336P 0 . 4 / A D 435P 0 . 5 / A D 534P 0 . 6 / A D 633P 0 . 7 / A D 732P 2 . 7 / A 1 528P 2 . 0 / A 821P 2 . 1 / A 922P 2 . 2 / A 1 023P 2 . 3 / A 1 124P 2 . 4 / A 1 225P 2 . 5 / A 1 326P 2 . 6 / A 1 427P 1 . 01P 1 . 12P 1 . 23P 1 . 34P 1 . 45P 1 . 56P 1 . 67P 1 . 78P 3 . 0 / R X D10P 3 . 1 / T X D11P 3 . 2 / I N T 012P 3 . 3 / I N T 113P 3 . 4 / T 014P 3 . 7 / R D17P 3 . 6 / W R16P 3 . 5 / T 115U18 0 C 5 1P A C K A G E = D I L 4 0X1 2 M H zC133pC233p+ 5 V+ 5 V+5VR V 110k234567891R P 110K+5VD714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3LCD1602L M 0 1 6 L 圖 16 LCD 液晶顯示仿真電路 按鍵顯示 這個(gè)電路設(shè)計(jì)中的仿真電路的設(shè)計(jì),是本次電路設(shè)計(jì)硬件電路仿真設(shè)計(jì)過(guò)程中的難點(diǎn)。最后,點(diǎn)擊 Play 鍵可看到電路仿真結(jié)果如圖 16 所示。其次,將 生成的 .hex 文件“下載”到 51 芯片中,步驟如下:鼠標(biāo)右擊 AT89C51,然后左擊,出現(xiàn)相應(yīng)元件的屬性對(duì)話框。首先,用 Proteus ISIS 畫(huà)好電路圖 (注意 MCU 的最小系統(tǒng)的外圍電路在仿真時(shí)可以省略 )。下面說(shuō)明使用 Proteus 和 Keil 軟件進(jìn)行 LCD 液晶顯示硬件電路系統(tǒng)設(shè)計(jì)和軟件編程仿真的過(guò)程。仿真結(jié)果完全正確。如圖 14 所示,在該對(duì)話框的“ Program File”一項(xiàng)中選擇要加入的 .hex沈陽(yáng)工業(yè)大學(xué)成人高等教育??? 23 文件。并用 Keil C51 編寫(xiě)相應(yīng)程序,編譯無(wú)誤后生成 .hex 文件。 LED 流水燈的仿真 因?yàn)槭褂镁哂型ㄓ眯缘?C 語(yǔ)言編程,這次的電路仿真只涉及用到的可編程 I/O 口,由于仿真軟件中沒(méi)有 DSP2812 系列的單片機(jī),因此 硬件電路的用 51 單片機(jī)來(lái)代替DSP2812, “ LED 跑馬燈 ”為例,說(shuō)明使用 Proteus 和 Keil 軟件進(jìn)行單片機(jī)系統(tǒng)設(shè)計(jì)和仿真的過(guò)程。因此在仿真和程序調(diào)試時(shí),關(guān)心的不再是某些語(yǔ)句執(zhí)行時(shí)單片機(jī)寄存器 和存儲(chǔ)器內(nèi)容的改變,而是從工程的角度直接看程序運(yùn)行和電路工作的過(guò)程和結(jié)果。 IAR CSPY 和 Keil uVision2 等開(kāi)發(fā)工具的源層調(diào)試 交互的裝置模型包括 :LED 和 LCD 顯示 ,RS232 終端 ,通用鍵盤(pán) 此外,還可以結(jié)合微控制器軟件使用動(dòng)態(tài)的鍵盤(pán),開(kāi)關(guān),按鈕, LEDs 甚至 LCD 顯示 CPU 模型 . 其功能模塊 :— 個(gè)易用而又功能強(qiáng)大的 ISIS 原理布圖工具; PROSPICE 混合模型 SPICE 仿真 。 Proteus 產(chǎn)品系列也包含了我們革命性的 VSM 技術(shù) ,用 戶可以對(duì)基于微控制器的設(shè)計(jì)連同所有的周?chē)娮悠骷黄鸱抡妗? Proteus 組合了高級(jí)原理布圖、混合模式 SPICE 仿真 ,PCB 設(shè)計(jì)以及自動(dòng)布線來(lái)實(shí)現(xiàn)一個(gè)完整的電子設(shè)計(jì)系統(tǒng)。 Proteus 產(chǎn)品系列也包含了革命性的 VSM 技術(shù),用戶可以對(duì)基于微控制器的設(shè)計(jì)連同所有的周?chē)娮悠骷黄鸱抡妗?在此我 簡(jiǎn)單介紹 一下本次仿真用到的軟件, 當(dāng)前比較流行的嵌入式系統(tǒng)仿真工具 Proteus 針對(duì)硬件電路設(shè)計(jì)的原理,為了檢查電路設(shè)計(jì)正確與否,對(duì)部分硬件電路進(jìn)行了仿真,使用的仿真軟件是當(dāng)今很流行 的應(yīng)用軟件 proteus。 Delay1ms(100)。 if(LEDIndex==7) LEDDirection = !LEDDirection。 while(1) { if(LEDDirection) P1 = ~(0x01LEDIndex)。} main() { unsigned char LEDIndex = 0。j120。icount。 沈陽(yáng)工業(yè)大學(xué)成人高等教育專科 21 include void Delay1ms(unsigned int count) { unsigned int i,j。由于仿真軟件中的 8051 單片機(jī) IO 口有限我使用的八位數(shù)據(jù)接口驅(qū)動(dòng)模式,由于我們很少讀 LCD1602 里面的數(shù)據(jù)所以我們可以把 R/W 引腳直接下拉到地,使 LCD1602 一直處于寫(xiě)狀態(tài),沒(méi)了讀狀態(tài),判斷不了 busy 情況 ,只能用延時(shí)來(lái)等一下,這樣又可以省一個(gè) IO口,這樣設(shè)計(jì)可以增加數(shù)據(jù)的傳輸速度,使指令和數(shù)據(jù)能快速的傳輸。 //清屏 對(duì)應(yīng)清屏指令 delay_nms(2)。 //4 位顯示 對(duì)應(yīng)功能設(shè)置指令 write_mand(0x0c)。 三、初始化 LCD1602 函數(shù) void LCD_init(void) { P0=0xff。 E=0。 //1:函數(shù) E=1。 } 二、寫(xiě)數(shù)據(jù)函數(shù) void write_data(unsigned char data) { R/W=0。 //下降沿 寫(xiě)數(shù)據(jù) LCD_DATA_PIN=。 //0:寫(xiě) RS=0。 LCD 液晶顯示程序 這是本次試驗(yàn)最難的一部分,因?yàn)槌醮谓佑|到 LCD,在編寫(xiě)的程序過(guò)程中看到說(shuō)明書(shū)無(wú)從下手,但經(jīng)過(guò)漫長(zhǎng)的編寫(xiě)和調(diào)試終于使 LCD亮了起來(lái)。 LED跑馬燈程序的編寫(xiě):這次電路設(shè)計(jì)中用了 8個(gè)七段式數(shù)碼管,由于仿真軟件中沒(méi)有 DSP2812系列的單片機(jī),因此這次只能采用 8051單片機(jī)來(lái)代替 DSP2812,來(lái)驗(yàn)證硬件電路的設(shè)計(jì)是否正確,又因?yàn)椴捎玫氖?C語(yǔ)言來(lái)實(shí)現(xiàn)編寫(xiě)程序, C語(yǔ)言的移植性很強(qiáng),更能體現(xiàn)出 C語(yǔ)言的通用性,所以由此可知用 8051來(lái)代替 DSP2812單片機(jī)加上用 C語(yǔ)言來(lái)編程,更能論證得到此時(shí)硬件電路設(shè)計(jì)是否正確,可得到真實(shí)的硬件電路設(shè)計(jì)正確與否的可行性。} 對(duì)鍵盤(pán)程序的鍵碼做如下說(shuō)明:開(kāi)始檢查 0行有無(wú)按鍵按下,使 =0,由于 ~,先把端口設(shè)置為輸入,因此行掃描值為 1111 1110B也就是FEH,存放到寄存器中,然后在讀其它端口,如該行有按鍵按下,則其高四位就是就是按下的按鍵的列值,原行掃描值低 4為就是該鍵的行碼,將行值和列值合并就是該鍵的編碼。} else sccode=(sccode1)|0x01。0x0f。0xf0。 if((P1amp。 while((sccodeamp。 if((P1amp。 if((P1amp。i){} } uchar kbscan (void) /*鍵盤(pán)掃描函數(shù) */ { char sccode,recode。 for(i=100。 /*鍵盤(pán)掃描函數(shù),返回鍵碼送 key保存 */ dlms()。 /*函數(shù)說(shuō)明 */ 沈陽(yáng)工業(yè)大學(xué)成人高等教育??? 18 void main(void) {uchar key。 按鍵電路的部分程序如下: include define uchar unsigned char define uint unsigned int void dlms(void)。消除抖動(dòng)的方法可采用消抖電路( RS觸發(fā)器電路硬件消除抖動(dòng)),也可以采用延時(shí)方式軟件消除抖動(dòng),延時(shí)后在重讀,以跳過(guò)抖動(dòng)期。因此鍵盤(pán)處理程序的任務(wù)是:確定有無(wú)按鍵按下;判斷哪一個(gè)鍵按下;形成鍵編碼,轉(zhuǎn)相應(yīng)的處理程序。硬件電路按鍵設(shè)計(jì)原理圖中用 DSP2812的并行口 P1設(shè)計(jì) 4*4矩陣按鍵的電路如圖 14。矩陣鍵盤(pán)的每個(gè)按鍵都有它的行值和列值,行值和列值的組合就是識(shí)別這個(gè)按鍵的編碼,矩陣鍵盤(pán)的行線和列線分別通過(guò)兩個(gè)并行接口和 CPU通信,在接鍵盤(pán)的行線和列線的兩個(gè)并行口中,一個(gè)輸出掃描碼,使按鍵逐行的動(dòng)態(tài)接地(稱行掃描,鍵盤(pán)的行值),另一個(gè)并行口輸入按鍵狀態(tài)(稱回饋信號(hào),鍵盤(pán)的列值)。由于仿真軟件中沒(méi)有 DSP2812的單片