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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2003|回復: 7
收起左側

單片機驅動LCD1602一直白塊這個怎么解決?

[復制鏈接]
ID:1049270 發(fā)表于 2022-10-26 13:30 | 顯示全部樓層 |閱讀模式
IMG_20221026_121044.jpg

單片機源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SPEAK=P1^7;  //定義蜂鳴器輸出端口
sbit Key0=P1^0;          //定義獨立按鍵
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[]={   //音符對應的定時器初值表
        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[]={                  //《歡樂頌》音符碼表
        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[]={          //《生日快樂》音符碼表
        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; //定義臨時變量
        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) //判斷取得的音符碼是否為結束碼
                {
                        beat=*(p[num]+k)&0x0f;        //取節(jié)拍碼
                        m=_crol_(*(p[num]+k),4)&0x0f;        //取音調碼
                        if(m!=0)                        //判斷取得的音調碼是否為0
                        {                                        //不是,根據(jù)取得的音調碼計算T0初值
                                m1=--m*2+1;
                                m=m*2;
                                tl=TL0=TABLE[m1];
                                th=TH0=TABLE[m];
                                TR0=1;                        //啟動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中斷服務函數(shù) ***************************/
void timer0() interrupt 1 using 1
{
    TL0=tl;TH0=th;        //重裝定時初值
    SPEAK=~SPEAK;           //蜂鳴器控制端口電平取反
}
/************************ 四分之一拍延時函數(shù) ************************/
void Delay_Beat()
{
        uint i;
        for(i=0;i<20000;i++);
}

/************************** 節(jié)拍延時函數(shù) ****************************/
void Delay(uchar tt)
{
        uchar i;
        for(i=0;i<tt;i++)
                Delay_Beat();
}
/***************************1ms延時函數(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);  //為什么延時1ms呢?
        LCD_Status=P0;
        E=0;
        return LCD_Status;
}
/************************向1602寫入命令函數(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寫入數(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);  //設置1602液晶功能,8位數(shù)據(jù)接口,
                                                          //兩行顯示,5*10點陣字符
    Delay_1ms(1);
        LCD_Write_Command(0x01);  //清屏
        Delay_1ms(1);
        LCD_Write_Command(0x06);  //輸入方式選擇指令,數(shù)據(jù)讀寫后AC自動+1,
                                                          //輸出顯示保持不變
        Delay_1ms(1);                          
        LCD_Write_Command(0x0c);  //開顯示,關光標,關閃爍
        Delay_1ms(1);
}
/****************在坐標點X、Y上寫入一個字符串函數(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));
        }
}

回復

使用道具 舉報

ID:384109 發(fā)表于 2022-10-26 14:39 | 顯示全部樓層
調節(jié)對比度,看是否真的顯示兩行方塊,確定顯示兩行方塊,就是初始化通過了,問題出在寫入顯示數(shù)據(jù)上
回復

使用道具 舉報

ID:16255 發(fā)表于 2022-10-27 22:41 | 顯示全部樓層
應該是對比度調得太大了。能顯示兩行方塊,說明初始化正常。
回復

使用道具 舉報

ID:584814 發(fā)表于 2022-10-28 14:24 | 顯示全部樓層
接線錯誤或時序不當為多
回復

使用道具 舉報

ID:1034262 發(fā)表于 2022-10-28 15:24 | 顯示全部樓層
檢查電路沒接錯,檢查驅動沒錯誤。1602基本是最簡單的LCD模塊了!
回復

使用道具 舉報

ID:597928 發(fā)表于 2022-10-28 15:31 | 顯示全部樓層
有一個引腳接的是可調電阻,可以通過擰螺絲的方式,把這個電阻的值調小。就能完成對比度的調節(jié)了
回復

使用道具 舉報

ID:879348 發(fā)表于 2022-10-28 15:35 | 顯示全部樓層
說明完全沒有操作成功,這東西上電就是這樣
回復

使用道具 舉報

ID:1042619 發(fā)表于 2022-10-28 15:55 | 顯示全部樓層
         我其實很喜歡段碼LCD,因為省電!以前了解很多單片機都不帶段碼LCD驅動,普通MCU就要加LCD驅動芯片,電流太大!2年前買了200片STC的帶LCD驅動的樣片S T C 8H4K64TLCD,我做了不少電壓表、電流表、功率表、GPS時鐘、BPC時鐘等等,超級省電,很喜歡。
1.jpg.jpg
1.jpg (2).png
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品www| 精品久久久久久一区二区 | 欧美一级二级视频 | 精品久久影院 | 天天干天天爱天天爽 | 99久久久国产精品 | 秋霞影院一区二区 | 欧美 日韩 国产 一区 | 日韩在线视频一区二区三区 | 激情五月婷婷在线 | 欧美精品一区三区 | 日韩欧美不卡 | 日韩精品无码一区二区三区 | 在线视频91 | 粉色午夜视频 | 日韩欧美一区二区三区免费观看 | 福利视频一区二区 | 久久免费精彩视频 | 国产高清久久 | 免费视频二区 | 亚洲午夜小视频 | 成人做爰9片免费看网站 | 日韩视频区| 久精品视频 | 久草资源在线视频 | 欧美一区二区在线免费观看 | 成年人在线观看 | 午夜看看 | 国产精品亚洲一区二区三区在线 | 91视频三区 | 国产精品美女一区二区三区 | 午夜电影网| 久久久久国产精品人 | 国产福利在线 | 日韩精品在线视频免费观看 | 黄免费在线 | 亚洲精品久久久一区二区三区 | 黄色一级特级片 | 亚洲一区 中文字幕 | 午夜网站视频 | 精品乱码一区二区 |