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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2082|回復: 7
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
#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; //定義節拍和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;        //取節拍碼
                        m=_crol_(*(p[num]+k),4)&0x0f;        //取音調碼
                        if(m!=0)                        //判斷取得的音調碼是否為0
                        {                                        //不是,根據取得的音調碼計算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初始化函數 ****************************/
void Timer0_Initialize()
{
        TMOD=0x01;
        IE=0x82;
}
/************************* T0中斷服務函數 ***************************/
void timer0() interrupt 1 using 1
{
    TL0=tl;TH0=th;        //重裝定時初值
    SPEAK=~SPEAK;           //蜂鳴器控制端口電平取反
}
/************************ 四分之一拍延時函數 ************************/
void Delay_Beat()
{
        uint i;
        for(i=0;i<20000;i++);
}

/************************** 節拍延時函數 ****************************/
void Delay(uchar tt)
{
        uchar i;
        for(i=0;i<tt;i++)
                Delay_Beat();
}
/***************************1ms延時函數 ****************************/
void Delay_1ms(uchar ms)
{
        int i;
        while(ms--)
                for(i=125;i>0;i--);
}
/**************************按鍵掃描函數******************************/
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是否處于忙狀態函數**********************/
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寫入命令函數*************************/
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寫入數據函數*************************/
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液晶函數************************/
void LCD_Initialize()
{
        LCD_Write_Command(0x38);  //設置1602液晶功能,8位數據接口,
                                                          //兩行顯示,5*10點陣字符
    Delay_1ms(1);
        LCD_Write_Command(0x01);  //清屏
        Delay_1ms(1);
        LCD_Write_Command(0x06);  //輸入方式選擇指令,數據讀寫后AC自動+1,
                                                          //輸出顯示保持不變
        Delay_1ms(1);                          
        LCD_Write_Command(0x0c);  //開顯示,關光標,關閃爍
        Delay_1ms(1);
}
/****************在坐標點X、Y上寫入一個字符串函數*******************/
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));
        }
}

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

使用道具 舉報

沙發
ID:384109 發表于 2022-10-26 14:39 | 只看該作者
調節對比度,看是否真的顯示兩行方塊,確定顯示兩行方塊,就是初始化通過了,問題出在寫入顯示數據上
回復

使用道具 舉報

板凳
ID:16255 發表于 2022-10-27 22:41 | 只看該作者
應該是對比度調得太大了。能顯示兩行方塊,說明初始化正常。
回復

使用道具 舉報

地板
ID:584814 發表于 2022-10-28 14:24 | 只看該作者
接線錯誤或時序不當為多
回復

使用道具 舉報

5#
ID:1034262 發表于 2022-10-28 15:24 | 只看該作者
檢查電路沒接錯,檢查驅動沒錯誤。1602基本是最簡單的LCD模塊了!
回復

使用道具 舉報

6#
ID:597928 發表于 2022-10-28 15:31 | 只看該作者
有一個引腳接的是可調電阻,可以通過擰螺絲的方式,把這個電阻的值調小。就能完成對比度的調節了
回復

使用道具 舉報

7#
ID:879348 發表于 2022-10-28 15:35 | 只看該作者
說明完全沒有操作成功,這東西上電就是這樣
回復

使用道具 舉報

8#
ID:1042619 發表于 2022-10-28 15:55 | 只看該作者
         我其實很喜歡段碼LCD,因為省電!以前了解很多單片機都不帶段碼LCD驅動,普通MCU就要加LCD驅動芯片,電流太大!2年前買了200片STC的帶LCD驅動的樣片S T C 8H4K64TLCD,我做了不少電壓表、電流表、功率表、GPS時鐘、BPC時鐘等等,超級省電,很喜歡。

1.jpg.jpg (11.73 KB, 下載次數: 50)

1.jpg.jpg

1.jpg (2).png (517.13 KB, 下載次數: 51)

1.jpg (2).png
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人视屏在线观看 | 一级a性色生活片久久毛片 一级特黄a大片 | 国产精品国产三级国产aⅴ中文 | 91aiai| 在线日韩av电影 | 午夜精品一区二区三区在线观看 | 国产精品日日做人人爱 | 国产精品亚洲综合 | 日韩欧美综合在线视频 | 五月天天丁香婷婷在线中 | 亚洲国产成人精品久久 | 91在线精品视频 | 日本成人在线免费视频 | wwww.8888久久爱站网 | 日本视频中文字幕 | 日韩精品无码一区二区三区 | 盗摄精品av一区二区三区 | 亚洲不卡在线观看 | 国产一二三区在线 | 免费成人高清在线视频 | 日韩中文字幕网 | 亚洲免费在线视频 | 国产精品美女一区二区 | 精品三级| 成人不卡视频 | 欧美日韩综合视频 | 亚洲欧美综合精品久久成人 | 国产免国产免费 | 国产精品亚洲第一区在线暖暖韩国 | 蜜桃视频在线观看免费视频网站www | 久久免费精品视频 | 日本精品一区二区三区在线观看视频 | 正在播放亚洲 | 天天综合永久 | 国产精品美女久久久久久免费 | 亚洲精品在线国产 | 亚洲成人精品久久 | 欧美中文字幕在线观看 | 亚洲a视频 | 日本国产一区二区 | 中文一区 |