【正文】
/*鍵盤掃描函數(shù) */ { char sccode,recode。 if((P1amp。 if((P1amp。0x0f。} 對(duì)鍵盤程序的鍵碼做如下說明:開始檢查 0行有無按鍵按下,使 =0,由于 ~,先把端口設(shè)置為輸入,因此行掃描值為 1111 1110B也就是FEH,存放到寄存器中,然后在讀其它端口,如該行有按鍵按下,則其高四位就是就是按下的按鍵的列值,原行掃描值低 4為就是該鍵的行碼,將行值和列值合并就是該鍵的編碼。 LCD 液晶顯示程序 這是本次試驗(yàn)最難的一部分,因?yàn)槌醮谓佑|到 LCD,在編寫的程序過程中看到說明書無從下手,但經(jīng)過漫長的編寫和調(diào)試終于使 LCD亮了起來。 //下降沿 寫數(shù)據(jù) LCD_DATA_PIN=。 //1:函數(shù) E=1。 三、初始化 LCD1602 函數(shù) void LCD_init(void) { P0=0xff。 //清屏 對(duì)應(yīng)清屏指令 delay_nms(2)。 沈陽工業(yè)大學(xué)成人高等教育??? 21 include void Delay1ms(unsigned int count) { unsigned int i,j。j120。 while(1) { if(LEDDirection) P1 = ~(0x01LEDIndex)。 Delay1ms(100)。 Proteus 產(chǎn)品系列也包含了革命性的 VSM 技術(shù),用戶可以對(duì)基于微控制器的設(shè)計(jì)連同所有的周圍電子器件一起仿真。 Proteus 產(chǎn)品系列也包含了我們革命性的 VSM 技術(shù) ,用 戶可以對(duì)基于微控制器的設(shè)計(jì)連同所有的周圍電子器件一起仿真。此外,還可以結(jié)合微控制器軟件使用動(dòng)態(tài)的鍵盤,開關(guān),按鈕, LEDs 甚至 LCD 顯示 CPU 模型 . IAR CSPY 和 Keil uVision2 等開發(fā)工具的源層調(diào)試 LED 流水燈的仿真 因?yàn)槭褂镁哂型ㄓ眯缘?C 語言編程,這次的電路仿真只涉及用到的可編程 I/O 口,由于仿真軟件中沒有 DSP2812 系列的單片機(jī),因此 硬件電路的用 51 單片機(jī)來代替DSP2812, “ LED 跑馬燈 ”為例,說明使用 Proteus 和 Keil 軟件進(jìn)行單片機(jī)系統(tǒng)設(shè)計(jì)和仿真的過程。如圖 14 所示,在該對(duì)話框的“ Program File”一項(xiàng)中選擇要加入的 .hex沈陽工業(yè)大學(xué)成人高等教育??? 23 文件。下面說明使用 Proteus 和 Keil 軟件進(jìn)行 LCD 液晶顯示硬件電路系統(tǒng)設(shè)計(jì)和軟件編程仿真的過程。其次,將 生成的 .hex 文件“下載”到 51 芯片中,步驟如下:鼠標(biāo)右擊 AT89C51,然后左擊,出現(xiàn)相應(yīng)元件的屬性對(duì)話框。 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ì)過程中的難點(diǎn)。由于仿真軟件中沒有 DSP2812系列的單片機(jī),因此這次只能采用 8051單片機(jī)來代替 DSP2812,來驗(yàn)證硬件電路的設(shè)計(jì)是否正確,又因?yàn)椴捎玫氖?C語言來實(shí)現(xiàn)編寫程序, C語言的移植性很強(qiáng),更能體現(xiàn)出 C語言的通用性,所以由此可知用 8051來代替 DSP2812單片機(jī)加上用 C語言來編程,更能論證得到此時(shí)硬件電路設(shè)計(jì)是否正確,可得到真實(shí)的硬件電路設(shè)計(jì)正確與否的可行性。起初編完按鍵顯示程序的時(shí)候,如果快速的連續(xù)按鍵就會(huì)造成 LCD 顯示的不正常,而且會(huì)造成按鍵控制的 LED 顯示方式的不正確, 調(diào)試了很長時(shí)間才發(fā)現(xiàn)由于延時(shí)的時(shí)間和時(shí)序的不。 電路設(shè)計(jì)硬件電路仿真設(shè)計(jì)過程中的難點(diǎn)。 沈陽工業(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è)仿真的過程用了 8051單片機(jī)進(jìn)行的,只是單片機(jī)的類型不一樣,但是硬件電路圖的原理是一樣的,而且本次仿真中,軟件編程僅涉及到了單 片機(jī)的可編程 I/O口,對(duì)單片機(jī)內(nèi)部結(jié)構(gòu)沒有涉及太多,加上使用移植性很強(qiáng)的 C語言來編寫程序,就更增加了仿真的效果,可以非常逼真的模擬出硬件電路的實(shí)際運(yùn)行情況。最后,點(diǎn)擊 Play 鍵可看到電路仿真結(jié)果如圖 16 所示。首先,用 Proteus ISIS 畫好電路圖 (注意 MCU 的最小系統(tǒng)的外圍電路在仿真時(shí)可以省略 )。仿真結(jié)果完全正確。并用 Keil C51 編寫相應(yīng)程序,編譯無誤后生成 .hex 文件。因此在仿真和程序調(diào)試時(shí),關(guān)心的不再是某些語句執(zhí)行時(shí)單片機(jī)寄存器 和存儲(chǔ)器內(nèi)容的改變,而是從工程的角度直接看程序運(yùn)行和電路工作的過程和結(jié)果。交互的裝置模型包括 :LED 和 LCD 顯示 ,RS232 終端 ,通用鍵盤 其功能模塊 :— 個(gè)易用而又功能強(qiáng)大的 ISIS 原理布圖工具; PROSPICE 混合模型 SPICE 仿真 。 Proteus 組合了高級(jí)原理布圖、混合模式 SPICE 仿真 ,PCB 設(shè)計(jì)以及自動(dòng)布線來實(shí)現(xiàn)一個(gè)完整的電子設(shè)計(jì)系統(tǒng)。 在此我 簡單介紹 一下本次仿真用到的軟件, 當(dāng)前比較流行的嵌入式系統(tǒng)仿真工具 Proteus 針對(duì)硬件電路設(shè)計(jì)的原理,為了檢查電路設(shè)計(jì)正確與否,對(duì)部分硬件電路進(jìn)行了仿真,使用的仿真軟件是當(dāng)今很流行 的應(yīng)用軟件 proteus。 if(LEDIndex==7) LEDDirection = !LEDDirection。} main() { unsigned char LEDIndex = 0。icount。由于仿真軟件中的 8051 單片機(jī) IO 口有限我使用的八位數(shù)據(jù)接口驅(qū)動(dòng)模式,由于我們很少讀 LCD1602 里面的數(shù)據(jù)所以我們可以把 R/W 引腳直接下拉到地,使 LCD1602 一直處于寫狀態(tài),沒了讀狀態(tài),判斷不了 busy 情況 ,只能用延時(shí)來等一下,這樣又可以省一個(gè) IO口,這樣設(shè)計(jì)可以增加數(shù)據(jù)的傳輸速度,使指令和數(shù)據(jù)能快速的傳輸。 //4 位顯示 對(duì)應(yīng)功能設(shè)置指令 write_mand(0x0c)。 E=0。 } 二、寫數(shù)據(jù)函數(shù) void write_data(unsigned char data) { R/W=0。 //0:寫 RS=0。 LED跑馬燈程序的編寫:這次電路設(shè)計(jì)中用了 8個(gè)七段式數(shù)碼管,由于仿真軟件中沒有 DSP2812系列的單片機(jī),因此這次只能采用 8051單片機(jī)來代替 DSP2812,來驗(yàn)證硬件電路的設(shè)計(jì)是否正確,又因?yàn)椴捎玫氖?C語言來實(shí)現(xiàn)編寫程序, C語言的移植性很強(qiáng),更能體現(xiàn)出 C語言的通用性,所以由此可知用 8051來代替 DSP2812單片機(jī)加上用 C語言來編程,更能論證得到此時(shí)硬件電路設(shè)計(jì)是否正確,可得到真實(shí)的硬件電路設(shè)計(jì)正確與否的可行性。} else sccode=(sccode1)|0x01。0xf0。 while((sccodeamp。 if((P1amp。 for(i=100。 /*函數(shù)說明 */ 沈陽工業(yè)大學(xué)成人高等教育專科 18 void main(void) {uchar key。消除抖動(dòng)的方法可采用消抖電路( RS觸發(fā)器電路硬件消除抖動(dòng)),也可以采用延時(shí)方式軟件消除抖動(dòng),延時(shí)后在重讀,以跳過抖動(dòng)期。硬件電路按鍵設(shè)計(jì)原理圖中用 DSP2812的并行口 P1設(shè)計(jì) 4*4矩陣按鍵的電路如圖 14。由于仿真軟件中沒有 DSP2812的單片機(jī),因此這次只能采用 8051單片機(jī)來代替 DSP2812,來驗(yàn)證硬件電路的設(shè)計(jì)是否正確,又因?yàn)椴捎玫氖?C語言來實(shí)現(xiàn)編寫程序, C語言的移植性很強(qiáng),更能體現(xiàn)出 C語言的通用性,所以由此可知用 8051來代替DSP2812單片機(jī)加上用 C語言來編程,更能論證得到此時(shí)硬件電路設(shè)計(jì)是否正確,可得到真實(shí)的硬件電路設(shè)計(jì)正確與否的可行性。內(nèi)置 2M位中文字型 ROM (CGROM)總共提供 8192個(gè)中文字型 (16x16 點(diǎn)陣 ), 16K位半寬字型 ROM (HCGROM) 總共提供 126 個(gè)符號(hào)字型 (16x8點(diǎn)陣 ), 64 x 16位字型產(chǎn)生 RAM (CGRAM),另外繪圖顯示畫面提供一個(gè) 64x256點(diǎn)的繪圖區(qū)域( GDRAM),可以和文字畫面混和顯示。它同時(shí)為用戶提供位點(diǎn)陣和字節(jié)點(diǎn)陣兩 種 圖形顯示功能,