實驗一LCD實驗_第1頁
實驗一LCD實驗_第2頁
實驗一LCD實驗_第3頁
實驗一LCD實驗_第4頁
實驗一LCD實驗_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、電子信息專業(yè)實驗報告 課程:數(shù)字信息技術(shù)專業(yè)實驗 題目:LCD實驗 學(xué)生:茹滋巖(2012141451109) 張書愷(2012141451007) 蔣正東(2012141451) 鄧童虎(2012141451) 組號:5點陣型12864液晶的使用【實驗?zāi)康摹渴煜c陣型128*64液晶顯示器的驅(qū)動電路及使用方法。掌握用AT89S52來控制液晶顯示器的方法掌握用掃描法識別矩陣按鍵的方法進(jìn)一步熟悉EDA實驗平臺【實驗器材】EDA實驗箱、PC機、DB25-ISP下載線、USB轉(zhuǎn)換線、USB-BLASTER編程器等軟件:Quatus II 、Keil uVision2、ISPlay等 ?!緦嶒炘怼繂?/p>

2、片機簡介在一片集成電路芯片上集成微處理器、存儲器、I/O接口電路,從而構(gòu)成了單芯片微型計算機,即單片機。Intel公司首先推出了MCS-51系列單片機:集成 8位CPU、4K字節(jié)ROM、128字節(jié)RAM、4個8位并口、1個全雙工串行口、2個16位定時/計數(shù)器。尋址范圍64K,并有控制功能較強的布爾處理。80C51是MCS-51系列中的一個典型品種;其它廠商以8051為基核開發(fā)出的CMOS工藝單片機產(chǎn)品統(tǒng)稱為80C51系列。當(dāng)前常用的80C51系列單片機主要產(chǎn)品廠商有: Intel、ATMEL、Philips、華邦、Dallas 、STC、Siemens(Infineon)等。實驗板上使用的AT

3、89S52是與MCS-51單片機產(chǎn)品兼容的產(chǎn)品,它具有8K字節(jié)在系統(tǒng)可編程Flash存儲器、 1000次擦寫周期、 全靜態(tài)操作、0Hz33Hz 、 三級加密程序存儲器 、 32個可編程I/O口線 、三個16位定時器/計數(shù)器、八個中斷源 、全雙工UART串行通道、 低功耗空閑和掉電模式 、掉電后中斷可喚醒 、看門狗定時器等功能 。各管腳功能簡介如下:P0 口:P0口是一個8位漏極開路的雙向I/O口。 需要指出的是,在flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。 P1 口:P1 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖

4、器能驅(qū)動4 個TTL 邏輯電平。 引腳號第二功能:P1.0 T2(定時器/計數(shù)器T2的外部計數(shù)輸入),時鐘輸出 P1.1 T2EX(定時器/計數(shù)器T2的捕捉/重載觸發(fā)信號和方向控制) P1.5 MOSI(在系統(tǒng)編程用) P1.6 MISO(在系統(tǒng)編程用) P1.7 SCK(在系統(tǒng)編程用) P2 口:P2 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動4 個TTL 邏輯電平 P3 口:P3 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅(qū)動4 個 TTL 邏輯電平。端口引腳 第二功能P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2

5、INTO(外中斷0)P3.3 INT1(外中斷1)P3.4 TO(定時/計數(shù)器0)P3.5 T1(定時/計數(shù)器1)P3.6 WR(外部數(shù)據(jù)存儲器寫選通)P3.7 RD(外部數(shù)據(jù)存儲器讀選通)RST復(fù)位輸入(高電平復(fù)位)ALE/PROG當(dāng)訪問外部程序存儲器或數(shù)據(jù)存儲器時,ALE(地址鎖存允許)輸出脈沖用于鎖存地址的低8位字節(jié)。PSEN程序儲存允許(PSEN)EA/VPP外部訪問允許,訪問外部程序存儲器,EA端保持低電平。EA端為高電平,執(zhí)行內(nèi)部程序存儲器的指令。液晶簡介液晶作為顯示器件廣泛應(yīng)用于各種電子儀器、便攜設(shè)備上,點陣液晶可以方便的顯示各種字符、圖片。WGM12864H液晶顯示模塊采用三星

