久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 12074|回復: 1
打印 上一主題 下一主題
收起左側

基于單片機MSP430G2553的LCD12864的顯示課程設計報告

[復制鏈接]
跳轉到指定樓層
樓主
ID:267370 發表于 2017-12-26 21:13 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是我最近在做MSP430開發時整理出的一些關于12864的資料,供大家參考。
單片機課程設計報告
基于單片機MSP430G2553的LCD 12864的顯示
專業班級:
學生姓名:
學  號:
指導教師:
設計時間:

一、設計任務與要求

1、在LCD上顯示文字,字符

2、用C語言寫關于MSP430G2553相關的代碼

3、掌握LCD12864的運用方法

二、硬件模塊介紹

1、MSP430芯片

MSP430 是美國Texas Instruments(TI)公司于1996年開始推向市場的超低功耗微處理器。除了超低功耗這一特點外,在MSP430 系列產品中還集成了很多功能模塊,可以應用于各個方面,使得用一片MSP430 芯片就能完成以前要用多片芯片組合才能完成的功能,大大地縮小了產品的體積,并且降低了成本。因此,MSP430 系列一經推出,就受到了業內人士的歡迎。迄今為止,MSP430 已經廣泛應用于各個領域,尤其是便攜式儀器儀表、監測、醫療器械以及汽車電子等領域。

2、LCD12864

(1)概述

帶中文字庫的128×64是一種具有4位/8位并行、2線或3線串行多種接口方式,內部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示模塊;其顯示分辨率為128×64, 內置8192個16×16點漢字,和128個16×8點ASCII字符集.利用該模塊靈活的接口方式和簡單、方便的操作指令,可構成全中文人機交互圖形界面。可以顯示8×4行16×16點陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點。由該模塊構成的液晶顯示方案與同類型的圖形點陣液晶顯示模塊相比,不論硬件電路結構或顯示程序都要簡潔得多,且該模塊的價格也略低于相同點陣的圖形液晶模塊。

(2)基本特性

  • 低電源電壓(VDD:+3.0--+5.5V
  • 顯示分辨率:128×64
  • 內置漢字字庫,提供819216×16點陣漢字(簡繁體可選)
  • 內置 12816×8點陣字符
  • 2MHZ時鐘頻率
  • 顯示方式:STN、半透、正顯
  • 驅動方式:1/32DUTY1/5BIAS
  • 視角方向:6
  • 背光方式:側部高亮白色LED,功耗僅為普通LED1/5—1/10
  • 通訊方式:串行、并口可選
  • 內置DC-DC轉換電路,無需外加負壓
  • 無需片選信號,簡化軟件設計
  • 工作溫度: 0 - +55 ,存儲溫度: -20 - +60

(3)模塊接口說明如表3-5所示:

3-5 LCD12864接口說明

管腳號
管腳名稱
電平
管腳功能描述
1
VSS
0V
電源地
2
VCC
3.0+5V
電源正
3
V0
-
對比度(亮度)調整
4
RS(CS)
H/L
RS=“H”,表示DB7——DB0為顯示數據
RS=“L”,表示DB7——DB0為顯示指令數據
5
R/W(SID)
H/L
R/W=“H”,E=“H”,數據被DB7——DB0
R/W=“L”,E=“H→L”, DB7——DB0的數據被寫到IR或DR
6
E(SCLK)
H/L
使能信號
7
DB0
H/L
三態數據線
8
DB1
H/L
三態數據線
9
DB2
H/L
三態數據線
10
DB3
H/L
三態數據線
11
DB4
H/L
三態數據線
12
DB5
H/L
三態數據線
13
DB6
H/L
三態數據線
14
DB7
H/L
三態數據線
15
PSB
H/L
H:8位或4位并口方式,L:串口方式(見注釋1)
16
NC
-
空腳
17
/RESET
H/L
復位端,低電平有效(見注釋2)
18
VOUT
-
LCD驅動電壓輸出端
19
A
VDD
背光源正端(+5V)(見注釋3)
20
K
VSS
背光源負端(見注釋3)

*注釋1:如在實際應用中僅使用串口通訊模式,可將PSB接固定低電平,也可以將模塊上的J8和“GND”用焊錫短接。

*注釋2:模塊內部接有上電復位電路,因此在不需要經常復位的場合可將該端懸空。

*注釋3:如背光和模塊共用一個電源,可以將模塊上的JA、JK用焊錫短接。

三、方案設計與論證

12864有兩種工作模式

1、方案一

LCD12864的并行模式:

并行模式就是常用的8位數據線,4為控制線。這種方式雖然占用的IO口較多,但是向液晶收發數據較容易實現,數據傳輸速度較快。所以在一些連續顯示多幅圖畫,演示動畫或對顯示的實時性要求較高的場合應該考慮這種方式。其中在并行模式中,在向液晶寫數據或命令前,要進行液晶忙標志判斷 BF,要確定液晶顯示不忙了,才能進行操作。接線方式如圖:

2、方案二

LCD12864的串行模式:

串行模式只用到了兩根線WR,EN于單片機進行通信。這種方式可以大大減少單片機IO口的開銷,適用于IO口資源有限的單片機(如msp430g2553)。但是這種方式實現起來較麻煩,數據的傳輸效率不高。對于一般的文字,簡單圖形的顯示還是可以的。

SCLK:串行同步時鐘線,每操作一位數據都要有一個SCLK跳變沿,而且在這里是上升沿有效。也即是說,每次SCLK由低電平變為高電平的瞬間,液晶控制器將SID上的數據讀入或輸出。

SID:串行數據,每一次操作都由三個字節數據組成,第一個字節向控制器發送命令控制字,告訴控制器接下來是什么操作,若為寫指令則發送11111000

(0xf8),若為若為寫數據則發送11111010(0xfa),若為讀狀態則發送11111100(0xfc),若為讀數據則發送11111110(0xfe)。

第二個字節的高4位為發送指令或數據的高4位,第二個字節的低4位補0.

第三個字節的高4位為發送指令或數據的低4位,第三個字節的低4位補0

接線方式如圖:

綜上,由于MSP430G2553的IO口比較少,所以我選方案二

四、硬件設計

雖然開發板上的電壓有3.8V,但是由于LCD的最佳工作電壓是5V,所以在3.8V工作下的LCD12864并不能正常工作,所以我采用的是外接5V電壓,將IO口輸出的3.8V電壓用74HC04芯片做成的緩沖器轉換成5V,總體設計如下圖:

五、軟件設計

1、main.c程序

  1. #include  "msp430g2553.h"
  2. #include  "lcd.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. void InitSys();
  6. void main(void)
  7. {
  8.        WDTCTL = WDTPW + WDTHOLD;                 // 關閉看門狗
  9.        InitSys();
  10.       Lcd_Init();
  11.        write_com(0x01);
  12.        W_str(1,1,"床前明月光,");
  13.        W_str(1,2,"疑是地上霜。");
  14.        W_str(1,3,"舉頭望明月,");
  15.        W_str(1,4,"低頭思故鄉。");           
  16. }
  17. void InitSys()
  18. {
  19.   if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)//判斷系統的宏是否被刪除                                    
  20.   {
  21.     while(1);//如果刪除程序就停在這里                              
  22.   }
  23.   BCSCTL1 = CALBC1_8MHZ;                  
  24.   DCOCTL = CALDCO_8MHZ;  //設置系統時鐘為8MHZ                 
  25. }
