999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于元件技術手冊的嵌入式驅動開發的探索

2016-05-30 22:22:39楊佳鄧力
企業科技與發展 2016年3期
關鍵詞:嵌入式

楊佳 鄧力

(1.南寧第三職業技術學校 廣西 南寧 530001;2.桂林理工大學 南寧分校,廣西 南寧 530001)

【摘 要】文章通過對國內嵌入式系統崗位的技能進行分析,針對國內院校嵌入式系統課程的教學內容、實驗實訓開設的現狀,根據企業對嵌入式崗位招聘需求,提出了基于元件技術手冊的嵌入式驅動開發的新思路。以LPC2106驅動LCD1602液晶的項目,探索了基于元件技術手冊來進行新產品開發的培訓新思路,提出了基于元件技術手冊進行產品研發的新方法,對拓展國內外嵌入式系統教學提供了新的課程培訓思路。

【關鍵詞】嵌入式;驅動開發;LCD1602;LPC2106

【中圖分類號】TP311 【文獻標識碼】A 【文章編號】1674-0688(2016)03-0046-05

1 嵌入式系統崗位分析

隨著我國信息化與工業化融合的推進,嵌入式技術的廣泛應用已成為必然趨勢[1]。企業不僅對嵌入式系統人才需求的數量在增加,對嵌入式系統人才的技能要求也在不斷地提高。從事嵌入式產品的相關研發,離不開硬件層、中間層、軟件層、功能層4個層次的研發工作[2]。它的開發流程都必須先定義產品功能,再對定義進行系統分割,然后進行軟硬件的規劃和設計,按照崗位職能可進一步細分如下。

軟件研發分為系統構建工程師、上層驅動開發工程師、上層應用程序開發工程師。

硬件研發分為電路原理圖設計工程師、PCB設計工程師、底層驅動開發工程師。

軟件研發的3類工程師按照操作系統的種類又分出與各種操作系統相對應的工程師。目前,在各領域應用的主流操作系統有UCOS-II、LINUX、WINCE、VXWORKS等。企業一般會按照不同的操作系統平臺招聘相應的工程師。

2 當前嵌入式系統培訓的不足

目前,國內高校開設嵌入式系統課程的高校、培訓機構較少,嵌入系統課程的教學內容、實驗實訓的開設還處在探索的階段[3]。通過對畢業學生、學員的回訪和到企業的調研發現,由于在學習時學員對元件的手冊沒有全面地練習,對設備、元件的相關代碼都是通過修改(教師提供或網上下載)而得到的,因此當采用新元件時,學員對新元件的驅動編寫無從下手。

3 嵌入式系統培訓改進的基本思想

(1)要讓學員學習如何查看廠家提供的技術手冊并根據元器件技術手冊來進行設計。

(2)培訓項目元件的選取要有一定的復雜性,但最好選取學員不太陌生的元器件。

(3)為了使學員能更深刻地理解驅動程序的代碼是如何與元件的硬件電路相對應的,驅動程序的代碼編寫先不采用操作系統。

4 項目設計

根據項目設置的基本思想,設置一個嵌入式驅動液晶顯示的電路并完成相關驅動代碼的編寫。

液晶采用LCD1602,嵌入式CPU采用LPC2106,驅動項目編寫軟件采用ADS1.2,為了驗證驅動代碼運行的結果是否正確,采用Proteus軟件完成電路設計,并通過Proteus電路仿真來驗證[4]驅動代碼在液晶電路的運行情況。

項目主要通過LCD1602的顯示程序來學習如何根據LCD1602廠家的技術手冊編寫驅動程序代碼。

液晶LCD1602的主要技術參數如下。

1602字符型液晶顯示模塊是一種專門用于顯示字母、數字、符號等點陣式LCD,可以顯示2行,每行顯示16個ASCII字符,并且可以自定義圖形,只需要寫入相對應字符的ASCII碼就可以顯示[5](見表1)。

根據液晶接口信號引腳說明,完成液晶和CPU的電路連接(如圖1所示)。

根據電路的連接,在程序中完成管腳的定義:

#define rs (1<<8)

#define rw (1<<9)

#define en (1<<10)

#define busy (1<<7)

