《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于STM32F103C8T6單片機的LCD顯示系統設計
基于STM32F103C8T6單片機的LCD顯示系統設計
2014年微型機與應用第20期
楊 偉,肖義平
湖北工業大學 電氣與電子工程學院,湖北 武漢 430068
摘要: 基于Keil for ARM集成開發環境,設計了一種以單片機STM32F103C8T6為核心的LCD12864液晶顯示系統,可以在屏幕任意位置實現字符顯示和圖形顯示,同時實現了貪吃蛇游戲的功能。該系統操作便捷,界面友好,具有功耗低、速度快、性價比高等優點。
Abstract:
Key words :

  摘  要: 基于Keil for ARM集成開發環境,設計了一種以單片機STM32F103C8T6為核心的LCD12864液晶顯示系統,可以在屏幕任意位置實現字符顯示和圖形顯示,同時實現了貪吃蛇游戲的功能。該系統操作便捷,界面友好,具有功耗低、速度快、性價比高等優點。

  關鍵詞: STM32F103C8T6;LCD12864;貪吃蛇游戲

0 引言

  隨著社會的不斷發展,人們對終端顯示器的要求越來越高,體積小、重量輕、功耗低、清晰度高的LCD顯示器無疑成為大家心中理想的選擇[1]。與傳統的CRT相比,基于單片機的LCD顯示系統具有硬件結構簡單、控制方便、成本低等優點,在現代嵌入式系統中已得到廣泛的運用。本文設計了一種基于單片機STM32F103C8T6和LCD12864的液晶顯示系統,可以實現字符、圖形的顯示,并在此基礎上設計了一個貪吃蛇游戲實例。

1 系統硬件設計

  LCD顯示系統主要由單片機、LCD顯示模塊、電源模塊、4×4矩陣鍵盤、通信接口電路組成。系統方框圖如圖1所示。

001.jpg

  系統電源部分可以使用5 V電源端口供電,再通過3.3 V穩壓芯片ASM1117-3.3得到單片機與LCD顯示模塊所需電源。單片機采用ST公司的芯片STM32F103C8T6,4×4矩陣鍵盤作為系統的輸入設備,采用LCD12864液晶顯示模塊作為系統的顯示部分。單片機系統通過處理鍵盤輸入數據后,根據不同的情況對顯示屏發出不同的操作指令。通信接口電路主要是由芯片PL2303構成,它的功能主要是將電腦的USB接口轉換為串口,同時還將PC的邏輯電平轉換為與單片機系統相同的CMOS電平,方便程序的燒寫以及與上位機的通信。

  1.1 Keil MDK和單片機STM32F103C8T6簡介

  Keil MDK是德國Keil公司為基于Cortex-M、ARM7、ARM9等系列處理器提供的一款集成開發環境,支持程序的編輯、編譯、鏈接以及在線調試等功能,可以自動配置啟動代碼,簡單易學,性能優越,能滿足大多數嵌入式應用[2]。

  STM32F103C8T6是一款基于ARM 32位的Cortext M3內核的單片機,2.0~3.6 V的寬電壓供電范圍,CPU工作頻率最大可達72 MHz,具有單周期的乘法指令和硬件除法,以及優先級可編程的中斷系統。同時它還具有64 KB的Flash存儲器與20 KB的SRAM存儲器,另外還集成了非常豐富的片內外設,如看門狗、定時器、GPIO口、DMA控制器、ADC、UART、SPI接口、IIC接口等,具有成本低、速度快、性價比高等優點。

  1.2 液晶LCD12864顯示模塊

  LCD12864液晶屏的數據接口是串行的,工作電壓為2.8~5.5 V,像素為128×64,顯示顏色為黑白色,背光顏色為藍色,不帶字庫。模塊內部采用的控制器為ST7565P,功耗非常低,在省電模式下的工作電流最大僅為5 A,顯示模塊僅有8個引腳接口,占用主控制器的I/O數量少。LCD12864引腳說明如表1所示。