復制代碼

2、lcd.c程序

  1. #include <msp430g2553.h>
  2. #include "lcd.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. /*=============================
  6. #define SID P2.1;
  7. #define CLCLK P2.0;
  8. 接線:LCD12864的5腳接P2.1
  9.       LCD12864的6腳接P2.0
  10.       LCD12864的4引腳直接接VCC

  11. ==============================*/

  12. #define SID_1 P2OUT|=0x02;
  13. #define SID_0 P2OUT&=~0x02;
  14. #define CLK_1 P2OUT|=0x01;
  15. #define CLK_0 P2OUT&=~0x01;
  16. #define CPU_F ((double)8000000)
  17. #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  18. #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

  19. void W_str(uchar x,uchar y,uchar *s);
  20. void write_com(uchar x);
  21. void write_data(uchar x);
  22. void delay(uint z);
  23. void W_8bits(uchar W_bits);
  24. void W_byte(uchar rw,uchar rs,uchar W_data);
  25. void Lcd_Init(void);
  26. void delay(uint z)
  27. {
  28. uint x,y;
  29. for(x=z;x>0;x--)
  30. for(y=240;y>0;y--);
  31. }

  32. void W_8bits(uchar W_bits)
  33. {
  34. uchar i,temp;
  35. for(i=0;i<8;i++)
  36. {
  37. temp=W_bits;
  38. temp<<=i;//將數據每一位依次移到最高位
  39. if((temp&0x80)==0)//判斷每位是否為0,如果是,則SID為0,即寫入數據0
  40. {
  41. SID_0;
  42. delay_us(20);
  43. CLK_1;
  44. delay_us(40);
  45. CLK_0;
  46. delay_us(20);
  47. SID_0;
  48. }
  49. else
  50. {
  51. SID_1;
  52. delay_us(20);

  53. CLK_1;
  54. delay_us(40);

  55. CLK_0;

  56. delay_us(20);

  57. SID_0;
  58. }
  59. }
  60. }
  61. /*
  62. rw=1 則表示讀出
  63. rw=0 則表示輸入
  64. rs=1 則表示寫數據
  65. rs=0 則表示寫命令
  66. W_byte(0,0,x)寫命令x;
  67. W_byte(0,1,y)寫數據y;
  68. */
  69. void W_byte(uchar rw,uchar rs,uchar W_data)
  70. {
  71. uchar H_data,L_data,s_id=0xf8;
  72. if(rw==0)
  73. {
  74. s_id&=~0x04;//第一個字節s_id為oxf8,寫命令
  75. }
  76. else
  77. {
  78. s_id|=0x04;//第一個字節s_id為0xfa,寫數據
  79. }
  80. if(rs==0)
  81. {
  82. s_id&=~0x02;
  83. }
  84. else
  85. {
  86. s_id|=0x02;
  87. }
  88. H_data=W_data;
  89. H_data&=0xf0;//取出高四位
  90. L_data=W_data;
  91. L_data&=0x0f;//取出第四位
  92. L_data<<=4;
  93. /*串口數據一次輸入為三個字節,第一個為控制字,第二個為數據或命令的高四位,第三個為數據或命令的第四位*/
  94. W_8bits(s_id);//寫入控制字
  95. W_8bits(H_data);//寫入數據或命令的高四位
  96. W_8bits(L_data);//寫入數據或命令的第四位

  97. }
  98. void Lcd_Init()
  99. {
  100. P2DIR|=0x03;//P2的低兩位為輸出
  101. CLK_0;
  102. SID_0;

  103. delay_us(5);
  104. W_byte(0,0,0x38);//設置16X2顯示,顯示5X7點陣,8位數據接口
  105. delay_us(5);
  106. W_byte(0,0,0x38);
  107. delay_us(5);
  108. W_byte(0,0,0x0c);//整體顯示開,游標關,反白關
  109. delay_us(5);
  110. W_byte(0,0,0x01);//寫入空格清屏
  111. delay_us(5);
  112. W_byte(0,0,0x02);//清DDRAM
  113. delay_us(5);
  114. W_byte(0,0,0x80);//設定首次顯示位置
  115. delay_us(5);
  116. }

  117. // x代表偏移量
  118. //y代表第幾行
  119. //*S是字符串的指針
  120. void W_str(uchar x,uchar y,uchar *s)
  121. {
  122. switch(y)
  123. {
  124. case 1:W_byte(0,0,0x80+x);break;//0x80是第一行起始位置
  125. case 2:W_byte(0,0,0x90+x);break;//0x90是第二行起始位置
  126. case 3:W_byte(0,0,0x88+x);break;//0x88是第三行起始位置
  127. case 4:W_byte(0,0,0x98+x);break;//0x98是第四行起始位置
  128. default:W_byte(0,0,0x80+x);//否則都當成第一行處理
  129. }
  130. while(*s)
  131. {
  132. W_byte(0,1,*s);
  133. s++;
  134. }
  135. }
  136. void write_com(uchar x)
  137. {
  138. W_byte(0,0,x);
  139. }
  140. void write_data(uchar x)
  141. {
  142. W_byte(0,1,x);
  143. }