6、公司的KS0107液晶控制器,能夠顯示128*64像素圖形或4行16*16中文字符。一 系統(tǒng)硬件電路1. WGM12864H液晶模塊2. WGM12864H操作指令(1) 顯示開關(guān)控制。R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0000011111D此命令用于控制液晶顯示器開關(guān)。D=1:顯示開。顯示器可以進(jìn)行各種顯示操作。D=0:顯示關(guān)。不能對顯示器進(jìn)行各種顯示操作。開顯示時,液晶模塊DDRAM的內(nèi)容顯示在LCD屏幕上,控制顯示器的開關(guān)并不影響DDRAMA中的數(shù)據(jù)和內(nèi)部狀態(tài)。(2) 設(shè)置顯示起始行。R/WD/IDB7DB6DB5DB4DB3DB2DB1DB00011A5A4A3

7、A2A1A0WGM12864H液晶模塊共有64行,由Z地址計數(shù)器進(jìn)行控制。Z地址計數(shù)器是一個六位計數(shù)器A5:A0,此計數(shù)器具有循環(huán)計數(shù)功能,它是用于行掃描同步,當(dāng)一行掃描完成時此計數(shù)器自動加一,指向下一行掃描數(shù)據(jù),RST復(fù)位后Z計數(shù)器為0。起始行可以是64行中的任一行,如設(shè)置A5:A0為62,則起始行于DDRAM中的行對應(yīng)關(guān)系如下:DDRAM的行626301236061顯示的行1234566364此命令常用于滾動顯示文本/圖像信息。(3) 設(shè)置頁地址。R/WD/IDB7DB6DB5DB4DB3DB2DB1DB00010111A2A1A0WGM12864H液晶顯示屏的128*64點陣與DDRAM

8、的128*64位顯存相對應(yīng),如下圖所示:X地址計數(shù)器為DDRAM的頁指針。所謂頁地址就是DDRAM的行地址,8行為頁。WGM液晶顯示器共64行,即8頁,A2:A0表示07頁。讀寫數(shù)據(jù)對頁地址沒有影響,頁地址由本指令或RST信號改變,復(fù)位后頁地址為0。(4) 設(shè)置列地址。R/WD/IDB7DB6DB5DB4DB3DB2DB1DB00001A5A4A3A2A1A0Y地址計數(shù)器為DDRAM列指針。DDRAM共128列,分為左右兩屏,每屏列地址均編址為0-63。此指令將A5:A0送入Y地址計數(shù)器,作為DDRAM的Y地址指針。在對DDRAMA進(jìn)行讀寫操作后,Y地址指針自動加一,指向下一個DDRAM單元。

9、當(dāng)Y地址計數(shù)器計數(shù)到63后,自動翻轉(zhuǎn)為當(dāng)前屏的0列。(5) 寫顯示數(shù)據(jù)。R/WD/IDB7DB6DB5DB4DB3DB2DB1DB001D7D6D5D4D3D2D1D0D7-D0為顯示數(shù)據(jù),此指令把D7-D0寫入相應(yīng)DDRAM單元,Y地址指針自動加一。(6) 讀狀態(tài)。R/WD/IDB7DB6DB5DB4DB3DB2DB1DB010BF0ON/OFFRST0000當(dāng)R/W=1、D/I=0、E=1時,狀態(tài)分別輸出到數(shù)據(jù)總線DB7-DB0相應(yīng)位置。BF:BF標(biāo)志提供內(nèi)部工作情況。BF=1表示模塊在進(jìn)行內(nèi)部操作,此時模塊不接受外部指令和數(shù)據(jù)。BF=0時模塊為準(zhǔn)備狀態(tài),隨時可接受外部指令和數(shù)據(jù)。ON/O

10、FF:表示顯示器開關(guān)觸發(fā)器狀態(tài)。RST:RST=1表示內(nèi)部正在進(jìn)行初始化,此時模塊不接受外部指令和數(shù)據(jù)。(7) 讀顯示數(shù)據(jù)。R/WD/IDB7DB6DB5DB4DB3DB2DB1DB011D7D6D5D4D3D2D1D0當(dāng)R/W=1、D/I=1、E=1時,此時DDRAM相應(yīng)單元數(shù)據(jù)被輸出到數(shù)據(jù)總線DB7-DB0相應(yīng)位置,Y地址指針自動加一。使用此12864液晶時,數(shù)據(jù)總線DB7-DB0分別接單片機的Px.7-Px.0,R/W、D/I、CS1、CS2、RST分別接單片機其它五個IO口進(jìn)行控制。液晶其它引腳按引腳功能圖上接線即可。3. 4*4矩陣鍵盤模塊鍵盤電路圖如下:這是一種簡單的非編碼鍵盤,線

