丁香婷婷网,黄色av网站裸体无码www,亚洲午夜无码精品一级毛片,国产一区二区免费播放

現(xiàn)在位置:范文先生網(wǎng)>理工論文>電子通信論文>ARM微控制器LPC210X的LCD接口技術(shù)

ARM微控制器LPC210X的LCD接口技術(shù)

時(shí)間:2023-02-20 22:55:19 電子通信論文 我要投稿
  • 相關(guān)推薦

ARM微控制器LPC210X的LCD接口技術(shù)

  摘要:本文分別以GPI0口直接連接、串行轉(zhuǎn)換連接、CPLD分部連接三種方法闡述了無外部總線的PhilipsARM微控制器LPC210X與點(diǎn)陣圖形液晶顯示器的接口設(shè)計(jì),并給出硬件電路框圖和主要程序。
  關(guān)鍵詞:ARMLPC210XLCD接口串并轉(zhuǎn)換CPLD
  
  引言
  
  Philips最近推出了其第一款基于ARM內(nèi)核的控制器LPC210X,但由于LPC210X外部總線不開放,無法擴(kuò)展內(nèi)存、驅(qū)動(dòng)液晶顯示器等,給它的推廣帶來了一定的影響。筆者最近在一工控板項(xiàng)目中采用了該系列芯片,項(xiàng)目后斯應(yīng)客戶要求需對(duì)幾個(gè)參量進(jìn)行顯示并擴(kuò)展鍵盤,不得已之下,采用了CPLD,并利用了GPIO口模擬總線和液晶時(shí)序與點(diǎn)陣圖形液日模塊HS12864-16建立了連接。下面詳細(xì)探討包括該種連接的三種接口方式。
  
  1LPC210X的GPI0口和HS12864-16A介紹
  
  LPC210X控制器包含LPC2104、LPC2105、LPC2106,除了片內(nèi)靜態(tài)RAM不同外,其他完全相同。該系列器件具有32個(gè)GPIO口(P0.0~P0.31),沒有外部總線,大多GPIO口是復(fù)用口,所以它一般不適合連接大屏幕液晶顯示器,但驅(qū)動(dòng)小規(guī)模液晶模塊進(jìn)行工業(yè)控制上的參量顯示還是非常合適的。
  
  GPIO包含四個(gè)寄存器,如表1所列。
  
  表1配置GPI0口的四個(gè)寄存器
  
  名稱地址
  描述
  
  IOPIN0xE0028000引腳值寄存器,引腳當(dāng)前狀態(tài)都從該寄存器讀出IOSET0xE0028004輸出置位寄存器,只能寫1,對(duì)應(yīng)引腳輸出高電平IOCLR0xE0028008輸出清零寄存器,只能寫1,對(duì)應(yīng)引腳輸出低電平IODIR0xE002800C方向控制寄存器。控制每個(gè)I/O方向
  另外GPIO口還包含兩個(gè)引腳連接模塊寄存器PINSEL0、PINSEL1,用來為32個(gè)引腳配置I/O功能或其他特殊功能。
  
  HS12864-16A是內(nèi)部不帶字符發(fā)生器的3V液晶模塊(LPC210X可直接驅(qū)動(dòng)5V液晶模塊俁考慮到功耜耗,不贊成連接),其主要引腳如表2所列)。
  
  表2HS12864-16A引腳525252
  
  引腳號(hào)引腳名稱
  描述
  
  1、23、VSS、VDD、V0電源(3.3V)、電源地、驅(qū)動(dòng)負(fù)太4D/I數(shù)據(jù)指令選擇5R/W讀寫選擇6E使能,R/W=0,下降沿鎖存DB7DB07~14DB0~DB7數(shù)據(jù)線15、16CS1、CS2左、右半屏選擇17RET復(fù)位,低電平復(fù)位18VoutLCD驅(qū)動(dòng)負(fù)壓,-10V,分壓接3腳19、20EN、NO背光電源
  顯示屏由128×64點(diǎn)陣組成,共有64行,分為8頁,每頁8行,每行128列。寫指令規(guī)則如下:當(dāng)D/I=0、R/W=0,所有指令由傳輸?shù)綌?shù)據(jù)線的8位二進(jìn)制數(shù)據(jù)決定,開顯示為0x3f,并顯示為0x3e,傳輸行、列地址由2低6位決定,傳輸頁地址為低3位決定。
  
  2三種接口設(shè)計(jì)
  
  2.1直接連接法
  
  連接框圖如圖1所示。
  
  該種方式占用GPIO口較多,對(duì)于要大量應(yīng)用GPIO口復(fù)用功能的系統(tǒng)并不合適。為便于說明,圖1將LPC210X的P0.0~P0.12選為連接的13個(gè)口,具體到設(shè)計(jì)系統(tǒng)中,可根據(jù)系統(tǒng)用到功能對(duì)應(yīng)GPIO口復(fù)用功能進(jìn)行選取和配置。HS12864-16A的數(shù)據(jù)線為8條,所以存在于Flash中的字模也是按8位存的,可由字模軟件得出,傳輸數(shù)據(jù)進(jìn)行顯示的時(shí)候要滿足以下時(shí)序:首先使D/I為高電平,R/W為低電平,接著將Flash里的某個(gè)8位二進(jìn)制字模傳送到8個(gè)I/O口上,然后使能E模擬下降沿時(shí)序,把數(shù)據(jù)鎖存到液晶顯示器內(nèi)部的顯示存儲(chǔ)器中即可顯示。
  
  程序由ADS1.2編譯器編譯。
  
  GPIO口配置:
  
  #defineLCD_DI0x00000100;指令選擇線P0.8
  
  #defineLCD_RW0x00000200//讀寫選擇線P0.9
  
  #defineLCD_E0x00000400//使能線P0.10
  
  #defineLCD_CS10x00000800//左屏選擇線P0.11
  
  #defineLCD_CS10x00000800//左屏選擇線P0.11
  
  #defineIO_USE0x00001FFF//13個(gè)GPIO口傳輸方向
  
  傳輸字模數(shù)值到液晶顯示器數(shù)據(jù)上的子程序如下:
  
  voidSendData(unsignedchardate){
  
  IOSET=data;
  
  IOCLR=~data&0x000000FF;
  
  }
  
  備注:以上子程序?yàn)椴⑿袀鬏,也可以用串行移位進(jìn)行傳輸,具體代碼如下:
  
  unsignedchari;
  
  for(i=0;i<8;i++){//依次發(fā)送8位數(shù)據(jù)
  
  if((data&0x80)!=0)//最高位為1,對(duì)應(yīng)口線置1
  
  IOSET=IO_TURN;
  
  Else
  
  IOCLR=IO_TURN;//否則置0
  
  data<<=1;//移到下一數(shù)據(jù)線
  
  }
  
  IO_TURN=0x00000080;//8位數(shù)據(jù)傳輸完畢后,仍然將P0.7設(shè)為起始線
  
  }
  
  下面以左半屏來說明如何在屏幕上任意顯示16×16點(diǎn)陣漢字。
  
  傳送指令子程序如下:
  
  voidwcodel(unsignedcharcode){//送指令
  
  IOSET=LCD_CS1;//開左屏
  
  IOCLR=LCD_CS2;//關(guān)右屏
  
  IOCLR=LCD_RW;//寫選擇
  
  IOCLR=LCD_DI;//指令選擇
  
  SendData(code);//依次將指令代碼傳到數(shù)據(jù)線上
  
  IOSET=LCD_E;//模擬使能E下降沿
  
  IOCLR=LCD_E;
  
  }
  
  同理,只要把IOCLR=LCD_DI改為IOSET=LCD_DI便成傳送數(shù)據(jù)了。為便于區(qū)分,可將函數(shù)名改為wdata1(data)。
  
  顯示左屏漢字子程序如下:
  
  voidhzleft(unsignedcharpage,unsignedcharrow,unsignedcharnumber){//形參分別為頁、列、漢字序號(hào)
  
  unsignedchari,j;
  
  wcode1(0xc0);//設(shè)置12864從第1行顯示
  
  wcode1(0x3f);//開顯示器
  
  for(j=page;j<page+2;j++){
  
  wcode1(row);//設(shè)置顯示列
  
  wcode1(0xb8+j);//設(shè)置顯示頁
  
  for(i=16*(j-page);i<16*(j+1-page);i++)//依次取字模傳輸
  
  wdata1(hangzi[32*a+i]);
  
  }
  
  }
  
  每個(gè)漢字字模由32個(gè)字節(jié)組成,前16個(gè)字節(jié)顯示漢字上半部分,后16個(gè)字節(jié)顯示漢字下半部分,構(gòu)成完整的16×16點(diǎn)陣。其中number代表存在Flash中的漢字排名序列號(hào),只要把頁、列、漢字序號(hào)實(shí)參值傳到漢字顯示子程序中進(jìn)行調(diào)用即可顯示漢字了。參考上面程序便能很方便地寫出字母、數(shù)字的顯示子程序。
  
  程序中使用寄存器名稱時(shí)要先在頭文件中將其映射到對(duì)應(yīng)地址,如對(duì)IOSET做如下定義:
  
  #defineIOSET(*((volatileunsignedlong*)0xE0028004))
  
  其它類似。
  
  另外,要定義設(shè)置引腳連接GPIO,以及GPIO方向設(shè)置。
  
  PINSEL0=0xX0000000;//設(shè)置用到的13個(gè)引腳連接到GPIO,為X的根據(jù)應(yīng)用系統(tǒng)配置
  
  PINSEL1=0xXXXXXXXX;
  
  IODIR=IO_USE;//設(shè)置用到的13線方向?yàn)檩敵?br />  
  當(dāng)然,完整的應(yīng)用還必須包括ARM時(shí)鐘代碼、啟動(dòng)代碼等。
  
  2.2串行轉(zhuǎn)換法
  
  從上面可以看出,盡管用8個(gè)GPIO口模塊總線非常容易與液晶顯示器建立連接,但是占用口線太多。為節(jié)省口線,可以考慮加入串入并出的移位寄存器74HC595,用LPC210X的GPIO口復(fù)用SPI功能或直接用GPIO口模擬SPI功能進(jìn)行驅(qū)動(dòng),后者更加方便。下面用這種方式進(jìn)行說明,同樣為方便,選用了連續(xù)的GPIO口P0.0~P0.7,具體設(shè)計(jì)系統(tǒng)要按實(shí)現(xiàn)情況進(jìn)行配置,框圖如圖2所示。
  
  該種方法通過3個(gè)GPIO口模擬SPI對(duì)74HC595進(jìn)行控制,驅(qū)動(dòng)液晶數(shù)據(jù)顯示。
  
  模擬SPI的GPIO口配置如下:
  
  #defineSPI_CLK0x00000001//時(shí)鐘線為P0.0
  
  #defineSPI_DATA0x00000002//傳輸數(shù)據(jù)線為P0.1
  
  #defineSPI_CS0x00000004//74HC595選通線為P0.2
  
  傳輸字模數(shù)值到數(shù)據(jù)線上的子程序:
  
  voidSendData(unsignedchardate){
  
  unsignedchari;
  
  IOCLR=SPI_CS;//SPI_CS=0
  
  for(i=0;i<8;i++){//依次發(fā)送8位數(shù)據(jù)
  
  IOCLR=SPI_CLK;//SPI_CLK=0
  
  if((date&0x80)!=0)//傳輸最高位
  
  IOSET=SPI_DATA;
  
  Else
  
  IOCLR=SPI_DATA;
  
  date<<=1;
  
  IOSET=SPI_CLK;//SPI_CLK=1
  
  }
  
  IOSET=SPI_CS;//SPI_CS=1
  
  }
  
  其它程序與方法1類似。有了以上子程序,就可以很方便地加以調(diào)用,進(jìn)行液晶驅(qū)動(dòng)顯示。
  
  2.3CPLD分部連接法
  
  CPLD是大規(guī)模邏輯器件,對(duì)于LPC210X的復(fù)雜應(yīng)用顯得非常重要,筆者的項(xiàng)目是用它來擴(kuò)展外部接口的,LCD應(yīng)用只是其中一部分,連接圖如圖3所示。
  
  共占用9線,為說明方便,也選用了連續(xù)的GPIO口。該方法把一個(gè)字節(jié)字模分成高4位和低4位,分別通過P0.0~P0.3傳送。在CPLD里設(shè)計(jì)一個(gè)4位鎖存器,當(dāng)高4位傳送完畢后,鎖存器進(jìn)行鎖存,然后發(fā)送低4位,接著由P0.4選通鎖存器,將8位數(shù)據(jù)同時(shí)送出,這樣節(jié)省了4個(gè)GPIO口;另外由P0.5通過CPLD直接控制CS1和CS2,也節(jié)省了1個(gè)GPIO口。LPC210X程序參照方法1很容易寫出,只是注意這里是分兩次、每次4位傳送,以及每次傳送要改變P0.4的狀態(tài)。CPLD采用了XilinxXC9500系列的XC9572,程序用Verilog-HDL語言編寫,其中數(shù)據(jù)分部傳送程序設(shè)計(jì)如下:
  
  modulelatch(out_high,out_low,data,enable);//定義模塊latch
  
  output[3:0]out_high;//定義輸出口高4位
  
  output[3:0]out_low;//定義輸出口低4位
  
  inputenable;定義鎖存選通信號(hào)
  
  reg[3:0]out_high;
  
  reg[3:0]out_low;
  
  reg[3:0]lock;//定義鎖存寄存器
  
  always@(enableordata
  
  begin
  
  if(!enable)//低電平鎖存
  
  lock<=data;
  
  else//高電平開通鎖存,輸出8位
  
  begin
  
  out_high=lock;
  
  out_low=data;
  
  end
  
  end
  
  endmodule
  
  至于P0.5選通CS1、CS2,在另一always塊中用ifelse語句進(jìn)行判斷就可以了。
  
  程序設(shè)計(jì)完成后,在WEBPACK中對(duì)用到的引腳進(jìn)行分配與鎖定,然后編譯。如果需要仿真的埃?鴕?杓貧ゲ鬮件,可使用Xilinx公司推出的免費(fèi)仿真軟件MODELSIM。
  
  對(duì)于上面的第二種方法,也可以考慮用CPLD設(shè)計(jì)稱位存儲(chǔ)器及時(shí)序控制。在復(fù)雜應(yīng)用中,加上CPLD不但可以令設(shè)計(jì)簡化,還可以使系統(tǒng)性能大大增加。
  
  結(jié)語
  
  對(duì)于無外部總線的PhilipsLPC210X,只能通過GPIO口模擬部連接液晶顯示器。但在設(shè)計(jì)過程中,可以考慮通過串行轉(zhuǎn)換或CPLD分部連接的方法減少GPIO口的使用,以便充分利用LPC210X的資源。不過沒有總線畢竟有所束縛,好在Philips即將推出的LPC22X4系列控制器開放了外部總線,相信當(dāng)這款芯片推出后,必將得到更多的關(guān)注。
  
  
  
  

【ARM微控制器LPC210X的LCD接口技術(shù)】相關(guān)文章:

大容量Flash型AT91系列ARM核微控制器08-06

人機(jī)界面中的LCD控制驅(qū)動(dòng)與接口設(shè)計(jì)08-06

基于RISC技術(shù)的8位微控制器設(shè)計(jì)08-06

帶USB和智能讀卡器接口的C51微控制器08-06

混合邏輯電平的接口技術(shù)08-06

ARM CPU S3C44B0X與C54X DSP的接口設(shè)計(jì)04-12

32位ARM嵌入式處理器的調(diào)試技術(shù)08-06

STN-LCD彩屏模塊08-06

EZ-USB接口設(shè)備的軟配置技術(shù)08-06