004.jpg

  1.3 LCD12864與單片機STM32F103C8T6的硬件連接

  單片機STM32F103C8T6與LCD顯示模塊的硬件連接非常簡單,如圖2所示。LCD12864引腳編號為1~5的控制端口可以直接與STM32F103C8T6單片機的GPIO口相連,第8引腳是LCD的背光電源端口,通過單片機的一個I/O口控制三極管的導通來控制背光電源的通斷,從而節省功耗[3]。

002.jpg

2 系統軟件設計

  系統軟件設計主要包括LCD初始化、寫數據、寫命令,以及畫點、字符顯示等程序設計。液晶顯示模塊正常工作前,需要對其進行初始化,主要包括復位液晶、確定顯示對比度、偏壓比等參數,然后才能實現字符、圖形以及其他的顯示功能。在向液晶顯示模塊寫入數據或者命令時,一定要注意寫入的時序,只有嚴格地按照時序編寫驅動程序才能正常工作。設計程序時,為了方便移植,可以將相關引腳的操作用宏封裝起來,如將片選引腳拉低的操作可以用宏LCD_CS_0()定義[4-5]。寫數據命令的功能函數如下:

  void LCD12864_WriteCommand(uint8 Cmd)

  {……

  LCD_CS_0();//打開片選

  LCD_A0_0();//選擇寫命令

  LCD_SCLK_0();//時鐘線置低

  for(i=0;i<8;i++){

  if(Cmd &0x80)//如果輸出為1

  LCD_SI_1();//SI數據線輸出為1

  else

  LCD_SI_0();//SI數據線輸出為0

  LCD_SCLK_1();//寫入數據

  Dat<<=1;

  LCD_SCLK_0();//置低SCLK時鐘線

  } LCD_CS_1();//關閉片選

  }

  寫數據功能函數void LCD12864_WriteData(uint8 Dat)實現方法與寫命令功能函數相同,只是打開片選后,選擇的是寫數據LCD_A0_1()。

  在設計LCD液晶驅動程序時,最基本的功能就是在屏幕的任意位置顯示一個點,然后在此基礎上實現更復雜的功能。但是每次寫入的數據都包含了8個點的信息,而且該LCD顯示模塊沒有讀控制端口,不能通過讀數據的命令了解其他7個點的狀態,這樣就不能達到最終的目的。為了解決這個問題,可以在單片機的內存區開辟一個數據空間,來記錄顯示器上每個點的顯示情況,代碼如下:

  static uint8 LCD_RAM[128*8]={0};//開辟顯示緩沖區

  void LCD12864_DrawPoint(uint8 x,uint8 y,uint8 Point_Flag)

  {

  if(Point_Flag==0)

  {LCD_RAM[x+128*(7-(y>>3))]&=(~(1<<(7-(y&0x07))));}

  if(Point_Flag==1)

  {LCD_RAM[x+128*(7-(y>>3))]|=(1<<(7-(y&0x07)));}LCD12864_WriteCommand(0xB0+(7-((y>>3)&0x0F)));//寫頁地址

  LCD12864_WriteCommand(0x10+((x>>4)&0x0F));

  //寫列地址,高低字節兩次寫入

  LCD12864_WriteCommand(0x00+(x&0x0F));

  LCD12864_WriteData(LCD_RAM[x+128*(7-(y>>3))]);

  //寫入數據

  }

  因為液晶模塊未帶字庫,在字符顯示前,需要將其字模存入單片機的程序存儲空間中,然后在任意坐標顯示一個點的基礎上,實現字符的顯示。8×16字符顯示的驅動程序如下:

  void LCD12864_PutChar8x16(uint32 Char_x,uint32 Char_y,uint8 c)

  {……

  Temp=Font8x16[c*16+i];//獲取字模

  for(j=0;j<8;j++)

  {if(Temp&0x80)

  {LCD12864_DrawPoint(Char_x+j,Char_y-i,1);}

  else{LCD12864_DrawPoint(Char_x+j,Char_y-i,0);}

  Temp<<=1;}}}