根據手冊管腳的接口信號說明,確定和液晶相連接的LPC2106的引腳為輸入輸出IO口,同時將與液晶連接的CPU引腳定義為輸出IO口的類型:

PINSEL0=0x00000000; //設置所有引腳連接GPIO

PINSEL1=0x00000000;

IO0DIR=0x7ff; //設置P0.0—P0.10為輸出IO口

1602液晶的D0~D7端為8位數據口,進行數據傳送,而RS、R/W、E端則配合可以做出不同的操作[5],對1602進行操作主要有4種,如下:{1}讀狀態,輸入:RS=L,RW=H,E=H。輸出:D0~D7=狀態字。{2}寫指令,輸入:RS=L,RW=L,D0~D7=指令,E=高脈沖。輸出:無。{3}讀數據,輸入:RS=H,RW=H,E=H。輸出:D0~D7=數據。{4}寫數據,輸入:RS=H,RW=L,D0~D7=數據,E=高脈沖。輸出:無。

在進行讀操作的時候,RW置于1,RS則根據讀的內容(狀態或數據)置為1或0,E置為1,可以在數據口讀到正確的數據,在將E置為1之后,就可以緊跟著指令去讀取數據,在讀到數據后,再將E置為0。

在進行寫操作的時候,RW要置為0,RS根據寫的內容不同(指令或數據)置為1或0,同時在將E置為1之前,要先將數據送到數據口上,然后將E置為1,經過一定的延時后,再將E置為0,在這個時間段內必須保證數據口上的數據穩定不變,且為有效的數據。

從上文可以看出,如果想對1602進行何種操作,只要按其相對應的操作規程來做即可。

雖然以上有4種操作,但實際上歸類起來只有2種,一種讀一種寫,并且進行讀或寫都要進行數據的傳送。

液晶狀態字說明如圖2所示。

用CPU來控制LCD模塊的方式十分簡單,LCD模塊的內部可以看成2組寄存器,一個為指令寄存器,另一個為數據寄存器,由RS引腳來控制。所有對指令寄存器或數據寄存器的存取均需檢查LCD內部的忙碌標志STA7,此標志用來告知LCD內部正在工作,并不允許接收任何的控制命令。而此位的檢查可以令RS=0,用讀取D7來加以判斷。當D7為0時,才可以寫入指令或數據寄存器。因此,在對控制器每次進行讀寫操作之前,都必須進行讀寫檢測,確保STA7為0。

根據手冊的要求,編寫、讀寫檢測函數:

/****************************************************************************

* 名稱:ChkBusy( )

* 功能:檢查總線是否忙

****************************************************************************/

void ChkBusy( )

{

IO0DIR=0x700;

while(1)

{

IO0CLR=rs;

IO0SET=rw;

IO0SET=en;

if(!(IO0PIN & busy))break;

IO0CLR=en;

}

IO0DIR=0x7ff;

}

代碼說明:

根據讀狀態,輸入RS=L,RW=H,E=H; 輸出D0~D7狀態字的定義。為了能讀出D7的狀態,要使RS=L,RW=H,E=H,因此定義IO0DIR=0x700,使P0.8-P0.10為輸出IO口,而P0.0-P0.7輸入IO口。

忙檢測完成后,需要對LCD1602輸入指令和數據,因此定義IO0DIR=0x7ff,將P0.0-P0.10全部定義為輸出IO口。

在對液晶進行忙檢測后,就可以對液晶進行讀寫操作。寫操作分為寫指令與寫數據2種操作,寫指令是定義對液晶進行何種操作,寫數據是將數據傳遞給1602液晶。對液晶進行寫操作一般是先執行寫操作,然后再寫數據。寫指令與寫數據相對應的函數如下:

/****************************************************************************

* 名稱:WrOp( )

* 功能:寫指令函數

****************************************************************************/

void WrOp(uint8 dat)

{

ChkBusy( );

IO0CLR=rs; //全部清零

IO0CLR=rw;

IO0CLR=0xff; //先清零

IO0SET=dat; //再送數

IO0SET=en;

IO0CLR=en;

}

通過寫指令函數完成對液晶的寫操作。

寫數據函數:

