一、硬件鏈接
在元件庫中搜索LM016即可找到LCD1602液晶屏。
按下圖方式鏈接單片機(jī)和屏幕。
二、軟件驅(qū)動代碼文章來源:http://www.zghlxwxcb.cn/news/detail-523209.html
//屏幕相關(guān)引腳接口定義
#define D P0
sbit E=P2^6;
sbit RW=P2^5;
sbit RS=P2^7;
//函數(shù)聲明
void LcdWriteCom(uchar com); /* LCD1602寫入8位命令子函數(shù) */
void LcdWriteData(uchar dat) ; /* LCD1602寫入8位數(shù)據(jù)子函數(shù) */
void LcdInit(); /* LCD1602初始化子程序 */
void setAddr(unsigned char line ,unsigned char addr);
void setBuling(unsigned char YorN);
void Show_string1(uchar a[]); /* 第一行從頭開始顯示 字符 "" 雙信號內(nèi)直接加顯示內(nèi)容即可 */
void Show_string2(uchar a[]); /* 第二行 "" 雙信號內(nèi)直接加顯示內(nèi)容即可 */
void show_string(uchar add,uchar a[]); /* 指定位置顯示字符串 注意 算好位置 0~27 40~67 地址值,"顯示字符串" */
void show_number(uchar add,uint a); /* show_number(0x加 要顯示的地址,變量或數(shù)字 */
void show_float(uchar add,float a); /* 顯示浮點(diǎn)數(shù) */
/* 向1602寫命令函數(shù)
* 參數(shù):com 命令
* 返回值 : 無
*/
void LcdWriteCom(uchar com)
{
E=0;
RW=0;
RS=0;
D=com;
delay_us(5);
E=1;
delay_us(5);
E=0;
}
/* 向1602寫數(shù)據(jù)命令
* 參數(shù): dat 數(shù)據(jù)
* 返回值: 無
*/
void LcdWriteData(uchar dat)
{
E=0;
RW=0;
RS=1;
D=dat;
delay_us(5);
E=1;
delay_us(5);
E=0;
}
/* LCD1602初始化函數(shù)
*/
void LcdInit()
{
LcdWriteCom(0x38);
LcdWriteCom(0x0c);//0x0C光標(biāo)不閃
// LcdWriteCom(0x0d);//0x0D光標(biāo)閃爍
LcdWriteCom(0x06);
LcdWriteCom(0x01);
LcdWriteCom(0x80);
}
/*設(shè)置光標(biāo)位置 第一行0x00-0xF 第二行0x40-0x4f */
void setAddr(unsigned char line ,unsigned char addr)
{
if(line == 1)
LcdWriteCom(0x80+addr);
if(line == 2)
LcdWriteCom(0x80+0x40+addr);
}
/*設(shè)置光標(biāo)閃爍*/
void setBuling(unsigned char YorN)
{
if(YorN)
LcdWriteCom(0x0d);//0x0D光標(biāo)閃爍
else
{LcdWriteCom(0x0c);//0x0C光標(biāo)不閃
}
}
/* 指定位置顯示字符串
* 參數(shù) add 地址 第一行 0~27
* 第二行 40~67
* a[] 字符串 "abc"
*/
void show_string(uchar add,uchar a[])
{
uchar i;
LcdWriteCom(0x80+add);
for(i=0;a[i]!='\0';i++)
{
LcdWriteData(a[i]);
}
}
/* 第一行顯示字符串
*/
void Show_string1(uchar a[])
{
uchar i;
LcdWriteCom(0x80);
for(i=0;a[i]!='\0';i++)
{
LcdWriteData(a[i]);
}
}
/* 第二行顯示字符串
*/
void Show_string2(uchar a[])
{
uchar i;
LcdWriteCom(0x80+0X40);
for(i=0;a[i]!='\0';i++)
{
LcdWriteData(a[i]);
}
}
/* 任意位置顯示數(shù)字
*/
void show_number(uchar add,uint a)
{
char s[10];
sprintf(s,"%d",a);
show_string(add,(uchar *)s); /* 格式轉(zhuǎn)換 */
}
/* 任意位置顯示浮點(diǎn)數(shù)
*/
void show_float(uchar add,float a)
{
char s[10];
sprintf(s,"% .1f",a);/* 格式轉(zhuǎn)換 */
show_string(add,(uchar *)s);
}
三、示例程序文章來源地址http://www.zghlxwxcb.cn/news/detail-523209.html
void main()
{
float temp = 6.4;
char string[17] = {0};
/* LCD1602初始化函數(shù) */
LcdInit();
while(1) //程序主邏輯
{
//將字符串格式化,并存儲在數(shù)組中,用于顯示攝氏度
sprintf(string,"T:%.1f C ",temp);
Show_string1(string); //顯示在LCD第一行
}
}
到了這里,關(guān)于Proteus仿真-LCD1602液晶屏使用方法(驅(qū)動一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!