3 實例設計

  以單片機STM32F103C8T6作為控制核心,在LCD12864驅動程序的基礎上,實現了貪吃蛇游戲的功能。貪吃蛇游戲程序主要分為3個子程序模塊,即鍵盤掃描模塊、LCD12864驅動模塊和貪吃蛇游戲數據處理模塊。貪吃蛇程序流程圖如圖3所示。

003.jpg

  游戲中的食物和蛇可以看作兩個不同的對象,它們的屬性可以用兩個結構體變量來描述,然后根據游戲功能將整個大模塊合理地劃分為各個子模塊,并編寫相應的功能函數,供主模塊函數調用。在設計程序時,定義蛇的最長長度為15,蛇運動區域的長為20個單位,寬為15個單位,即橫坐標的坐標范圍為1~20,縱坐標的坐標范圍為1~15。貪吃蛇游戲中定義了食物結構體和蛇結構體變量。食物結構體定義為:

  struct{uint8 X;uint8 Y;}Food;

  蛇體的最大長度宏定義為:

  #define SNAKE_LONG_MAX 15

  蛇結構體變量中定義了蛇體長度、蛇的等級和蛇的分數,具體定義為:

  struct{

  uint8 X[SNAKE_LONG_MAX_];

  uint8 Y[SNAKE_LONG_MAX];

  uint8 Long;

  uint8 Level;

  uint16 Score;}Snake;

  顯示無符號整形數據功能函數定義為:

  void LCD12864_PutUintNumber(uint32 Num_x,uint32Num_y,uint32 Uint_Num,uint8 Num_N)

  顯示或者熄滅一個蛇體單位功能函數定義為:

  void DiaplaySnakePoint(uint8 x,uint8 y,uint8 Point_Stu)

  判斷蛇是否死亡的程序如下:

  if((Snake.X[0]<1)||(Snake.X[0]>20)||(Snake.Y[0]<1)||(Snake.Y[0]>15))

  {Game_Fail();}

  for(i=4;i<Snake.Long;i++){if((Snake.X[0]==Snake.X[i])&&(Snake.Y[0]==Snake.Y[i])){Game_Fail();}}

  判斷蛇是否吃到食物程序如下:

  if((Snake.X[0]==Food.X)&&(Snake.Y[0]==Food.Y))

  {Snake.Long++;//蛇身長度加1

  Snake.Score+=10;//得分數增加

  LCD12864_PutUintNumber(96,63-48,Snake.Score,4);

  //屏幕上更新分數

  Snake.X[Snake.Long-1]=Snake_End_x;

  Snake.Y[Snake.Long-1]=Snake_End_y;

  DiaplaySnakePoint(Snake_End_x,Snake_End_y,1);

  //蛇體向后增長1個單位

  Put_Food();//放置食物

  }Delayms(3000-300*Snake.Level);//根據蛇體等級延時

  在貪吃蛇游戲的程序設計中,放置食物的程序會涉及如何獲取隨機數的問題,為了增加游戲的隨機性,本次設計不采用偽隨機數產生的方法,而是利用單片機的AD采樣引腳在懸空的情況下采樣,獲得的AD值作為隨機種子,然后通過一系列的運算來得到隨機數,經過實踐得知,此種方式得到的隨機數更真實,效果很好。食物放置程序如下:

  void Put_Food(void){…..

  AD_Temp=ADC_ConvertedValue;//獲取隨機種子

  Food.X=(AD_Temp%20)+1;

  //隨機獲取食物橫坐標(1~20)

  Food.Y=(AD_Temp%15)+1;

  //隨機獲取食物縱坐標(1~15)

  ……

  DiaplaySnakePoint(Food.X,Food.Y,1);//顯示食物

  }