11、路簡單,識別可靠。4條行線、4條列線分別接單片機IO口,列線上加上拉電阻,提高抗干擾性。在行列交叉點接入16個按鍵。由于按鍵數(shù)量較多,沒有給每一個按鍵單獨加防抖電路,防抖功能依靠軟件上延時實現(xiàn)。鍵盤工作原理:先給行線、列線賦1,然后給某一個列線賦0,檢查行線,若某一行線為0,則表示有按鍵被按下,此時進(jìn)行約10ms的延時,再次判斷是否有按鍵被按下。確認(rèn)有按鍵被按下后,根據(jù)賦0的列線和檢測到為0的行線即可唯一確定被按下的是哪個鍵。然后所有線賦1,再給另外一列賦0,以后的工作同上。這樣逐列掃描鍵盤即可。軟件中給這每個鍵賦不同的值,即可識別出16個按鍵。如果掃描時間足夠短,使用這種逐列掃描的方式可以有

12、效識別所按按鍵。4. 單片機的基本工作電路單片機的基本工作電路同以上幾例,在此不再贅述。二系統(tǒng)主要程序設(shè)計1. 4*4行列式16鍵鍵盤掃描程序流程圖開始第一列置0行列全賦1讀入IO口值查表對照求出鍵值返回鍵值N第二列置0行列全賦1讀入IO口值查表對照求出鍵值返回鍵值N第三列置0行列全賦1讀入IO口值查表對照求出鍵值返回鍵值N讀入IO口值查表對照求出鍵值返回鍵值N子程序返回Y行線全為1?行列全賦1Y第四列置0Y行線全為1?Y行線全為1?行線全為1?2. 主程序流程圖開始初始化顯示歡迎屏幕按鍵掃描輸入數(shù)字返回按鍵值顯示按鍵值 三 完整源程序參考程序如下:/*/ #include< at89x

13、51.h> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long #define lcdbus P0sbit lcddi=P10;sbit lcdrw=P11;sbit lcde=P14;sbit lcdcs1=P12;sbit lcdcs2=P13;sbit lcdbf=P07;/*/ uchar code title= /*- 文字: -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,

14、0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*- 文字: 請 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x40,0x42,0x4C,0xC4,0x00,0x22,0xAA,0xAA,0xAA,0xBF,0xAA,0xAA,0xAA,0x22,0x20,0x00,0x00,0x00,0x00,0x7F,0x20,0x10,0xFF,0x0A,0x0A,0x0

15、A,0x4A,0x8A,0x7F,0x00,0x00,0x00,/*- 文字: 輸 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x44,0xF4,0x4F,0xE4,0x44,0x64,0x90,0x98,0x94,0x93,0x14,0x98,0x08,0xD0,0x10,0x00,0x04,0x04,0x04,0xFF,0x02,0x02,0xFF,0x4A,0x8A,0x7F,0x00,0x3F,0x80,0xFF,0x00,0x00,/*- 文字: 入 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x00,0x00,0x00,0

16、x00,0x01,0x83,0x76,0x18,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x03,0x04,0x18,0x30,0x10,0x00,/*- 文字: 數(shù) -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00,0x42,0x42,0x2A,0x2E,0x13,0x1A,

17、0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00,/*- 文字: 據(jù) -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x08,0x08,0x08,0xFF,0x88,0x40,0xFE,0x92,0x92,0x92,0xF2,0x92,0x92,0x9E,0x80,0x00,0x02,0x42,0x81,0x7F,0x40,0x30,0x0F,0xFC,0x44,0x44,0x47,0x44,0x44,0xFC,0x00,0x00,/*- 文字: : -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -

18、*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*- 文字: -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00

19、,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ;uchar code key= /*- 文字: 0 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*- 文字: 1 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0

20、x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*- 文字: 2 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*- 文字: 3 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*- 文字: 4 -*/*-

21、宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*- 文字: 5 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*- 文字: 6 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0xE0,0x10,0x88,0

22、x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*- 文字: 7 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*- 文字: 8 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0

