freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux下的單片機lcd驅(qū)動的設(shè)計(doc畢業(yè)設(shè)計論文)(編輯修改稿)

2025-07-19 12:09 本頁面
 

【文章內(nèi)容簡介】 linux運行 uCLinux 之前要有程序來加載其內(nèi)核,bootloader 就是完成在操作系統(tǒng)內(nèi)核運行之前運行的一段小程序。通過這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準備好正確的環(huán)境。ARMSYS44B0P 開發(fā)板用的 BIOS 中已經(jīng)包含了bootloader代碼,在開發(fā)板BIOS運行后可直接將uCLinux內(nèi)核下載運行,或者直接在開發(fā)板啟動后輸入命令“uclinux”即可加載 uCLinux 到內(nèi)存并運行。 編譯好的 uCLinux 內(nèi)核可以存放在 NorFlash 中,也可以用“uclinux”為文件名存放到NandFlash中,開發(fā)板的BIOS中的“uclinux”命令會自動尋找的。我們這里選擇簡單的NandFlash的存儲方法,可以隨時更改保存。保存過程就是先將編譯好的uCLinux 內(nèi)核下載到SDRAM 中,然后用 BIOS 中的“nfw uclinux”命令將其寫入即可,那么內(nèi)核就會長期保存在開發(fā)板上。接下來我們就是運行uCLinux,,啟動uClinux 時,由 Bootloader拷貝到SDRAM再解壓運行。下面我們正式進入對uClinux的配置和編譯。將uClinux ARMSYS z拷貝到/home/ 下,運行解壓命令:tar xvzf 。,運行安裝:sh armelftools2003。打開終端: cd /home/uClinuxdist (進入/home/uClinuxdist 目錄下) make menuconfig (運行 uClinux 配置環(huán)境)進入uClinux配置(uClinux Configuration),選中“Kernel/ Library/Defauts Selection ” 敲空格進入。選取:“內(nèi)核設(shè)置和用戶選項設(shè)置”: [*] Customize Kernel Settings [*] Customize Vendor/User Settings按下ESC鍵退出并保存。終端將首先進入內(nèi)核配置選單。我們在配置uClinux內(nèi)核時,就可以通過對這些選項的選擇和取消選擇來設(shè)定內(nèi)核所具有的功能項。這也是裁減uClinux內(nèi)核的基本方法。按下ESC退出后將進入用戶選項選單。我們自己編寫的應(yīng)用程序就可以放在用戶選項菜單中。下面我們對uClinux進行編譯。在/opt/目錄下,按下面的步驟對 uClinux 源碼包進行編譯:make dep……………………………建立依賴關(guān)系 make clean (非必要) ……………清除舊的編譯結(jié)果 make lib_only ……………………編譯庫 make user_only……………………編譯用戶程序 make romfs…………………………產(chǎn)生 rom 文件系統(tǒng) make image…………………………產(chǎn)生映像文件 make…………………………………編譯內(nèi)核編譯成功后,在 uClinuxdist/ 目錄下將產(chǎn)生 images 目錄,其中包含的2個文件:, 就是我們可以用來下載和燒錄的映像文件。然后下載或燒錄這些二進制文件,并啟動運行uClinux。第五節(jié) 本章小結(jié) 本章對開發(fā)所需的硬件器件和軟件平臺都作了一個簡單的介紹,并敘述了配置linux工具鏈和配置uClinux內(nèi)核的過程,為后面程序的設(shè)計與實現(xiàn)提供了良好的條件。第四章 總體設(shè)計第一節(jié) 硬件電路的設(shè)計由于本設(shè)計是采用的自帶總線控制接口的LCD,故而對我們來說開發(fā)將變得異常簡單。我們將直接利用arm7的通用輸入/輸出端口進行控制。對LCD的連接圖如下:圖41(該圖有問題)這里我們選擇PG口為控制端口,PD口為數(shù)據(jù)端口。由于片選信號CS2都是高有效,所以這里我們將這個CS2始終拉高,保證有效。另外,對于Vss、Vdd、VR、Vout以及A、K這幾個引腳,我們分別給其加上電壓。VR和Vout是調(diào)節(jié)對比度的引腳,由于是負壓,所以我們對其用10k滑動變阻器接地。第二節(jié) 程序的開發(fā)過程我們主要是利用arm對LCD進行控制。在其過程中,我們先將程序在Linux編譯,然后又下載到arm板上,由arm板控制LCD進行顯示,最后數(shù)據(jù)將在LCD上顯示成相應(yīng)的文字和圖片,具體的流程如下: 圖42第三節(jié) 程序的設(shè)計 由于是基于arm7的開發(fā),所以在整個程序中,我們必須先對arm7的端口進行配置,將我們所選取的PG、PD端口配置成我們需要的GPIO端口。其后部分將是集中于對LCD的控制。這部分我們主要是要實現(xiàn)對LCD的初始化、開顯示、清屏以及讀狀態(tài)、寫命令、寫數(shù)據(jù)等。而滿足用戶的要求對什么樣的文字或圖片進行顯示將是建立在這些函數(shù)的基礎(chǔ)之上。這些函數(shù)的層次結(jié)構(gòu)用圖表示如下:圖43在上圖中,我們能清楚的看到我們需要的各個函數(shù)之間的關(guān)系,只要將這些函數(shù)各個擊破,我們就能達到我們的將LCD顯示出來的目的。另外,我們的顯示函數(shù)其實都是以三個基本函數(shù)為基礎(chǔ)的,這三個基本函數(shù)就是LCD_CmdRead()、LCD_CmdWrite()、LCD_DataWrite(),而這三個函數(shù)就是嚴格的按照LCD的總線時序來進行讀寫的。由于arm不是像單片機那樣按位控制的,所以這三個函數(shù)還得依靠另外一個函數(shù)進行輸入—— outdata()。其關(guān)系如下:圖44第四節(jié) 本章總結(jié) 本章主要是對整個項目作了一個分析,根據(jù)具體的問題提出相應(yīng)的解決方案。本章第一節(jié)主要是考慮到LCD的控制方式,指定出相應(yīng)的硬件連接圖,然后第二節(jié)、第三節(jié)主要是針對軟件層次結(jié)構(gòu)做出相應(yīng)的設(shè)計。本章為后面第五章的具體實現(xiàn)作了充分的準備。第五章 程序的實現(xiàn)第一節(jié) 對arm7的相應(yīng)配置 在整個程序中,該部分可以說是最重要的部分。由于我們選取的LCD是總線接夠控制的,所以我們的LCD初始化必須嚴格按照廠家提供的數(shù)據(jù)手冊進行操作。下面我們就分析一下我們怎么實現(xiàn)我們的初始化函數(shù)。由于是基于arm的控制,所以首先我們必須對arm的GPIO端口進行配置這個就具體的體現(xiàn)在我們的Port_Init()函數(shù),首先我們來分析一下這個函數(shù):void Port_Init(void){ rPCOND = 0x0000。 //初始化PD的各位都是輸出狀態(tài) rPDATD = 0x00。 //端口的初始化數(shù)據(jù)為0 rPCONG = 0x0000。 //初始化PG的各位都是輸出狀態(tài) rPAPG = 0x00。 //端口的初始化數(shù)據(jù)為0}通過上面的定義我們就將arm的PD、PG端口定義為GPIO口,通過它們實現(xiàn)對LCD的控制。由于對arm端口的操作不能像普通單片機一樣一位一位的直接讀寫,所以我們要進行相應(yīng)的處理,,由于程序較長,本文不在此對其分析,詳情請見附錄。然后我們將利用該文件中的配置,實現(xiàn)對arm的位讀寫,這主要依靠我們的函數(shù)outdata():void outdata(unsigned int dat){ if( (datamp。0x01)==1 ) h_db0()。 else l_db0()。//利用按位與的方式實現(xiàn) if( (datamp。0x02)==2 ) h_db1()。 else l_db1()。//對各位的置高和置低 if( (datamp。0x04)==4 ) h_db2()。 else l_db2()。 if( (datamp。0x08)==8 ) h_db3()。 else l_db3()。 if( (datamp。0x10)==16 ) h_db4()。 else l_db4()。 if( (datamp。0x20)==32 ) h_db5()。 else l_db5()。 if( (datamp。0x40)==64 ) h_db6()。 else l_db6()。 if( (datamp。0x80)==128 ) h_db7()。 else l_db7()。}第二節(jié) 對LCD的軟件復(fù)位以及初始化操作由于該LCD要求必須在初始化之前對其進行一個低電平操作,然后再拉高,我們必須寫一個軟件復(fù)位的函數(shù)softrst(),具體如下:void softrst(){ delay_nms(2)。 l_cs1()。 //片選有效 h_rd()。 //讀信號無效 l_rst()。 //低電平 delay_nms(5)。 h_rst()。 //高電平 delay_nms(5)。}下面我們就可以對LCD進行初始化操作。其實初始化函數(shù)是基于讀命令、寫命令以及寫狀態(tài)函數(shù)的,對于這幾個函數(shù)我們將在下節(jié)介紹。下面我們來看我們的LCD初始化函數(shù):void lcd_inital(){ LCD_CmdWrite(WLCR)。 //[00H] , 設(shè)置成正常模式,顯示模式置為圖形模式 LCD_DataWrite(0x00)。 LCD_CmdWrite(MISC)。 //[01H] , seg掃描順序為0319,掃描為0239 LCD_DataWrite(0x08)。 LCD_CmdWrite(ADSR)。 //[03H] , 設(shè)置卷動功能,卷動方向從左到右 LCD_DataWrite(0x00)。 LCD_CmdWrite(INTR)。 //[0FH] , 禁能中斷和喚醒模式 LCD_DataWrite(0x00)。 LCD_CmdWrite(WCCR)。 //[10H] , 設(shè)置字體和光標模式 LCD_DataWrite(0x00)。 LCD_CmdWrite(CHWI)。 //[11H] ,設(shè)置光標高度和行距 LCD_DataWrite(0x00)。 LCD_CmdWrite(MAMR)。 //[12H] , 光標水平模式,DDRAM1數(shù)據(jù)顯示 LCD_DataWrite(0x11)。 LCD_CmdWrite(AWRR)。 //[20H] , 設(shè)定工作窗口右邊邊界 LCD_DataWrite(0X1D)。 LCD_CmdWrite(DWWR)。 //[21H] , 設(shè)定分辨率 LCD_DataWrite(0X17)。 LCD_CmdWrite(AWBR)。 //[30H] , 設(shè)定工作窗口下方邊界 LCD_DataWrite(0X7F)。 LCD_CmdWrite(DWHR)。 //[31H] , 設(shè)置工作窗口高度 LCD_DataWrite(0X7F)。 LCD_CmdWrite(AWLR)。 //[40H] ,設(shè)定工作窗口左邊邊界 LCD_DataWrite(0x00)。 LCD_CmdWrite(AWTR)。 //[50H] , 設(shè)定工作窗口上方邊界 LCD_DataWrite(0x00)。 LCD_CmdWrite(CURX)。 //[60H] , 設(shè)置時半型字還是全型字 LCD_DataWrite(0x00)。 LCD_CmdWrite(BGSG)。 //[61H] , 設(shè)定卷動模式起始位置 LCD_DataWrite(0x00)。 LCD_CmdWrite(EDSG)。 //[62H] , 設(shè)定卷動模式終點位置 LCD_DataWrite(0x00)。 LCD_CmdWrite(CURY)。 //[70H] , 設(shè)定光標位置 LCD_DataWrite(0x00)。 LCD_CmdWrite(BGCM)。 //[71H] , 卷動模式下mon的起始位置 LCD_DataWrite(0x00)。 LCD_CmdWrite(EDCM)。 //[72H] , 卷動模式下mon的終點位置 LCD_DataWrite(0x00)。 LCD_CmdWrite(BTMR)。 //[80H] ,光標閃碩和卷動時間周期 LCD_DataWrite(0x20)。 LCD_CmdWrite(ITCR)。 //[90H] , 空閑時間設(shè)定 LCD_DataWrite(0x20)。 LCD_CmdWrite(PNTR)。 //[E0H] , 要寫如DDRAM中的資料 LCD_DataWrite(0x00)。 LCD_CmdWrite(FNCR)。 //[F0H] , ISO8859模式關(guān)閉 LCD_DataWrite(0x00)。 LCD_CmdWrite(FVHT)。 //[F1H] , 設(shè)定字符放大倍率 LCD_DataWrite(0x00)。}只有保證初始化正確,我們才能順利的進行顯示函數(shù)的開發(fā),否則初始化沒有正確的話,后面的一切函數(shù)都將無法發(fā)揮預(yù)期的功能。第三節(jié) 讀寫函數(shù)的實現(xiàn)在LCD的驅(qū)動過程中,最基本的函數(shù)就是實現(xiàn)對LCD命令寄存器和數(shù)據(jù)寄存器的讀寫函數(shù)?,F(xiàn)在我們來具體的實現(xiàn)這些函數(shù)。由于讀寫函數(shù)是對LCD操作的最底層的函數(shù),所以必須嚴格按照LCD的讀寫時序來實現(xiàn)函數(shù)。深圳卓立恩電子有限公司的ZLG240128F型號的液晶屏遵循的是intel的8080總線時序要求,具體的時序圖如下:按照以上時序圖,我們的讀寫函數(shù)如下:unsigned char LCD_CmdRead(unsigned char Addr)該函數(shù)主要是實現(xiàn)對寄存器的數(shù)據(jù)的讀取,以此來觀察液晶的狀態(tài),其具體的實現(xiàn)如下:unsigned char L
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1