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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5294|回復: 0
收起左側

【原創】四位總線驅動lcd1602-詳細教學

[復制鏈接]
ID:37685 發表于 2013-9-5 13:30 | 顯示全部樓層 |閱讀模式
四位總線驅動LCD1602
很多人都因為在使用LCD1602的液晶屏做電子制作時都有這樣一個煩惱,LCD占用的IO口太多了,傳統的八位總線驅動加上三個控制位就占用了11個接口。往往都是因為這個問題導致原本20腳單片機能做的事情現在得用28腳或40腳的單片機做了。有什么解決方案嗎?.......當然是有啦。如果你正在被以上的問題困擾著,或者你是追求電路精簡、完美的DIYer,那就繼續看下去。這篇文章將會教你怎么用四位總線驅動LCD1602液晶屏,從11個IO口控制LCD變成7個IO口控制LCD將會大大減少你電路上的復雜度。

接線圖
四位總線IO口改怎么驅動呢? 看看下面的接線圖, Px.4接DB4 Px.5接DB5以此類推,接到DB7時就用了4個IO口,是不是大大的減少了電路上的復雜哈。
這是LCD的接口定義。看看就行 ,主要看上面的接線圖

DB7測忙: 測忙就是看看LCD現在的狀態看看他在不在忙處理你上次給他的命令,如果他忙完了,才可以給他發送下一個命令
注意:單片機每次對LCD進行讀寫時都需要對DB7進行監測,確保DB7為0才能讀寫。
void read_busy() //測忙的函數 看看LCD有空處理你的指令沒,有空了,就可以給它發數據了
{ // 根據上面圖片1.1讀狀態寫函數。
RS=0;RW=1;//因為測忙是要從LCD讀出狀態,所以根據上面的操作時序表寫程序就是這樣,L就是0(低電平)H就是1(高電平)
DB7=1; //如果LCD不忙的話他就會給出一個低電平在DB7,我們這先拉高電平,做準備接他的低電平
E=1; //E=H所以拉高電平
while(DB7); //等待返回一個低電平就可以執行下一步了。
E=0; //E置0,方便下面的函數用
}
函數里面的RS、RW、E、DB7需要定義sbit 根據上面的接線圖定義應該是:
sbit RW=P3^1;
sbit RS=P3^0;
sbit E =P3^5;
sbit DB7=P1^7;
void write_data(unsigned char c,unsigned char a) //發送指令函數。i=0寫指令 i=1寫數據
定義了兩個子程序參數
{
read_busy(); //先測忙,調用了上面那個函數
RS=a;RW=0;//根據基本操作時序圖,RS=1 RW=0時是寫數據,也就是你要顯示在LCD上的數據。RS=0 RW=0時是寫指令,指令就是讓它對自己的一些處理,下面圖是指令說明
P1=c/16*16;//這里就是到送指令的命令了,送高四位
E=1;//每次送完要給E一個脈沖
E=0;//要拉低為下面的做準備
P1=c%16*16; //送低四位
E=1; //送完給E一個脈沖
E=0; //拉低E
}
程序說明:
P1=c/16*16;//這里就是到送指令的命令了,送高四位
E=1; //每次送完要給E一個脈沖
E=0; //要拉低為下面的做準備
P1=c%16*16; //送低四位
E=1; //送完給E一個脈沖
E=0; //拉低E
P1=c/16*16;//這里就是到送指令的命令了,送高四位
P1=c%16*16; //送低四位
c/16*16 這是把指令的高四位取出來 /就是整除
比如說 指令是0xAF; 經過這個公式的運算就出來就是 0xA0;高四位就出來了;
C%16*16 這是把指令的低四位取出來 %就是除余 得的是余數
經過這個公式的運算就出來就是 0xF0;低四位就出來了;
在分兩次送入LCD。
送完一次要給E一個高脈沖就是E=1;E=0;
指令說明:

說明一下上面這個圖怎么用(會LCD 8位總線的可以跳過)
比如4.1.2 顯示開/關及光標設置
指令碼是: 0 0 0 0 1 D C B D是開液晶屏的顯示 1為開 所以D我們把它置1就是 0 0 0 0 1 1 C B 這樣設置
例子:
我要開顯示,不顯示光標,光標閃爍 就是 D=1 C=0 B=1
指令碼就是 0 0 0 0 1 1 0 1 這是2進制數,在C語言里要用16進制數,所以轉換成16進制數就是0x0D
操作步驟:
有了上面那兩個低層的函數。我們就可以對LCD進行操作了。
1、首先要多LCD進行初始化
要用到上面write_data的函數。我們用一個函數把他再次封裝起來
void LCD_initialization()
{
write_data(0x28,0); // 告訴LCD我們要四位總線驅動 因為這是指令所有函數的參數就是(0x28,0)
write_data(0x01,0); //讓他清屏,數據指針清零
write_data(0x06,0); //這個是上面指令碼是 000001NS的設置 大家自己上去看看
write_data(0x0f,0); //設置光標 開顯示,顯示光標,光標閃爍
}//初始化用到的都是指令 所以write_data( ,0); 函數的第二個參數都是0
2、初始化完后就可以送入要顯示的函數了,用到的函數
void print(unsigned char a,unsigned char *str) //送入顯示的數據
{//函數參數說明,a你要送入的地址,看下圖 如果是在第一行第二個顯示就是0x01,*str這個就填你要顯示的字
write_data(a | 0x80,0);
while(*str != '\0')
{
write_data(*str++,1); //因為送入的是顯示的字所以第二個參數為1
}
*str = 0;
}

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99re视频 | 亚洲免费视频网站 | 国产精品久久久久久久久久久久久 | 国产一级免费在线观看 | 天天拍天天插 | 成人免费在线观看视频 | 成人国产精品免费观看视频 | 天天躁人人躁人人躁狂躁 | 午夜小视频在线观看 | 91久久精品国产 | 欧美在线不卡 | 欧美日韩国产一区二区三区 | 国产视频导航 | 中文字幕一区二区三区四区五区 | 午夜影院网站 | 91亚洲国产成人精品一区二三 | 成人在线播放网址 | 亚洲精品小视频在线观看 | 午夜精品一区二区三区在线观看 | 日本一区二区视频 | 99精品国产一区二区青青牛奶 | 国产精品毛片一区二区在线看 | 女朋友的闺蜜3韩国三级 | 亚洲国产一区二区在线 | 亚洲区一区二 | 久久久精品视频一区二区三区 | 久久丁香 | 中文在线a在线 | 成人在线观看免费视频 | 亚洲av一级毛片 | 麻豆视频在线免费观看 | 天天天天操 | 国产在线一区二 | 精品一二区 | 国产成人精品网站 | 欧美一区二区三区视频在线播放 | 欧美日韩中文字幕 | 色婷婷一区二区三区四区 | 亚洲国产精品久久 | 久热精品免费 | 欧美群妇大交群中文字幕 |