23、x1C,0x00,/*- 文字: 9 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*- 文字: . -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*- 文字: + -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16

24、 -*/0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,/*- 文字: - -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,/*- 文字: * -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0

25、x02,0x01,0x0F,0x01,0x02,0x02,0x00,/*- 文字: / -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/*- 文字: */*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=8x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, ;/*/ void delay10m

26、s() uchar i,j; for(i=50;i>0;i-) for(j=250;j>0;j-); /*/ void delayus(uint n)while(n-);/*/ uchar scankey() /P2口(p2.0p2.3列p2.4p2.7行) 列接上拉電阻 uchar key,rk; uchar bz=1; /當(dāng)有按鍵按下后,此標(biāo)志置零,以此確定有按鍵被按下,并送顯示。lcdrw=1;lcde=1;/將LCD使能端置一,防止對按鍵掃描干擾,LCDRW端置一,防止對已顯示數(shù)據(jù)干擾。doP2=0xff; P2_0=0; key=P2&0xF0; if(key!=

27、0xF0) delay10ms(); key=P2&0xF0; if(key!=0xF0) switch(key) case 0xe0:key=0;break; case 0xd0:key=4;break; case 0xb0:key=8;break; case 0x70:key=12;break; bz=0;rk=key;key=key&0xF0; while(key!=0xF0) key=P2; key=key&0xF0; delayus(800); P2=0xff; P2_1=0; key=P2; key=key&0xf0; if(key!=0xf0) d

28、elay10ms(); key=P2&0xf0; if(key!=0xf0) switch(key) case 0xe0:key=1;break; case 0xd0:key=5;break; case 0xb0:key=9;break; case 0x70:key=13;break; bz=0;rk=key;key=key&0xf0; while(key!=0xf0) key=P2; key=key&0xf0; delayus(800); P2=0xff; P2_2=0;key=P2; key=key&0xf0; if(key!=0xf0) delay10ms

29、(); key=P2&0xf0; if(key!=0xf0) switch(key) case 0xe0:key=2 ;break; case 0xd0:key=6 ;break; case 0xb0:key=10;break; case 0x70:key=14;break; bz=0;rk=key;key=key&0xf0; while(key!=0xf0) key=P2; key=key&0xf0; delayus(800); P2=0xff; P2_3=0;key=P2; key=key&0xf0; if(key!=0xf0) delay10ms(); k

30、ey=P2&0xf0; if(key!=0xf0) switch(key) case 0xe0:key=3;break; case 0xd0:key=7;break; case 0xb0:key=11;break; case 0x70:key=15;break; bz=0;rk=key;key=key&0xf0; while(key!=0xf0) key=P2; key=key&0xf0; delayus(800); while(bz=1); bz=1; return (rk) ; /*/ void writeinst(uchar x)/寫指令lcdrw=0;lcddi

31、=0;lcde=1;/P2_3=1;lcdbus=x;delayus(5);lcde=0;/*/ void writedata(uchar x) /寫送顯數(shù)據(jù) lcdrw=0;lcddi=1;lcde=1;/P2_3=1;lcdbus=x;delayus(5);lcde=0;/*/ void clr() /清屏 uchar x=0,y=0;lcdcs1=1;lcdcs2=1;for(x=0;x<8;x+)writeinst(0xb8+x);writeinst(0x40);for(y=0;y<64;y+) writedata(0x00);/*/ void sethang(uchar

32、x)/設(shè)置顯示起始行。lcdcs1=1;lcdcs2=1;writeinst(0xc0+x%64);/*/ void LCDInit()clr();writeinst(0xb8); /定位到第0頁 writeinst(0x40); /定位到第0列 writeinst(0x3f);/開顯示 /*/ void display16_16(uchar x,uchar y,uchar code * buff) /在第X 頁第Y列 顯示16*16字符 uchar j;if(y<=63)lcdcs1=1;lcdcs2=0;if(y>=64)lcdcs2=1;lcdcs1=0;writeinst(

33、0xb8+x);writeinst(0x40+y%64);for(j=0;j<16;j+) writedata(*(buff+j);writeinst(0xb9+x);writeinst(0x40+y%64);for(j=16;j<32;j+) writedata(*(buff+j);/*/ void display8_16(uchar x,uchar y,uchar code * buff) /在第X 頁第Y列 顯示8*16字符 uchar j;if(y<=63)lcdcs1=1;lcdcs2=0;if(y>=64)lcdcs1=0;lcdcs2=1;writeins