4 結論

  STM32F103C8T6是一款高性能的單片機,LCD12864硬件接口簡單,所占用單片機的I/O口資源非常少,單片機有足夠的硬件資源供其他外設使用,顯示系統可以作為其他嵌入式系統的一部分,運用于不同的顯示場合;系統的程序設計采用的是C語言,其移植性非常好,模塊化的設計思想可以在系統中靈活地擴展其他功能,滿足不同的顯示要求。

參考文獻

  [1] 劉金星,李洪文.基于高速單片機的液晶顯示模塊控制[J].液晶與顯示,2011,26(1):88-91.

  [2] 韓敬海,王蕊.Cortext-M3開發技術與實現[M].西安:西安電子科技大學出版社,2013.

  [3] 陳楊楊,陳梅.基于PIC18F458單片機的LCD顯示[J].儀表技術,2005(4):52-53.

  [4] 武俊鵬,張國印,姚愛紅,等.基于ARM的嵌入式系統設計實驗與實踐教程[M].北京:清華大學出版社,2011.

  [5] 石紅曉,吳光敏.基于Nios II處理器的TFT-LCD圖形顯示設計[J].微型機與應用,2010,29(18):37-39.


此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美大秀在线观看| 欧美日韩的一区二区| 国产精品亚洲综合久久| 亚洲在线播放电影| 国产日韩成人精品| 国产九色精品成人porny| 国产伦精品一区二区三区免费迷| 久久久噜久噜久久综合| 亚洲视频电影图片偷拍一区| 久久精品国产久精国产一老狼| 国产精品www色诱视频| 午夜欧美不卡精品aaaaa| 狼狼综合久久久久综合网| 亚洲毛片视频| 亚洲精品久久久久久下一站| 久久久国产亚洲精品| 亚洲一区二区三区在线观看视频| 久久综合国产精品| 久久久一本精品99久久精品66| 久色婷婷小香蕉久久| 最新日韩在线| 激情av一区二区| 亚洲精品一区二区三区四区高清| 欧美经典一区二区| 亚洲一区国产一区| 中日韩美女免费视频网站在线观看| 久久免费高清视频| 狼人社综合社区| 亚洲精品乱码久久久久久久久| 国产综合18久久久久久| 99re热这里只有精品视频| 一区二区三区av| 尤物视频一区二区| 欧美xxx在线观看| 久久精品72免费观看| 蜜桃av一区| 久久精品一区| 国产精品成人免费精品自在线观看| 国产亚洲欧美aaaa| 国产精品天天看| 国产九九精品视频| 亚洲一二三区在线观看| 久久久久久久精| 蜜桃av一区二区在线观看| 国产精品毛片在线| 激情国产一区二区| 一区二区三区免费观看| 99视频超级精品| 欧美激情一区二区久久久| 国产精品99久久久久久久久| 欧美日韩一区二区三区免费| 欧美亚洲专区| 国产日韩视频一区二区三区| 欧美三级午夜理伦三级中文幕| 亚洲精品久久久久久一区二区| 久久精品中文字幕一区二区三区| 亚洲国内在线| 亚洲一区二区三区四区视频| 欧美国产日韩一区| 国产视频在线观看一区| 亚洲女女女同性video| 亚洲免费高清视频| 欧美一区三区二区在线观看| 亚洲欧美精品在线| 久久久久综合一区二区三区| 国产色综合天天综合网| 亚洲人成在线影院| 国产伦精品一区二区三区在线观看| 黑丝一区二区三区| 亚洲成人资源| 国产精品久久午夜| 久久九九免费| 国产一区二区三区在线观看网站| 好看不卡的中文字幕| 久久久之久亚州精品露出| 国产精品自拍视频| 欧美激情一二区| 日韩午夜激情| 欧美一区日韩一区| 在线亚洲欧美视频| 亚洲免费电影在线观看| 一区二区三区在线视频播放| 国产偷久久久精品专区| 欧美激情国产精品| 欧美日韩精品欧美日韩精品| 亚洲电影免费在线观看| 欧美日韩久久精品| 亚洲国产一区二区三区高清| 国产亚洲一区精品| 国产精品五月天| 欧美偷拍一区二区| 亚洲视频免费观看| 亚洲视频在线观看一区| 亚洲精品乱码久久久久久| 国产在线精品一区二区夜色| 国产一区二区成人久久免费影院| 美女精品国产| 亚洲电影免费观看高清完整版在线| 欧美激情国产精品| 欧美三日本三级少妇三2023| 中文日韩在线| 久久精品电影| 亚洲精品国精品久久99热一| 亚洲午夜影视影院在线观看| 亚洲精品乱码久久久久久按摩观| 国产精品久久久久影院亚瑟| 中文在线资源观看视频网站免费不卡| 亚洲视频自拍偷拍| 亚洲毛片av在线| 欧美日韩在线一区二区三区| 免费亚洲电影| 久久国产精品久久国产精品| 亚洲一本视频| 欧美激情网站在线观看| 美女网站在线免费欧美精品| 国产精品高潮呻吟久久| 亚洲欧洲偷拍精品| 日韩视频中文字幕| 久久蜜桃香蕉精品一区二区三区| 欧美一区三区三区高中清蜜桃| 午夜在线观看欧美| 欧美国产精品久久| 亚洲国产老妈| 亚洲激情啪啪| 亚洲无线一线二线三线区别av| 亚洲欧美在线一区二区| 欧美乱大交xxxxx| 99国产一区二区三精品乱码| 蜜桃精品久久久久久久免费影院| 久久久精品国产免费观看同学| 另类成人小视频在线| 亚洲老板91色精品久久| 亚洲欧美综合国产精品一区| 久久综合给合| 99视频在线观看一区三区| 欧美天堂亚洲电影院在线观看| 亚洲欧美第一页| 一区二区三区欧美| 欧美日韩性视频在线| 欧美精品亚洲| 激情久久综艺| 国产麻豆9l精品三级站| 亚洲黑丝在线| 欧美视频中文在线看| 一区二区三区日韩精品| 国产伦精品一区二区三区视频黑人| 国产精品免费看片| 久久婷婷国产综合国色天香| 欧美日韩一卡二卡| 国产欧美韩日| 亚洲人成人一区二区在线观看| 久久久久欧美精品| 国产日韩在线一区二区三区| 欧美综合第一页| 久久偷窥视频| 精品动漫一区二区| 亚洲高清不卡一区| 亚洲黄网站黄| 欧美激情一区二区三区高清视频| 亚洲精品国精品久久99热| 久久香蕉精品| 欧美在线关看| 欧美日韩视频在线一区二区观看视频| 国产精品私拍pans大尺度在线| 亚洲精品在线二区| 国产自产女人91一区在线观看| 亚洲国产精品悠悠久久琪琪| 欧美一区二区在线视频| 欧美日韩在线视频一区二区| 久久狠狠一本精品综合网| 美女主播精品视频一二三四| 国产日本精品| 先锋影院在线亚洲| 亚洲午夜电影| 久久精品国产96久久久香蕉| 国产精品久久久久av| 麻豆精品视频在线| 国产区精品在线观看| 亚洲视频一区二区| 久久久噜噜噜久久人人看| 精品成人一区| 激情文学综合丁香| 夜夜嗨av色一区二区不卡| 亚洲激情成人网| 欧美自拍偷拍午夜视频| 欧美日韩综合久久| 欧美黄色免费网站| 亚洲美女91| 国产精品v欧美精品v日本精品动漫| 欧美四级在线观看| 亚洲桃色在线一区| 国产精品国色综合久久| 国产亚洲一区二区三区在线观看| 久久麻豆一区二区| 韩国成人精品a∨在线观看| 国产精品久久久久久久久久免费| 国产精品美女主播| 亚洲第一福利视频| 亚洲在线一区二区| 欧美精品亚洲一区二区在线播放| 伊人伊人伊人久久| 亚洲日本成人在线观看| 亚洲看片网站| 久久精品国产99| 国产在线精品二区| 欧美日韩亚洲高清一区二区| 欧美日韩在线播放三区| 国产精品国产三级国产普通话99| 亚洲一区二区日本| 久久亚洲精品中文字幕冲田杏梨| 国产精品毛片在线| 欧美日韩激情网| 蜜桃av久久久亚洲精品| 香蕉久久夜色精品| 久久精品99国产精品| 亚洲性感激情| 国产一区二区| 亚洲欧美在线高清| 国产精品久久久久aaaa| 国产视频一区在线观看一区免费| 日韩视频不卡中文| 韩国成人福利片在线播放| 欧美高清视频www夜色资源网| 一区视频在线播放| 一本久道久久综合婷婷鲸鱼| 91久久久久久久久久久久久| 国产精品国产三级国产| 国产亚洲综合精品| 99视频一区二区| 国产精品第三页| 久久精品99国产精品| 影音先锋中文字幕一区| 久久青草福利网站| 欧美国产专区| 国产精品成人观看视频国产奇米| 先锋影音久久| 久久国产视频网站| 日韩网站免费观看| 一区二区免费在线视频| 99视频日韩| 免费成人av在线| 欧美国产日韩视频| 国产伦精品一区二区三区免费迷| 在线日韩中文字幕| 久久精品亚洲乱码伦伦中文| 亚洲国产精品久久| 欧美顶级艳妇交换群宴| 嫩草成人www欧美| 欧美日韩国产在线播放| 亚洲视频免费看| 麻豆av一区二区三区| 欧美69视频| 亚洲激情欧美| 欧美国产激情二区三区| 久久伊人精品天天| 免费成人毛片| 亚洲美女诱惑| 西西人体一区二区| 欧美韩日亚洲| 91久久精品视频| 欧美国产第二页| 欧美日韩国产成人在线91| 狠狠狠色丁香婷婷综合激情| 欧美特黄a级高清免费大片a级| 久久久久亚洲综合| 午夜国产一区| 欧美日韩在线免费视频| 国产精品一区一区三区| 在线播放中文一区| 久久精品成人欧美大片古装| 亚洲福利视频二区| 欧美久久久久久久久久| 久久夜色精品国产欧美乱极品| 亚洲精品在线视频观看| 国产精品美女久久久| 美女日韩欧美| 久久久噜噜噜久久久| 国产精品久久九九| 久久网站免费| 欧美视频在线观看一区二区| 欧美bbbxxxxx| 欧美在线精品免播放器视频| 亚洲午夜av在线| 亚洲精选国产| 男人的天堂成人在线| 亚洲精品资源美女情侣酒店| 亚洲电影欧美电影有声小说| 国产亚洲毛片在线| 亚洲自拍偷拍一区| 亚洲美女毛片| 永久免费精品影视网站| 一区二区三区欧美亚洲| 国产精品成人播放| 欧美亚洲一区在线| 亚洲性感美女99在线| 午夜欧美大片免费观看| 99re66热这里只有精品3直播| 欧美高清视频在线观看| 亚洲视频二区| 国产日韩欧美综合在线| 在线观看日产精品| 亚洲色图在线视频| 欧美日韩国产亚洲一区| 久久久久久久91| 99re66热这里只有精品3直播| 亚洲在线黄色| 亚洲欧美美女| 国产一区二区三区黄| 午夜精品久久久久久久久久久久| 亚洲无线一线二线三线区别av| 免费人成精品欧美精品| 欧美日韩一区综合| 夜夜夜精品看看| 亚洲人线精品午夜| 国产精品高潮呻吟久久av无限| 狠久久av成人天堂| 最新亚洲一区| 香蕉亚洲视频| 亚洲欧美另类综合偷拍| 久久久久久**毛片大全| 久久伊人精品天天| 久久久噜噜噜久久人人看| 久久精品99国产精品日本| 久久国产欧美日韩精品| 国精产品99永久一区一区| 9久草视频在线视频精品| 午夜久久久久久久久久一区二区| 欧美人与性动交a欧美精品|