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