34、t(0xb8+x);writeinst(0x40+y%64);for(j=0;j<8;j+) writedata(*(buff+j);writeinst(0xb9+x);writeinst(0x40+y%64);for(j=8;j<16;j+) writedata(*(buff+j);/*/ void main()uchar i=0,j=0,k=0; EA=0;LCDInit();sethang(0);/設(shè)置顯示其實行為各頁第一行。P2=0XFF;/將FPGA中與門的另一路輸入置1,防止對LCD使能端干擾for(i=0;i<8;i+)display16_16(0,i*16,t

35、itle+i*32);i=0;j=0;while(1)for(i=2;i<8;i+=2)/頁控制for(j=0;j<16;j+=1)/列控制 k=scankey(); if(k=15) j-=2;sethang(0);P2=0XFF;display8_16(i,(j+1)*8,key+k*16); elsesethang(0);P2=0XFF;display8_16(i,j*8,key+k*16);if(k=15)i-=2;delayus(50000);LCDInit();sethang(0);for(i=0;i<8;i+)display16_16(0,i*16,title+

36、i*32); /*/ 【實驗內(nèi)容】一 電路連線提示本實驗中使用FPGA連接液晶、鍵盤、單片機,F(xiàn)PGA的內(nèi)容本實驗不做要求,在此簡要闡明本實驗中所用數(shù)據(jù)線及其在FPGA內(nèi)部的聯(lián)系。FPGA內(nèi)部聯(lián)系如圖:各引腳對應(yīng)關(guān)系如下圖:從圖中可看出,LCD的使能端與鍵盤第四列公共一個物理線路“KEYS0/LCD”,所以在FPGA內(nèi)部用一個與門聯(lián)系兩個輸入,兩個輸入分時控制這個公共線路。FPGA中其他線路可以近似看做從“input”到“output”的單向“導(dǎo)線”。二 實驗步驟:1. FPGA板插入底板,通過USB-blaster連接電腦。AT89S52單片機的ISP下載線連接電腦并口,并與底板連接。安裝F

37、PGA實驗板時注意方向,使FPGA板子的開關(guān)在做左手邊。注意引腳都要插入FPGA板子下面的排孔里,不要錯位。2. 打開EDA底板電源。3. 將“桌面EDA實驗-51部分-LCD實驗底板驅(qū)動”路徑下 “LCD12864.qpf”文件燒入FPGA中。具體步驟如下:a) 用USB轉(zhuǎn)換線將 USB BLASTER 與PC機相連,USB BLASTER的另一端連接到FPGA核心板右下角J12口。如果連接正常,USB BLASTER綠燈點亮。b) 雙擊“桌面EDA實驗-51部分-LCD實驗底板驅(qū)動”路徑下 “LCD12864.qpf”文件,啟動Quartus II;c) 單擊菜單欄中 ToolsProgr

38、ammer ,打開FPGA程序下載窗口;d) 單擊界面右上角“Hardware Setup”,在“Currently selected Hardware”下拉列表中選擇“USB-BlasterUSB-0”,激活USB-Blaster,單擊“close”關(guān)閉;e) 單擊“Add File”,路徑選擇“桌面EDA實驗-51部分-LCD實驗底板驅(qū)動”,選中文件“LCD1602.sof”,勾選Program/Configure;f) 給EDA主板供電,單擊“start”,將底板驅(qū)動程序燒錄到FPGA中。燒錄后不要將此程序關(guān)掉,也不要斷電,否則程序會丟失,需要重新燒錄。4. 生成HEX文件具體步驟如下:

39、a) 單擊“開始程序”,啟動Keil uVision2;b) 單擊“ProjectNew Project”,創(chuàng)建新工程;c) 新工程保存路徑為“桌面EDA實驗-51部分-LCD實驗程序一”,工程名設(shè)為“工程一”,單擊“保存”;d) 在彈出的“器件選擇窗口”中,選擇“AtmelAT89S52”,單擊“確定”;e) 右鍵單擊窗口右邊列表欄中“Source Group 1”,選擇“Add File to Group Source Group 1”;f) 選中“桌面EDA實驗-51部分-LCD實驗程序一”路徑下“程序一.c”,單擊“Add”,然后單擊“close”;g) 雙擊“程序一.c”,打開該文件

