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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5182|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

【原創(chuàng)】四位總線驅(qū)動lcd1602-詳細(xì)教學(xué)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:37685 發(fā)表于 2013-9-5 13:30 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
四位總線驅(qū)動LCD1602
很多人都因?yàn)樵谑褂肔CD1602的液晶屏做電子制作時(shí)都有這樣一個(gè)煩惱,LCD占用的IO口太多了,傳統(tǒng)的八位總線驅(qū)動加上三個(gè)控制位就占用了11個(gè)接口。往往都是因?yàn)檫@個(gè)問題導(dǎo)致原本20腳單片機(jī)能做的事情現(xiàn)在得用28腳或40腳的單片機(jī)做了。有什么解決方案嗎?.......當(dāng)然是有啦。如果你正在被以上的問題困擾著,或者你是追求電路精簡、完美的DIYer,那就繼續(xù)看下去。這篇文章將會教你怎么用四位總線驅(qū)動LCD1602液晶屏,從11個(gè)IO口控制LCD變成7個(gè)IO口控制LCD將會大大減少你電路上的復(fù)雜度。

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

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

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

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

使用道具 舉報(bào)

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

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久99深爱久久99精品 | 国产精品1区 | 成人免费在线视频 | 午夜影院在线观看 | 精品国产乱码久久久久久中文 | 久久久亚洲综合 | 在线国产一区二区三区 | 国产精品一区二区三区久久 | 中文字幕一区二区三区在线观看 | 天天操,夜夜爽 | 久久精品亚洲 | 亚洲成人精品国产 | 免费在线观看成人 | japan25hdxxxx日本| 午夜免费在线电影 | 国产免费让你躁在线视频 | 91看片网| 欧美一区二区三区精品 | 一区二区三区av | 宅女噜噜66国产精品观看免费 | 怡红院成人在线视频 | 日本视频免费观看 | 亚洲欧美中文字幕在线观看 | 91tv在线观看 | 亚洲精品9999久久久久 | 亚洲欧美在线视频 | 国产亚洲精品久久19p | 99热在线免费 | 日本精品999 | 成人在线一区二区三区 | 亚洲 欧美 日韩在线 | 色香婷婷 | 精品国产色 | 久久一热| 美女福利视频一区 | 在线观看黄色电影 | 国产天堂| 91人人在线 | 91麻豆精品国产91久久久久久 | 日韩三级免费网站 | 欧美在线一区视频 |