/****************************************************************************

* 名稱:WrDat()

* 功能:寫數據函數

****************************************************************************/

void WrDat(uint8 dat) //讀數據

{

ChkBusy();

IO0SET=rs;

IO0CLR=rw;

IO0CLR=0xff; //先清零

IO0SET=dat; //再送數

IO0SET=en;

IO0CLR=en;

}

LCD1602手冊中液晶初始化的要求如圖3所示。

在使用1602之前,必須對其進行初始化操作,初始化過程是往1602固定寫入一定的指令,里面包括指定使用模式、清屏等[5]。LPC2106晶振為11.0592 MHz,為了能準確地延時,可能通過調用延時函數完成延時。

/*****************************************************************************

*名稱:DelayNS( )

*功能:長軟件延時

******************************************************************************/

void delay(uint8 z)

{

uint8 x,y;

for(x=z;x>0;x--)

for(y=200;y>0;y--) ;

}

/****************************************************************************

* 名稱:lcd_init( )

* 功能:lcd初始化函數

****************************************************************************/

void lcd_init(void)

{

Delay(15);

WrOp(0x38);

Delay(5);

WrOp(0x38);

Delay(5);

WrOp(0x38); //顯示模式設置

Delay(5);

WrOp(0x08); //顯示關屏

WrOp(0x01); //顯示清屏

WrOp(0x06); //光標加1

WrOp(0x0c); //開顯示

}

在1602上,分為二行,每行有16個字符位置,如何在我們需要的位置上顯示出對應的字符呢?可由RAM地址映射圖及數據指針設置,確定液晶顯示的位置(如圖4所示)。

要顯示字符時先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符:比如第二行第一個字符的地址是40 H,那么是否直接寫入40H就可以將光標定位在第二行第一個字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位D7恒定為高電平1,所以實際寫入的數據應該是01000000B(40H)+10000000B(80H)=11000000B(C0H)

圖5是1602顯示RAM緩沖區對應的地址,要在對應的位置顯示出字符,首先要寫入一個設置數據地址的指令碼(80H+地址),然后緊跟著寫入要顯示的數據即可。

寫指令:WrOp (0x80+地址,0)

寫數據:WrDat (字符ASCII碼,1)

比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊把地址41H中的點陣字符圖形顯示出來,我們就能看到字母“A”。

最后完成主函數的編寫使用:

/****************************************************************************

* 名稱:main()

* 功能:顯示文本

****************************************************************************/

int main(void)

{

lcd_init( );

IODIR=0x7ff; //設置為輸出

IOCLR=0x7ff;

WrOp(0xc1);

WrDat('a');

}

代碼說明:WrOp(0xc1)寫指令函數定義字符在液晶中顯示的地址為第二行第一個字符,WrDat('a')將要顯示的字符a傳遞至液晶顯示。

完成程序的編譯后將生成的.hex文件下載到proteus電路中完成仿真,液晶在第二行第一列正常顯示出字符a。

5 項目的擴展

在完成了嵌入式液晶驅動代碼的實驗后,還可以引導學員對該項目進行擴展。

(1)如何在液晶中顯示字符串?

為了能夠顯示字符串,可編寫字符串顯示函數:

/****************************************************************************

* 名稱:DisText( )

* 功能:顯示文本函數

****************************************************************************/

void DisText(uint8 addr,uint8 *p)

{

WrOp(addr);

while(*p !='\0')WrDat(*(p++));

}

(2)引導學員修改程序:如何讓液晶上顯示的字符動態移動顯示?

(3)如何將ARM中LCD1602液晶的顯示代碼移植到其他的CPU中(以移植到8051為例),讓學員感受到C語言作為高級語言的優勢。

(4)在項目中,針對元件技術手冊引導學員進行其他課程的實驗:如由元件外形尺寸,引導學生在設計PCB時根據手冊上的元件外形尺寸設計LCD1602的元件PCB封裝。

6 結論

本文通過對國內嵌入式系統崗位的分析,針對國內嵌入式系統教學、培訓的情況,通過LPC2106驅動LCD1602液晶的項目,系統地展現了基于元件技術手冊進產品研發的方法,探索了基于元件技術手冊來進行新產品開發的培訓新思路,對拓展國內外嵌入式系統教學提供了新的課程培訓思路。

