標(biāo)題: 單片機(jī)驅(qū)動(dòng)LCD1602一直白塊這個(gè)怎么解決? [打印本頁(yè)]
作者: 蒲小廣 時(shí)間: 2022-10-26 13:30
標(biāo)題: 單片機(jī)驅(qū)動(dòng)LCD1602一直白塊這個(gè)怎么解決?
IMG_20221026_121044.jpg (155.15 KB, 下載次數(shù): 24)
下載附件
2022-10-26 13:29 上傳
單片機(jī)源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SPEAK=P1^7; //定義蜂鳴器輸出端口
sbit Key0=P1^0; //定義獨(dú)立按鍵
sbit Key1=P1^1;
sbit Key2=P1^2;
sbit Key3=P1^3;
sbit RS=P2^0; //定義控制引腳
sbit RW=P2^1;
sbit E=P2^2;
uchar beat,tl,th; //定義節(jié)拍和T0初值變量
uchar code TABLE[]={ //音符對(duì)應(yīng)的定時(shí)器初值表
0xfb,0x04,0xfb,0x90,0xfc,0x09,0xfc,0x44,
0xfc,0xac,0xfd,0x09,0xfd,0x34,0xfd,0x82,
0xfd,0xc8,0xfe,0x06,0xfe,0x22,0xfe,0x56,
0xfe,0x85,0xfe,0x9a,0xfe,0xc1};
uchar code GRACE[]={ //《奇異恩典》音符碼表
0x14,0x48,0x62,0x42,0x68,0x54,0x48,0x24,0x18,
0x14,0x48,0x62,0x42,0x68,0x54,0x8c,0x88,
0x64,0x86,0x62,0x82,0x62,0x48,0x14,0x26,0x42,0x42,0x22,0x18,
0x14,0x48,0x62,0x42,0x68,0x54,0x4c,0x48,0x00};
uchar code JOY[]={ //《歡樂(lè)頌》音符碼表
0x64,0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,0x44,0x54,0x64,0x66,0x52,0x58,
0x64,0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,0x44,0x54,0x64,0x56,0x42,0x48,
0x54,0x54,0x64,0x44,0x54,0x62,0x72,0x64,0x44,0x54,0x62,0x72,0x64,0x54,0x44,0x54,0x18,
0x64,0x64,0x74,0x84,0x84,0x74,0x64,0x54,0x44,0x44,0x54,0x64,0x56,0x42,0x48,0x00};
uchar code HAPPY[]={ //《生日快樂(lè)》音符碼表
0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,
0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,
0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,
0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,
0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,
0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,
0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,
0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,
0x00};
uchar code GRACE_Name[]="Amazing Grace ";
uchar code JOY_Name[]="Ode To Joy ";
uchar code HAPPY_Name[]="Happy Birthday ";
void Timer0_Initialize();
void Delay_1ms(uchar ms);
void Delay(uchar);
void Key_Scan(char *numz,uchar *kz);
uchar Busy_Check();
void LCD_Write_Command(uchar cmd);
void LCD_Initialize();
void Show_String(uchar x,uchar y,uchar *str);
void main()
{
uchar m,m1,k=0; //定義臨時(shí)變量
char num=0;
char *numz;
uchar *kz;
uchar *p[3];
uchar *q[3];
numz=#
kz=&k;
p[0]=GRACE;p[1]=JOY;p[2]=HAPPY;
q[0]=GRACE_Name;q[1]=JOY_Name;q[2]=HAPPY_Name;
Timer0_Initialize();
LCD_Initialize();
while(Key1);
Delay_1ms(5);
while(Key1);
while(1)
{
while(*(p[num]+k)!=0) //判斷取得的音符碼是否為結(jié)束碼
{
beat=*(p[num]+k)&0x0f; //取節(jié)拍碼
m=_crol_(*(p[num]+k),4)&0x0f; //取音調(diào)碼
if(m!=0) //判斷取得的音調(diào)碼是否為0
{ //不是,根據(jù)取得的音調(diào)碼計(jì)算T0初值
m1=--m*2+1;
m=m*2;
tl=TL0=TABLE[m1];
th=TH0=TABLE[m];
TR0=1; //啟動(dòng)T0
}
else //取得的音符碼為0,則停止T0
TR0=0;
Delay(beat);
k++;
Show_String(0,0,q[num]);
Show_String(0,1,q[num]+16);
Key_Scan(numz,kz);
}
num++;
if(num>2)
num=0;
k=0;
}
}
/************************** T0初始化函數(shù) ****************************/
void Timer0_Initialize()
{
TMOD=0x01;
IE=0x82;
}
/************************* T0中斷服務(wù)函數(shù) ***************************/
void timer0() interrupt 1 using 1
{
TL0=tl;TH0=th; //重裝定時(shí)初值
SPEAK=~SPEAK; //蜂鳴器控制端口電平取反
}
/************************ 四分之一拍延時(shí)函數(shù) ************************/
void Delay_Beat()
{
uint i;
for(i=0;i<20000;i++);
}
/************************** 節(jié)拍延時(shí)函數(shù) ****************************/
void Delay(uchar tt)
{
uchar i;
for(i=0;i<tt;i++)
Delay_Beat();
}
/***************************1ms延時(shí)函數(shù) ****************************/
void Delay_1ms(uchar ms)
{
int i;
while(ms--)
for(i=125;i>0;i--);
}
/**************************按鍵掃描函數(shù)******************************/
void Key_Scan(char *numz,uchar *kz)
{
bit flag;
if(!Key0)
{
Delay_1ms(5);
if(!Key0)
{
(*numz)--;
if(*numz<0)
*numz=2;
*kz=0;
}
}
else if(!Key2)
{
Delay_1ms(5);
if(!Key2)
{
(*numz)++;
if(*numz>2)
*numz=0;
*kz=0;
}
}
else if(!Key3)
{
Delay_1ms(5);
if(!Key3)
{
TR0=0;
flag=1;
while(flag)
{
if(!Key1)
{
Delay_1ms(5);
if(!Key1)
{
flag=0;
TR0=1;
}
}
}
}
}
while((!Key0)||(!Key1)||(!Key2));
}
/*******************檢查1602是否處于忙狀態(tài)函數(shù)**********************/
uchar Busy_Check()
{
uchar LCD_Status;
RS=0;
RW=1;
E=1;
Delay_1ms(1); //為什么延時(shí)1ms呢?
LCD_Status=P0;
E=0;
return LCD_Status;
}
/************************向1602寫(xiě)入命令函數(shù)*************************/
void LCD_Write_Command(uchar cmd)
{
while((Busy_Check()&0x80)==0x80); //如果1602忙
RS=0;
RW=0;
E=0;
P0=cmd;
E=1;
Delay_1ms(1);
E=0;
}
/************************向1602寫(xiě)入數(shù)據(jù)函數(shù)*************************/
void LCD_Write_Data(uchar dat)
{
while((Busy_Check()&0x80)==0x80);
RS=1;
RW=0;
E=0;
P0=dat;
E=1;
Delay_1ms(1);
E=0;
}
/*************************初始化1602液晶函數(shù)************************/
void LCD_Initialize()
{
LCD_Write_Command(0x38); //設(shè)置1602液晶功能,8位數(shù)據(jù)接口,
//兩行顯示,5*10點(diǎn)陣字符
Delay_1ms(1);
LCD_Write_Command(0x01); //清屏
Delay_1ms(1);
LCD_Write_Command(0x06); //輸入方式選擇指令,數(shù)據(jù)讀寫(xiě)后AC自動(dòng)+1,
//輸出顯示保持不變
Delay_1ms(1);
LCD_Write_Command(0x0c); //開(kāi)顯示,關(guān)光標(biāo),關(guān)閃爍
Delay_1ms(1);
}
/****************在坐標(biāo)點(diǎn)X、Y上寫(xiě)入一個(gè)字符串函數(shù)*******************/
void Show_String(uchar x,uchar y,uchar *str)
{
uchar i=0;
if(y==0)
LCD_Write_Command(0x80|x);
if(y==1)
LCD_Write_Command(0xc0|x);
for(i=0;i<16;i++)
{
LCD_Write_Data(*(str+i));
}
}
作者: 人中狼 時(shí)間: 2022-10-26 14:39
調(diào)節(jié)對(duì)比度,看是否真的顯示兩行方塊,確定顯示兩行方塊,就是初始化通過(guò)了,問(wèn)題出在寫(xiě)入顯示數(shù)據(jù)上
作者: mengsiu 時(shí)間: 2022-10-27 22:41
應(yīng)該是對(duì)比度調(diào)得太大了。能顯示兩行方塊,說(shuō)明初始化正常。
作者: man1234567 時(shí)間: 2022-10-28 14:24
接線錯(cuò)誤或時(shí)序不當(dāng)為多 
作者: coody_sz 時(shí)間: 2022-10-28 15:24
檢查電路沒(méi)接錯(cuò),檢查驅(qū)動(dòng)沒(méi)錯(cuò)誤。1602基本是最簡(jiǎn)單的LCD模塊了!
作者: 1792237060 時(shí)間: 2022-10-28 15:31
有一個(gè)引腳接的是可調(diào)電阻,可以通過(guò)擰螺絲的方式,把這個(gè)電阻的值調(diào)小。就能完成對(duì)比度的調(diào)節(jié)了
作者: wufa1986 時(shí)間: 2022-10-28 15:35
說(shuō)明完全沒(méi)有操作成功,這東西上電就是這樣
作者: 大漠孤煙001 時(shí)間: 2022-10-28 15:55
我其實(shí)很喜歡段碼LCD,因?yàn)槭‰姡∫郧傲私夂芏鄦纹瑱C(jī)都不帶段碼LCD驅(qū)動(dòng),普通MCU就要加LCD驅(qū)動(dòng)芯片,電流太大!2年前買(mǎi)了200片STC的帶LCD驅(qū)動(dòng)的樣片S T C 8H4K64TLCD,我做了不少電壓表、電流表、功率表、GPS時(shí)鐘、BPC時(shí)鐘等等,超級(jí)省電,很喜歡。
-
1.jpg.jpg
(11.73 KB, 下載次數(shù): 50)
下載附件
2022-10-28 15:41 上傳
-
1.jpg (2).png
(517.13 KB, 下載次數(shù): 51)
下載附件
2022-10-28 15:41 上傳
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |