<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > AVR 單片機學(xué)習筆記–LCD1602模塊

AVR 單片機學(xué)習筆記–LCD1602模塊

作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò ) 收藏


六、電路圖

本文引用地址:http://dyxdggzs.com/article/201611/323868.htm

由于只是寫(xiě)操作,所以R/W直接接地即可。

PORTA接1602的8位數據引腳

PORTD5接1602的RS引腳 區分數據或命令:H數據,L命令

PORTD4接1602的E引腳 高脈沖使能,使能脈寬最小150ns

七、完整代碼。

// 代碼功能:驅動(dòng)LCD1602顯示屏
// 平臺:DB-51 Ver2.1開(kāi)發(fā)板
// 控制芯片:ATmega16A
//時(shí)鐘:片內時(shí)鐘
// 設計者:L、QQ:1007566569
//2013-8-10
//*************************************** 包含必備文件 *******************************************************
#ifndef _STRING_H
#include "string.h"
#endif

#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint
#define uintunsigned int
#endif

//*************************************** 移植必須修改 *******************************************************

// 共占用 PORTA一組IO 、PORTD中第4、5 IO 由于只是寫(xiě)操作,所以R/W直接接地即可。

#define _1602_DATA PORTA // 接1602的8位數據引腳
#define _1602_CMDIO PORTD // 控制線(xiàn)所對應的IO口
#define _1602_CMDIO_RS5 // 接1602的RS引腳 區分數據或命令:H數據,L命令
#define _1602_CMDIO_E 4 // 接1602的E引腳 高脈沖使能,使能脈寬最小150ns

