標(biāo)題: LCD1602 2×16 字符型液晶驅(qū)動(dòng)程序的研究與試寫 [打印本頁(yè)]
作者: wudawei 時(shí)間: 2014-12-31 00:15
標(biāo)題: LCD1602 2×16 字符型液晶驅(qū)動(dòng)程序的研究與試寫
這段時(shí)間放假,因此終于有時(shí)間來(lái)做些小東西了,最近準(zhǔn)備做一個(gè)恒溫烙鐵,要用到LCD液晶,由于以前買了一個(gè)一直沒(méi)用過(guò),所以在液晶模塊編程方面的經(jīng)驗(yàn)為0.剛好了,今天花了半天的時(shí)間研究終于有了研究成果。
本人研究步驟如下:
1、翻箱底,找出多年前買的液晶模塊。
2、查詢模塊的數(shù)據(jù)手冊(cè)(datasheet),確定信號(hào)引腳
3、根據(jù)手冊(cè)信息建立供電電路連接和數(shù)據(jù)信號(hào)的鏈接
4、閱讀模塊手冊(cè)中的時(shí)序操作,編寫出讀寫底層函數(shù)
5、閱讀命令控制字描述,確定控制字?jǐn)?shù)值
6、參考網(wǎng)絡(luò)上其他人的程序,驗(yàn)證自己的閱讀結(jié)果是否有方向性錯(cuò)誤
7、編寫測(cè)試程序,讓液晶模塊顯示出想要顯示的數(shù)值、
以下即為研究結(jié)果。
- #include <reg51.h>
- sbit rs=P3^3;//指令數(shù)據(jù)選擇
- sbit rw=P3^4;//讀寫選擇
- sbit clk=P3^5;//使能脈沖
- unsigned char code Code1[]="0123456789ABCDEF";//文字?jǐn)?shù)組
- sbit clear = P2^0;//清屏按鈕
- sbit key1 = P2^1;//寫第一行按鈕
- sbit key2 = P2^2;//寫第二行按鈕
- sbit key3 = P2^3;//顯示模式變更測(cè)試按鈕
- void delay2ms()//2064周期延時(shí)
- {
- unsigned char temp1;
- while(--temp1);
- while(--temp1);
- while(--temp1);
- while(--temp1);
- }
- void check_busy()//忙檢測(cè)
- {
- unsigned char busy;//臨時(shí)字節(jié)
- do
- {
- rs=0;//選擇寄存器
- rw=1;//讀取
- clk=1;//LCD將數(shù)據(jù)放到總線
- busy=P1;//讀入總線數(shù)據(jù)
- clk=0;//關(guān)閉總線
- busy=busy&0x80;//保留最高位
- }while(busy);//判斷是否為忙
- }
- void instructions(unsigned char INS)//寫指令函數(shù)
- {
- check_busy();//寫之前檢測(cè)忙
- rs=0;//選擇指令寄存器
- rw=0;//寫操作
- clk=1;//準(zhǔn)備下降沿
- P1=INS;//數(shù)據(jù)放到總線上
- clk=0;//下降沿,數(shù)據(jù)寫入LCD
- }
- void write_data(unsigned char dat)//寫數(shù)據(jù)函數(shù)
- {
- check_busy();//寫之前檢測(cè)忙
- rs=1;//選擇數(shù)據(jù)寄存器
- rw=0;//寫操作
- clk=1;//準(zhǔn)備下降沿
- P1=dat;//數(shù)據(jù)放到總線上
- clk=0;//下降沿,數(shù)據(jù)寫入LCD
- }
- void lcd_clear()//清除顯示函數(shù)
- {
- instructions(0x01);//清除顯示
- delay2ms();//清屏后,按手冊(cè)至少應(yīng)延時(shí)1.53ms
- }
- void lcd_init()
- {
- rw=0;//寫操作
- instructions(0x38);//設(shè)置顯示模式為2行,16字符,5×8點(diǎn)陣
- delay2ms();//按手冊(cè)應(yīng)至少延時(shí)39us,但由于執(zhí)行次數(shù)不多,統(tǒng)一使用2ms延時(shí)
- instructions(0x0f);//設(shè)置輸入模式為8位數(shù)據(jù)總線,光標(biāo)增量移動(dòng),顯示不移位
- delay2ms();//按手冊(cè)應(yīng)至少延時(shí)39us,但由于執(zhí)行次數(shù)不多,統(tǒng)一使用2ms延時(shí)
- instructions(0x06);//開顯示,關(guān)閉光標(biāo),不閃爍
- delay2ms();//按手冊(cè)應(yīng)至少延時(shí)39us,但由于執(zhí)行次數(shù)不多,統(tǒng)一使用2ms延時(shí)
- }
- void main()
- {
- unsigned char m;//輔助尋址指針變量
- lcd_init();//LCD初始化
- while(1)
- {
- if(!key1)//判斷按鍵是否按下
- {
- instructions(0x80+0x00);//寫入顯示緩沖區(qū)起始地址為1行1列
- delay2ms();//按手冊(cè)應(yīng)至少延時(shí)39us,但由于執(zhí)行次數(shù)不多,統(tǒng)一使用2ms延時(shí)
- for(m=0;m<16;m++)//將預(yù)先定義好的字符連續(xù)發(fā)送到LCD
- {
- write_data(Code1
- ????);//通過(guò)輔助變量查詢數(shù)組并寫入LCD
- }
- }
- if(!key2)//判斷按鍵是否按下
- {
- instructions(0x80+0x40);//寫入顯示緩沖區(qū)起始地址為2行1列
- delay2ms();//按手冊(cè)應(yīng)至少延時(shí)39us,但由于執(zhí)行次數(shù)不多,統(tǒng)一使用2ms延時(shí)
- for(m=0;m<16;m++)//將預(yù)先定義好的字符連續(xù)發(fā)送到LCD
- {
- write_data(Code1
- ??);//通過(guò)輔助變量查詢數(shù)組并寫入LCD
- }
- }
- if(!clear)//判斷按鍵是否按下
- {
- lcd_clear();//調(diào)用清屏函數(shù)
- }
- if(!key3)//判斷按鍵是否按下
- {
- instructions(0x0c);//改變顯示模式
- delay2ms();//按手冊(cè)應(yīng)至少延時(shí)39us,但由于執(zhí)行次數(shù)不多,統(tǒng)一使用2ms延時(shí)
- }
- }
- }
復(fù)制代碼
作者: xyz1015231411 時(shí)間: 2015-1-28 12:23
不錯(cuò)值得學(xué)習(xí)
作者: mybigapple 時(shí)間: 2015-3-7 20:02
編譯燒錄試驗(yàn)。
在按鈕控制下倆行咋都顯示“j”?
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
久草热播
|
涩涩导航|
久久久久99|
国产精品不卡
|
韩三级在线观看
|
久久神马
|
日韩欧美国产一区二区三区
|
久久黄视频
|
在线看片福利
|
国产精品视频一二三区
|
欧美精品在线一区
|
亚洲日日夜夜
|
精品一区视频
|
亚洲第1页
|
免费在线日韩
|
国产激情一区二区三区
|
欧美视频中文字幕
|
成人做爰www免费看
午夜精品久久久久久久久久久久
|
欧美性猛片aaaaaaa做受
|
亚洲 中文 欧美 日韩 在线观看
|
国产真实精品久久二三区
|
欧美一级做a爰片免费视频
国产美女特级嫩嫩嫩bbb片
|
久久中文字幕视频
|
中文字幕日韩欧美一区二区三区
|
在线观看 亚洲
|
91天堂网|
国产小视频在线
|
日韩精品一区二区三区
|
国产草草视频
|
欧美视频三区
|
免费视频99
|
久久久青草婷婷精品综合日韩
|
国产精品极品美女在线观看免费
|
午夜a v电影
|
日本午夜免费福利视频
|
久久精品中文
|
在线观看国产h
|
成人在线视频观看
|
欧美日韩视频在线播放
|
日本欧美在线观看视频
|
日韩中文字幕一区
|