我們都知道,液晶顯示已經深入我們的日常的生活之中,液晶顯示器的英文名:lcd,而它經常被用於顯示動畫,比如影視,在工業上,lcd被經常用於狀態的顯示視窗。
對於液晶的控制,我們第一步需要知道液晶的構造,液晶全稱是「液態晶體」,介於固態和液態之間,我們一般常用的液晶形態是向列型液晶,分子形狀為細長棒形,或者稱之為桿狀。在不同電流電場的作用下,液晶分子會做規則旋轉呈90度排列。即在上下兩片玻璃之間旋轉,這樣就會改變透射率和反射率。
第二步就需要知道1602顯示模組的介面。本次的1602液晶顯示之所以叫1602,是因為它可以顯示2行,每行顯示16個點陣字元。再仔細的分下去就是乙個點陣字元的大小為5*8點陣的圖形字元(你可以仔細數一下液晶顯示屏)。它帶有字型檔,能顯示ascii字元。下圖是1602lcd模組的顯示圖:
對於1602lcd的引腳說明:
v0:接可調電阻,可以調節液晶顯示的對比度(一般俗指的就是亮度),若直接接地,對比度最高。
rs:資料或者命令的選擇端,通俗的講就是資料的讀寫和指令的寫入。當微控制器要往lcd模組寫指令的時候,應使rs為低電平(從**下達指令給地方,地方要擺好低姿態),同樣當微控制器從lcd模組讀取狀態時,rs也為低電平(從**收取地方報告時,地方要以低姿態上書)。但是當微控制器要寫入資料給lcd時,應使rs為高電平(地方要高調的完成**下達的年度計畫)。微控制器一般不會用於對lcd讀取資料。
r/w:讀寫控制端。r/w為高電平時,表示讀;r/w為低電平時,表示寫(地方放低姿態)。
e:lcd模組的使能訊號控制端。
微控制器需要通過rs,rw和e這三端來控制lcd模組。
d0-d7:8位資料匯流排,三態雙開(高電平狀態、低電平狀態、高阻狀態[既懸空])
blk:需要背光時,bla串接乙個限流電阻後接vcc,blk接地
blk:背光接地。
寫指令 輸入:rs=l,r/w=l,e=下降沿脈衝,db0-db7=指令碼
輸出:無
讀狀態 輸入:rs=l,r/w=h,e=h(l為低電平,h為高電平),
輸出:db0-db7=狀態字
寫資料 輸入:rs=h,r/w=l,e=下降沿脈衝,db0-db7=資料
輸出:無
讀資料 輸入:rs=h,r/w=h,e=h(l為低電平,h為高電平),
輸出:db0-db7=資料
對於相關的指令碼,可以通過lcd資料手冊查詢初始lcd的狀態設定,既通過設定指令碼(8個指令碼d0-d7)來設定其狀態,可以通過替換程式當中的lcd初始化中的小括號裡面的16進製制數值改變初始狀態。
一般來說:在lcd模組內部頻率為270khz(一些廠家為250khz),而大部分的指令執行時間需要37us(40us)左右,只有清屏和ddram資料位址指標ac清零(或者說歸位)指令執行時間需要1.52ms(1.64ms)左右,因此延時值可以取大點如5ms,保證操作可靠,以滿足要求。
下面咱們就程式來說一下:
lcddisplay.c
#include"stm32f10x_heads.h"
//write_command_lcm對lcd1602寫指令
voidwrite_command_lcm(u8 com)
gpio_resetbits(gpiod,gpio_pin_5);//rw=0,寫操作
gpio_resetbits(gpiod,gpio_pin_4);//rs=0,指令
gpio_write(gpiod,com);
gpio_resetbits(gpiod,gpio_pin_6);//e=0,形成寫脈衝
delay_nms(5);
gpio_setbits(gpiod,gpio_pin_6); //e=0,形成寫脈衝
delay_nms(5);
gpio_resetbits(gpiod,gpio_pin_6); //e=0,下降沿寫
//write_data_lcm對lcd1602寫資料
void write_data_lcm(u8info)
gpio_resetbits(gpiod,gpio_pin_5);//rw=0,寫操作
gpio_resetbits(gpiod,gpio_pin_6);//e=0,形成寫脈衝
gpio_write(gpiod,info);
gpio_setbits(gpiod,gpio_pin_4);//rs=1,指令
delay_nms(5);
gpio_setbits(gpiod,gpio_pin_6); //e=1,形成寫脈衝
delay_nms(5);
gpio_resetbits(gpiod,gpio_pin_6); //e=0,下降沿寫
//lcm_init(),對lcd1602初始化
voidlcm_init(void)//lcm初始化
write_command_lcm(0x38);//顯示模式設定
write_command_lcm(0x08);//關閉顯示
write_command_lcm(0x01);//顯示清屏
write_command_lcm(0x06);//顯示游標移動位置
write_command_lcm(0x0c);//顯示開及游標設定
// set_xy_lcm() 對lcd1602設定顯示座標位置,既開始顯示資料時的位置
voidset_xy_lcm(unsigned char x,unsigned char y)
unsigned char address;
if(x==0) //在lcd的顯示屏的第一行顯示資料
address=0x80+y;
if(x==1) //在lcd的顯示屏的第二行顯示資料
address=0xc0+y;
write_command_lcm(address);
//display_list_char()按指定的位置顯示一串字元
voiddisplay_list_char(unsigned char x,unsigned char y,unsigned char *s)
set_xy_lcm(x,y);
while(*s)
write_data_lcm(*s)
s++;
//主程式執行
int main()
lcm_init();
display_list_char(0,0,"fo.xi.90s");
display_list_char(1,0,"guan,zhu,wo");
while(1);
下面是lcd的.h檔案
#ifndef __lcd_h
#define __lcd_h
#include"sys.h"
#define rspcout(6)
#define enpcout(8)
void write_command_lcm(u8info);
void write_data_lcm(u8info);
void lcm_init (void);
需要將上面的程式慢慢看一下,方可與之前所描述的文字相對應,進行理解,可能說的有一些錯誤的地方,希望能提醒批改。
2 5 字元型資料(字元)
字元型資料就是字元。字元型資料是用單引號括起來的乙個字元。例如 a b 都是合法字元型資料。在c語言中,字元型資料有以下特點 轉義字元是一種特殊的字元。轉義字元以反斜線 開頭,後跟乙個或幾個字元。轉義字元具有特定的含義,不同於字元原有的意義,故稱 轉義 字元。例如,在前面各示例中printf函式的格...
GB18030字元編碼格式和點陣字型檔
中國國bai家標準gb2312就是簡體中文字符集 台灣計算機界使用的big5碼是繁體字中文字符集 日本的jis x0208標準是日文漢字字符集 南韓的ks c5601是南韓漢字字符集。ansi 美國國家標準學會 推出了一種雙位元組編碼的標準,將上述三國四方的字符集加以統一,稱為 ansi 編碼。在簡...
1145 字串p型編碼
給定乙個完全由數字字元 0 1 2 9 構成的字串str,請寫出str的p型編碼串。例如 字串122344111可被描述為 1個1 2個2 1個3 2個4 3個1 因此我們說122344111的p型編碼串為1122132431 類似的道理,編碼串101可以用來描述1111111111 0000000...