參 考 文 獻

[1]黃福瑩,黎相成,何華光.嵌入式技術課程的教學探討[J].廣西大學學報(哲學社會科學版),2007,29(5):77-78.

[2]潘曉寧.高職高專院校嵌入式系統課程教學方法的探討[J].職業教育研究,2007(8):24-25.

[3]張其亮,韓斌.“嵌入式系統”課程的實驗教學研究[J].實驗室研究與探索,2009,28(6):132-133.

[4]倪蘊濤.基于嵌入式系統實驗課程教學方法改革和教學思路探索的研究[J].牡丹江教育學院學報,2007(4):130-131.

[5]趙亮.液晶顯示模塊LCD1602應用[J].電子制作,2007(3):58-59.

[責任編輯:鐘聲賢]

猜你喜歡
嵌入式
Focal&Naim同框發布1000系列嵌入式揚聲器及全新Uniti Atmos流媒體一體機
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
基于嵌入式Linux內核的自恢復設計
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
嵌入式PLC的設計與研究
電子制作(2018年16期)2018-09-26 03:27:18
搭建基于Qt的嵌入式開發平臺
基于嵌入式系統Windows CE的應用程序開發
嵌入式單片機在電機控制系統中的應用探討
電子制作(2017年8期)2017-06-05 09:36:15
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
Altera加入嵌入式視覺聯盟
主站蜘蛛池模板: 2020精品极品国产色在线观看| 亚洲色无码专线精品观看| 欧美爱爱网| 久久国产V一级毛多内射| 亚洲自偷自拍另类小说| 国产视频大全| 亚洲精品无码不卡在线播放| 91在线精品免费免费播放| www成人国产在线观看网站| 日本成人福利视频| 狠狠色狠狠色综合久久第一次| 国产小视频免费观看| 谁有在线观看日韩亚洲最新视频| 色婷婷亚洲综合五月| 国产99视频免费精品是看6| 久久夜夜视频| 亚洲精品无码在线播放网站| 久久夜夜视频| 色男人的天堂久久综合| 亚洲丝袜中文字幕| a毛片免费看| 国产成人综合久久| 欧美综合成人| 女人18毛片水真多国产| 2020久久国产综合精品swag| 亚洲日韩在线满18点击进入| 久久黄色免费电影| 国产成人一二三| 99成人在线观看| 国产精品所毛片视频| 亚洲成人黄色在线| 在线观看免费黄色网址| 亚洲精品国产成人7777| 欧美成在线视频| 97视频免费看| 99re这里只有国产中文精品国产精品| 免费一级毛片完整版在线看| 国产91精品调教在线播放| 青青草国产免费国产| 久久久久中文字幕精品视频| 中文纯内无码H| 91蜜芽尤物福利在线观看| 亚洲日韩AV无码精品| 国产精品私拍99pans大尺度| 污污网站在线观看| 久久精品亚洲专区| 青草视频免费在线观看| a毛片在线| 午夜精品久久久久久久无码软件 | 日韩人妻无码制服丝袜视频| 久久精品人人做人人爽电影蜜月| 四虎影视8848永久精品| 免费一级无码在线网站| 亚洲中文精品人人永久免费| 大香伊人久久| 小说区 亚洲 自拍 另类| 热伊人99re久久精品最新地| 秘书高跟黑色丝袜国产91在线| 日韩中文无码av超清| 欧美国产综合色视频| 久久免费视频播放| 四虎在线观看视频高清无码| 国产99热| 久久久波多野结衣av一区二区| 久久成人免费| 不卡网亚洲无码| 在线另类稀缺国产呦| 久久99国产精品成人欧美| 欧美在线导航| 伊大人香蕉久久网欧美| 国产又黄又硬又粗| 久久婷婷五月综合97色| 福利视频一区| 四虎国产精品永久一区| 国产一区二区人大臿蕉香蕉| 天天操天天噜| 亚洲性视频网站| 91成人精品视频| 四虎在线高清无码| 99久久成人国产精品免费| 欧美a网站| 欧美在线精品怡红院|