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