40、。h) 單擊窗口左上角“Build Target”按鍵,編譯程序一;i) 單擊窗口左上角圖標(biāo),選中“output”面板,選中“Creative HEX”,單擊“確定”。j) 再次單擊窗口左上角“Build Target”按鍵,將生成“程序二.Hex”文件;k) 在路徑“桌面EDA實驗-51部分-LCD實驗程序一”下,已經(jīng)生成“程序一.Hex”文件。5. 將 程序一.hex 燒入單片機具體步驟如下:a) 用DB25-ISP下載線連接單片機ISP程序下載口(EDA主板右下角J15口)和PC機并口,EDA主板右下角S8撥碼開關(guān)全部撥向ON;b) 在桌面雙擊圖標(biāo)“ISPlay.exe”,啟動ISPla

41、y;c) 單擊“檢測器件”,聽到“嘀嘀嘀”,表示器件檢測成功;d) 單擊“文件”,選擇“桌面EDA實驗-51部分-LCD實驗程序一”路徑下“程序一.hex”,單擊“打開”;e) 單擊“AUTORUN!”,完成程序的下載;下載完成會聽到“嘀嘀嘀”的響聲。6. 此時12864顯示器上應(yīng)該出現(xiàn)“請輸入數(shù)據(jù):”?,F(xiàn)在就可以按下4*4矩陣鍵盤上任意鍵,觀察實驗現(xiàn)象。按照底板上標(biāo)志的各按鍵,填入表一各單元左下角。表一 按鍵顯示記錄0123456789.+-*/【實驗注意事項】1. ISP下載線與底板連接的插口下方有“MCU DISABLE”跳線,一定要將此跳線帽拔下,否則MCU將不可用。2. 單片機上方有

42、一小塊帶8*8點陣的線路板,實驗時請將此板拔下,否則將對顯示器產(chǎn)生不利影響。3. FPGA中寫入邏輯后不要將“Quartus ”關(guān)掉,否則FPGA將不可用,此實驗亦無法完成。4. 實驗中不可斷電,否則應(yīng)重新給FPGA寫入邏輯。5. 底板的模式請設(shè)置成“3”,否則鍵盤將不可用,或者顯示容易出錯。模式顯示如右圖數(shù)碼管位置,模式選擇按鍵為與底板電源開關(guān)并列的右側(cè)的按鍵的第一個鍵?!緦嶒炓蟆?. 根據(jù)實驗內(nèi)容,填寫表1。2.目前Main函數(shù)中對顯示器的控制還不夠完善,最大的缺陷是清除鍵,在清除到當(dāng)前行第一個字符位后,再按清除鍵,不能繼續(xù)清除上一行。因此本實驗要求分析并修改程序,完善本程序功能: 當(dāng)清

43、除到每行行首的時候,按下清除鍵,能夠繼續(xù)刪除上一行的字符。注意:改寫后的程序不能出現(xiàn)錯誤,不能減少程序功能。/*/ #include< at89x51.h> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long #define lcdbus P0sbit lcddi=P10;sbit lcdrw=P11;sbit lcde=P14;sbit lcdcs1=P12;sbit lcdcs2=P13;sbit lcdbf=P07;/*/ uchar code title= /*-

44、 文字: -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*- 文字: 請 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x40,0x42,0x4C,0xC4,0x00,0x22,0xAA,0xAA,0xAA,0xBF,0x

45、AA,0xAA,0xAA,0x22,0x20,0x00,0x00,0x00,0x00,0x7F,0x20,0x10,0xFF,0x0A,0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x00,/*- 文字: 輸 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x44,0xF4,0x4F,0xE4,0x44,0x64,0x90,0x98,0x94,0x93,0x14,0x98,0x08,0xD0,0x10,0x00,0x04,0x04,0x04,0xFF,0x02,0x02,0xFF,0x4A,0x8A,0x7F,0x00,0x3F,0x80,0

46、xFF,0x00,0x00,/*- 文字: 入 -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x00,0x00,0x00,0x00,0x01,0x83,0x76,0x18,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x03,0x04,0x18,0x30,0x10,0x00,/*- 文字: 數(shù) -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00,0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00,/*- 文字: 據(jù) -*/*- 宋體12; 此字體下對應(yīng)的點陣為:寬x高=16x16 -*/0x08,0x08,0x08,0xFF,0x88,0x40,0xFE,0x92,0x92,0x92,0xF2,0x92,0x92,0x9E,0x80,0x00,0x02,0x42,0x81,0x7F,0x40,0x30,0x0F,0xFC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論