日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

如何使用EFM8微控制器在LCD上顯示圖像

出處:維庫電子市場網(wǎng) 發(fā)布于:2025-02-20 17:29:39

  當前的項目將這些功能融合在一起,以有效,方便地在LCD上顯示128 x-128像素圖像。目的是從任何標準的灰度.bmp映像文件開始,然后使用SCILAB對其進行處理,然后通過USB將其傳輸?shù)紼FM8微控制器,以便我們可以在128 x-128 x-128像素LCD上顯示。該項目僅處理一個圖像,但是此處介紹的技術很容易地顯示出由一系列相似圖像組成的簡單動畫。
  該過程始于使用Paint.net 或其他一些圖像編輯應用程序創(chuàng)建圖像。該圖像被加載到SCILAB中,并處理為與LCD兼容的格式,轉換為像素數(shù)據(jù)的矩陣,并通過64個字節(jié)USB數(shù)據(jù)包傳輸?shù)紼FM8。然后,使用更新的SPI狀態(tài)機將此像素數(shù)據(jù)(四行)傳輸?shù)絃CD模塊。
  端口I/O。

  端口I/O配置與我們在上一篇文章中使用的配置相同。

  SPI信號映射到適當?shù)亩丝谝_,除了芯片選擇信號,我們通過P0.1手動駕駛。我們無需直接配置USB數(shù)據(jù)線的端口引腳;所有USB外圍初始化都是通過VCPXPRESS庫來完成的。
  外圍設備和中斷
  外圍和中斷設置與我們在上一篇文章中使用的內(nèi)容相同:SPI配置用于與LCD模塊的通信,而Timer4用于短延遲。我們在此項目中不使用timer2,因為我們不需要幀速率。相反,當從PC接收像素數(shù)據(jù)包時,LCD會順序更新。
  固件
  該項目的VCP配置與我們在上一個項目中使用的配置相同。但是,還有一些其他USB功能:以前EFM8僅從SCILAB接收數(shù)據(jù),而現(xiàn)在EFM8也會傳輸數(shù)據(jù)。
  void USBTxByte(unsigned char BytetoSend)
  {
  Block_Write(&BytetoSend, 1, &USBBytesTransmitted);}
  正如上面的block_write()函數(shù)的名稱所暗示的那樣,vcpxpress庫能夠使用一個函數(shù)調(diào)用傳輸一個字節(jié)數(shù)組。但是,在此項目中,來自EFM8的USB傳輸僅用于流量控制:EFM8發(fā)送一個字節(jié)來通知Scilab,該是時候發(fā)送更多數(shù)據(jù)了。因此,usbtxbyte()函數(shù)只是使用block_write()傳輸單個字節(jié)的便利方法。
  收到的USB數(shù)據(jù)包處理以下代碼:
  if (API_InterruptCode & RX_COMPLETE)   // USB read complete{if(USBBytesReceived == 1 && USBRxPacket[0] == NEW_IMAGE_FLAG){CLEAR_LCD = TRUE;
  NextLinetoWrite = 0;
  //return the new image flag byte to the PC for flow controlUSBTxByte(NEW_IMAGE_FLAG);//continue with the next USB read procedureBlock_Read(USBRxPacket, USB_PACKET_SIZE, &USBBytesReceived);}
  else if(USBBytesReceived == USB_PACKET_SIZE){/*this flag tells the while loop in ImagetoLCD_main.cto process a received USB pixel data packet*/USB_PACKET_RECEIVED = TRUE;//continue with the next USB read procedureBlock_Read(USBRxPacket, USB_PACKET_SIZE, &USBBytesReceived);}
  }
  當Scilab腳本完成將圖像文件轉換為LCD像素數(shù)據(jù)時,它將發(fā)送一個單字節(jié)數(shù)據(jù)包,其中具有Imagetolcd_defs.h中定義為new_image_flag中的值。因此,如果接收到的數(shù)據(jù)包長度是一個,并且單個字節(jié)具有new_image_flag的值,則微控制器知道新圖像正在途中。它清除了LCD,將new_image_flag傳輸?shù)絇C,并將零加載到NextLineToWrite中,該變量是一個變量,當MicroController接收下一個像素數(shù)據(jù)包時,它保留了要更新的行地址。如果接收到的數(shù)據(jù)包長度為64個字節(jié)而不是一個字節(jié),則數(shù)據(jù)包將帶來實際的像素數(shù)據(jù)。在這種情況下,我們只是將USB_Packet_received標志設置為true; LCD更新完成后,流量控制字節(jié)將發(fā)送。
  當Imagetolcd_main.c中的無限循環(huán)意識到USB_Packet_received已將其設置為true時,它調(diào)用ProcessususBrxPacket():
  void ProcessUSBRxPacket()
  {
  unsigned char n = 0, row, column;
  //copy the received pixel data to the LCD display data arrayfor(row = 0; row < LINES_PER_PACKET; row++){for(column = 0; column < NUM_LINE_DATA_BYTES; column++){LCDDisplayData[row][column] = USBRxPacket[n];n++;}
  }
  //wait until the SPI state variable indicates that the bus is available for a new transferwhile(LCDTxState != IDLE);UpdateLCDLines();
  }
  在這里,我們將像素數(shù)據(jù)傳輸?shù)竭m當?shù)亩S陣列中。在此項目中,lcddisplaydata [] []是4行乘16列:我們?nèi)匀恍枰?6列字節(jié)來容納128位水平數(shù)據(jù),但是我們只需要4行,因為像素數(shù)據(jù)是從64個字節(jié)數(shù)據(jù)包中的PC傳輸?shù)?,?4個字節(jié)除以16個字節(jié)等于4行。更新數(shù)組后,程序等待直到LCD通信接口為空閑,然后調(diào)用UpdatelCdlines()。
  該項目需要對管理SPI轉移到LCD的狀態(tài)機器進行一些更改。以前,我們具有UpdateAlllCdlines()函數(shù),該函數(shù)(您可能會從名稱中猜到)啟動一個過程,該過程更新一個SPI傳輸中的所有LCD線路。但是現(xiàn)在,我們在一個SPI傳輸期間僅更新四行,并且在該過程結束時執(zhí)行了另外兩個任務:

  SCILAB腳本從圖像處理部分開始:

  輸入映像必須是灰度,128 x-128像素.bmp文件。段bythreshold()函數(shù)將圖像從灰度轉換為黑色和白色,因為使用我們的LCD,像素是打開或關閉的 - 允許使用灰色。一系列的BITSET()操作將此圖像數(shù)據(jù)轉換為可以發(fā)送到EFM8并直接傳輸?shù)絃CD的像素數(shù)據(jù)。請注意,像SCILAB這樣的復雜計算應用程序并未針對我們在這里使用的那種尷尬的位置操作進行優(yōu)化。換句話說,上述代碼中的雙循環(huán)塊需要很長時間才能執(zhí)行(例如,運行Windows 8.1的2.5 GHz處理器約23秒)。因此,如果要調(diào)整此代碼以顯示動畫序列,則需要在開始將數(shù)據(jù)發(fā)送到EFM8之前將所有圖像轉換為LCD像素格式。
  SCILAB腳本中的另一個主要部分是通過VCP連接將像素數(shù)據(jù)發(fā)送到EFM8的FO循環(huán):

  使用SLSENDARRAY()函數(shù)將四行像素數(shù)據(jù)轉換為一維數(shù)組,并以單個64字節(jié)數(shù)據(jù)包的形式傳輸。然后,該腳本在發(fā)送接下來的四行像素數(shù)據(jù)之前,先讀取EFM8的單個確認字節(jié)。重要說明:此腳本中對SlreadByte()的調(diào)用為第二個參數(shù),即響應= SlreadByte(efm8port,1)。此“ 1”表示該函數(shù)將阻止,也就是說,直到至少一個字節(jié)到達之前,Scilab都不會做任何事情。這里的優(yōu)勢在于,腳本會盡快運行,因為EFM8發(fā)送確認字節(jié)后,執(zhí)行將繼續(xù)。但是,問題是,如果出現(xiàn)問題,字節(jié)永遠不會出現(xiàn),那么Scilab將陷入昏迷狀態(tài),直到您關閉程序并重新打開程序為止。因此,在調(diào)試階段進行此操作的更好方法是使用Sleep()函數(shù)給EFM8響應時間,然后讀取字節(jié)而不阻止,即SlreadByte(efm8port,0)。
  SCILAB腳本還調(diào)用TIC()和TOC()來測量和顯示傳輸和顯示一個圖像所需的時間。在上面提到的相同的2.5 GHz Windows機器的情況下,該過程僅需約50毫秒,這意味著該系統(tǒng)應該能夠舒適地維持每秒10張圖像的動畫幀速率。

關鍵詞:LCD

版權與免責聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權均屬于維庫電子市場網(wǎng),轉載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關法律責任。

本網(wǎng)轉載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉載時,必須保留本網(wǎng)注明的作品出處,并自負版權等法律責任。

如涉及作品內(nèi)容、版權等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關權利。

LM317LCDR 24+ TI
廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務:
賣家服務:
技術客服:

0571-85317607

網(wǎng)站技術支持

13606545031

客服在線時間周一至周五
9:00-17:30

關注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!