/**************************************************
設計者:L、QQ:1007566569
函數:自定義函數 void My_SetBit(unsigned char *Date, unsigned char Wei, unsigned char ms)
參數:Date:寄存器地址 Wei:更改指定位 ms:若為1則將指定位置1 若為0則將指定位置0
返回值:無(wú)返回值,函數里面會(huì )更改寄存器值
例子:My_SetBit((unsigned char*)&PORTB, 2, 1); 將PORTB寄存器中的第2位置1
函數描述:
修改指定寄存器中的指定位,不影響其他位。
**************************************************/
/*** 第二版本 ***/
voidMy_SetBit(unsignedchar*Date,unsignedcharWei,unsignedcharms)
{
(((ms) == (0)) ? (*Date &= ~(0x1<}

/* 延時(shí)函數 */
voiddelay_50us_1602(unsignedintx)
{
unsignedchary;
for(;x>0;x--)
for(y=19;y>0;y--);
}

/* 寫(xiě)入指定命令 由于是寫(xiě)操作 R/W 可以直接接地保持低電平即可*/
voidlcdwrcom_1602(unsignedcharcdat)
{
My_SetBit((unsignedchar*)&_1602_CMDIO, _1602_CMDIO_E, 0);// E置0,即將改變數據。不允許1602讀取數據(IO口狀態(tài))
My_SetBit((unsignedchar*)&_1602_CMDIO, _1602_CMDIO_RS, 0);// RS拉低 表示是命令
_1602_DATA = cdat;// 將命令送至與1602的8位數據口相連接的IO口
delay_50us_1602(4);// 數據建立時(shí)間要 >40ns
My_SetBit((unsignedchar*)&_1602_CMDIO, _1602_CMDIO_E, 1);// E使能,命令已經(jīng)準備好,通知1602讀取命令(IO口狀態(tài))
delay_50us_1602(8);// E高電平保持時(shí)間要 >150ns,讓1602有時(shí)間讀取完整
My_SetBit((unsignedchar*)&_1602_CMDIO, _1602_CMDIO_E, 0);// E置0,不允許1602讀取數據(IO口狀態(tài))可能改變。
delay_50us_1602(2);// 根據時(shí)序圖,讓數據再保持一小段時(shí)間 >10ns
}
/* 將指定數據寫(xiě)入顯示屏由于是寫(xiě)操作 R/W 可以直接接地保持低電平即可*/
voidlcdwrdata_1602(unsignedchardat)
{
My_SetBit((unsignedchar*)&_1602_CMDIO, _1602_CMDIO_E, 0);// E置0,即將改變數據。不允許1602讀取數據(IO口狀態(tài))
My_SetBit((unsignedchar*)&_1602_CMDIO, _1602_CMDIO_RS, 1);// RS拉高 表示是數據
_1602_DATA = dat;// 將命令送至與1602的8位數據口相連接的IO口
delay_50us_1602(4);// 數據建立時(shí)間要 >40ns
My_SetBit((unsignedchar*)&_1602_CMDIO, _1602_CMDIO_E, 1);// E使能,命令已經(jīng)準備好,通知1602讀取命令(IO口狀態(tài))
delay_50us_1602(8);// E高電平保持時(shí)間要 >150ns,讓1602有時(shí)間讀取完整
My_SetBit((unsignedchar*)&_1602_CMDIO, _1602_CMDIO_E, 0);// E置0,不允許1602讀取數據(IO口狀態(tài))可能改變。
delay_50us_1602(2);// 根據時(shí)序圖,讓數據再保持一小段時(shí)間 >10ns// 根據時(shí)序圖,讓數據保持一小段時(shí)間
}

/* 初始化 1602 */
voidlcd_init_1602()
{// 具體含義請參考 1602官方使用手冊
lcdwrcom_1602(0x38);//0x38設置顯示模式為:16X2 顯示,5X7 點(diǎn)陣,8 位數據接口
lcdwrcom_1602(0x0C);//打開(kāi)顯示光標閃爍
lcdwrcom_1602(0x06);//顯示光標移動(dòng)設置
lcdwrcom_1602(0x01);//顯示清屏
}

/* 綜合函數 API*/
/* 參數:Show_1602(第一行顯示的數據, 第二行顯示的數據, 每個(gè)字符顯示的時(shí)間)*/
voidShow_1602(unsignedcharText_1[],unsignedcharText_2[],unsignedintTime)
{
unsignedcharn;
unsignedintTmp;
unsignedcharTmpA, TmpC, TmpD;

// 備份IO口原來(lái)的配置以備復原,避免影響其他模塊代碼
TmpA = DDRA;
TmpC = DDRC;
TmpD = DDRD;
// 端口初始化
DDRA = 0xFF;
DDRC = 0xC0;
DDRD = 0x30;

// 1602 初始化
lcd_init_1602();

lcdwrcom_1602(0x80+0x00);// 設置要顯示(寫(xiě)入)的位置 0x80-0x8F 第一行的位置
Tmp = strlen(Text_1);
if(Tmp)
{
for(n=0; n{
lcdwrdata_1602(Text_1[n]);// 一個(gè)字節一個(gè)字節寫(xiě)入
delay_50us_1602(Time);// 延時(shí)指定時(shí)間 可以達到一個(gè)字符一個(gè)字符慢慢依次顯示的效果
}
}

lcdwrcom_1602(0x80+0x40);// 設置要顯示(寫(xiě)入)的位置 0xC0-0xCF 第二行的位置
Tmp = strlen(Text_2);
if(Tmp)
{
for(n=0; n{
lcdwrdata_1602(Text_2[n]);// 一個(gè)字節一個(gè)字節寫(xiě)入
delay_50us_1602(Time);// 延時(shí)指定時(shí)間 可以達到一個(gè)字符一個(gè)字符慢慢依次顯示的效果
}
}

// 恢復端口原來(lái)的設置避免影響其他模塊的使用。
DDRA = TmpA;
DDRC = TmpC;
DDRD = TmpD;
}

/*寫(xiě)完這個(gè)函數后,靈光一現!擦,被誤導了!霖鋒老師和郭天祥老師是不是都寫(xiě)懵
了,搞那么復雜,靠 一個(gè) sprintf 就能搞定。
void Show_1602_Int(unsigned int Shuzi, unsigned int Time)
{
unsigned char Tdate[]="0123456789";
char Text[33] = {0};
unsigned int Tmp;
unsigned int Weishu = 10;
char Textlen = 0;

// 判斷位數 ↓
if(Shuzi < 10 )// 如果是一位數 則不必拆分 直接引用
{
Text[Textlen] = Tdate[Shuzi];
Show_1602_Char(Text, "", Time);
return ;
}

while(1)// 如果是兩位數以上 則先判斷幾位
{
if(Shuzi>=Weishu && Shuzibreak;
Weishu*=10;
}
// 判斷位數 ↑

// 將每一位拆分翻譯 ↓
for(Textlen=0; Weishu; Textlen++)
{
Tmp = Shuzi/Weishu;
Text[Textlen] = Tdate[Tmp];
Shuzi = Shuzi % Weishu;
Weishu /= 10;
}
// 將每一位拆分翻譯 ↑

Show_1602_Char(Text, "", Time);
}
*/


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: AVR單片機LCD1602模

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>