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

正文內(nèi)容

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

2025-07-19 12:09 本頁(yè)面
 

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