復制代碼

3、lcd.h程序
#define uchar unsigned char
#define uint unsigned int
void W_str(uchar x,uchar y,uchar *s);
void write_com(uchar x);
void write_data(uchar x);
void delay(uint z);
void W_8bits(uchar W_bits);
void W_byte(uchar rw,uchar rs,uchar W_data);
void Lcd_Init(void);

六、系統的調試

              剛開始的時候以為3.8V的電壓可以使LCD12864正常工作,結果怎么修改程序都不顯示文字,以為是程序中的時序寫錯了,但是改了還是沒用,又以為是電路接線出錯了,重新接

線后還是沒用,后來才想到可能是電壓不夠,結果外接電源真的有用了。

七、總結

              通過這次設計,我學會了LCD12864的基本工作原理和運用,掌握了一些MSP430單片機的基本運用和編程方法,最重要的是在調試過程中讓我懂得了最什么是都要考慮周全,遇到什么事都不能慌,問題要一個一個解決,不能急,也不能輕易放棄。

八、參考文獻

    [1] 蘇小紅等編著.C語言大學實用教程(第三版).北京:電子工業出版社,2012

    [2] 張晞,王德銀,張晨編著.MSP430 系列單片機實用C 語言程序設計.北京:人民郵電出版社,2005


完整的Word格式文檔51黑下載地址,還附帶了430驅動12864的其他相關資料:
http://m.zg4o1577.cn/bbs/dpj-103116-1.html




評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:30541 發表于 2019-1-2 13:56 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜视频在线免费观看 | 天天搞天天操 | 亚洲精品一区二区三区在线 | 久久高潮 | 欧美精品在线一区 | 午夜影视大全 | 久久lu| 99精品国产一区二区青青牛奶 | 欧美在线a | 国产精品99视频 | 亚洲电影第三页 | 99视频网站 | 久草网址| 欧美一级网站 | 91久久精 | yiren22 亚洲综合 | 国产重口老太伦 | 中文字幕二区 | 夜久久| 99视频在线播放 | 中文字幕在线视频精品 | 一区二区三区欧美在线 | 日韩精品一区二区三区第95 | 日本免费一区二区三区 | 国产一区二区 | 天天操人人干 | 成人夜晚看av | 亚洲欧美在线观看 | 欧美日韩视频在线播放 | 精品国产一区久久 | 欧美成视频 | 国产一区成人 | 97人澡人人添人人爽欧美 | 国产小视频精品 | 成人毛片在线观看 | 日韩一区二区三区视频 | 欧美videosex性极品hd | re久久 | 九九热免费视频在线观看 | 国产成人精品一区二区三区四区 | 人妖一区 |