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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD1602只顯示第一排黑塊

  [復制鏈接]
跳轉到指定樓層
樓主
芯片是好的,用的是開發板,開發板也是好的,應該是程序哪有問題。仿真沒問題,但放到開發板上就不行了。
開發板用的是HC6800。
試過調對比度,但是沒什么幫助。
芯片第一行第二行均可單獨顯示靜態的內容。
出現黑塊應該是初始化的問題,但又看不出哪有問題,所以請各位大佬能在百忙中看看,不勝感激。

#ifndef _LCD1602_H_
#define _LCD1602_H_

#define uchar unsigned char
#define uint unsigned int

#define data_1602 P0
uchar code table_num[]="0123456789abcdefg";

sbit rs=P2^5;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit rw=P2^4;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit e =P2^6;         //片選信號   下降沿觸發

/***********************延時函數************************/
void delay_uint(uint q){
        while(q--);
}

/***********************lcd1602寫命令函數************************/
void write_com(uchar com){
        e=0;
        rs=0;
        rw=0;
        P0=com;
        delay_uint(3);
        e=1;
        delay_uint(25);
        e=0;
}

/***********************lcd1602寫數據函數************************/
void write_data(uchar dat){
        e=0;
        rs=1;
        rw=0;
        P0=dat;
        delay_uint(3);
        e=1;
        delay_uint(25);
        e=0;       
}

/***********************lcd1602初始化設置************************/
void init_1602()         //lcd1602初始化設置
{
        write_com(0x38);        //
        write_com(0x0c);
        write_com(0x06);
}

/***********************lcd1602上顯示兩位十進制數************************/
void write_sfm1(uchar hang,uchar add,uchar date)        ///***顯示星期函數***從十位開始寫///
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        write_data(table_num[date % 10]);       
}  

/***********************lcd1602上顯示兩位十進制數************************/
void write_sfm2(uchar hang,uchar add,uchar date)  ///***顯示時分秒函數***從十位開始寫///
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        write_data(table_num[date / 10 % 10]);       
        write_data(table_num[date % 10]);       
}


/***********************lcd1602上顯示兩位十進制數************************/
void write_sfm3_18B20(uchar hang,uchar add,uint date)  ///***顯示溫度函數***從十位開始寫///
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        write_data(0x30+date/100%10);
        write_data(0x30+date/10%10);
        write_data('.');
        write_data(0x30+date%10);       
}



/***********************lcd1602上顯示兩位十進制數************************/
void write_sfm2_ds1302(uchar hang,uchar add,uchar date){
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);          
        write_data(table_num[date/16]);
        write_data(table_num[date%16]);       
}

/***********************lcd1602上顯示這字符函數************************/
void write_string(uchar hang,uchar add,uchar *p){
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
                while(1)                                                                                                                 
                {
                        if(*p == '\0')  break;
                        write_data(*p);
                        p++;
                }       
}

/*****************控制光標函數********************/
void write_guanbiao(uchar hang,uchar add,uchar date){               
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        if(date == 1)
                write_com(0x0f);     //顯示光標并且閃爍       
        else
                write_com(0x0c);   //關閉光標
}       

/***********************lcd1602上顯示特定的字符************************/
void write_zifu(uchar hang,uchar add,uchar date){
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);
        write_data(date);       
}

/***********************lcd1602清除顯示************************/
void clear_1602(){
        write_string(1,0,"                ");
        write_string(2,0,"                ");
}

/****************開機液晶顯示函數 初始化液晶的內容********************************/
void init_1602_dis_csf()  //初始化液晶
{
        write_string(1,0,"   :  :    00.0");               
        write_string(2,0,"20  -  -       ");       
        write_zifu(1,15,0xdf);  //顯示度       
}
#endif










///////////***********************************************///////////////////////////
#ifndef _DS1302_H_
#define _DS1302_H_

/******************
        ds1302 內部RAM   RAM0  1100 000R/W   1讀 0寫
                                         RAM1  1100 001R/W  
                                               .......
                                         RAM30 1111 110R/W   
********************/

sbit clk = P3^6;          //ds1302時鐘線定義
sbit io =  P3^4;          //數據線
sbit rst = P3^5;          //復位線
                                                //秒  分   時   日   月  年   星期        
uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};   //寫地址
uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};   //讀地址
uchar code init_ds[]  ={0x58,0x00,0x00,0x01,0x01,0x13,0x01};

//uchar miao,fen,shi,ri,yue,week,nian;
uchar  miao,fen,shi,ri,yue,week,nian;       
uchar i;
uchar fen1=0x11,shi1=0;          //兩個鬧鐘變量的定義
bit open1;

/*************寫一個數據到對應的地址里***************/
void write_ds1302(uchar add,uchar dat)
{               
        rst = 1;                         //把復位線拉高
        for(i=0;i<8;i++){                                     //低位在前
                clk = 0;                 //時鐘線拿低開始寫數據
                io = add & 0x01;           
                add >>= 1;                 //把地址右移一位
                clk = 1;                 //時鐘線拿高
        }       
        for(i=0;i<8;i++){
                clk = 0;                 //時鐘線拿低開始寫數據
                io = dat & 0x01;
                dat >>= 1;                 //把數據右移一位
                clk = 1;                 //時鐘線拿高
        }
        rst = 0;                         //復位線合低
        clk = 0;
        io = 0;
}

/*************從對應的地址讀一個數據出來***************/
uchar read_ds1302(uchar add){
        uchar value,i;
        rst = 1;                         //把復位線拿高
        for(i=0;i<8;i++){                                     //低位在前
                clk = 0;                 //時鐘線拿低開始寫數據
                io = add & 0x01;           
                add >>= 1;                 //把地址右移一位
                clk = 1;                 //時鐘線拿高
        }               
        for(i=0;i<8;i++){
                clk = 0;                 //時鐘線拿低開始讀數據
                value >>= 1;
                if(io == 1)
                        value |= 0x80;
                clk = 1;                 //時鐘線拿高
        }
        rst = 0;                         //復位線合低
        clk = 0;
        io = 0;
        return value;                 //返回讀出來的數據
}

/*************把要的時間 年月日 都讀出來***************/
void read_time(){
        miao = read_ds1302(read_add[0]);        //讀秒
        fen  = read_ds1302(read_add[1]);        //讀分
        shi  = read_ds1302(read_add[2]);        //讀時
        ri   = read_ds1302(read_add[3]);        //讀日
        yue  = read_ds1302(read_add[4]);        //讀月
        nian = read_ds1302(read_add[5]);        //讀年
        week = read_ds1302(read_add[6]);        //讀星期          
}

/*************把要寫的時間 年月日 都寫入ds1302里***************/
void write_time(){
        write_ds1302(0x8e,0x00);                        //打開寫保護
        write_ds1302(write_add[0],miao);        //寫秒
        write_ds1302(write_add[1],fen);                //寫分
        write_ds1302(write_add[2],shi);                //寫時
        write_ds1302(write_add[3],ri);                //寫日
        write_ds1302(write_add[4],yue);                //寫月
        write_ds1302(write_add[5],nian);        //寫年
        write_ds1302(write_add[6],week);        //寫星期
        write_ds1302(0x8e,0x80);                        //關閉寫保護
}

/*************把數據保存到ds1302 RAM中**0-31*************/
void write_ds1302ram(uchar add,uchar dat){
        add <<= 1;     //地址是從第二位開始的
        add &= 0xfe;   //把最低位清零  是寫的命令
        add |= 0xc0;   //地址最高兩位為 1  
        write_ds1302(0x8e,0x00);
        write_ds1302(add,dat);       
        write_ds1302(0x8e,0x80);
}

/*************把數據從ds1302 RAM讀出來**0-31*************/
uchar read_ds1302ram(uchar add){
        add <<= 1;     //地址是從第二位開始的
        add |= 0x01;   //把最高位置1  是讀命令
        add |= 0xc0;   //地址最高兩位為 1  
        return(read_ds1302(add));       
}

/*************初始化ds1302時間***************/
void init_ds1302(){
        uchar i;
        rst = 0;        //第一次讀寫數據時要把IO口拿低
        clk = 0;
        io = 0;
        i = read_ds1302ram(30);///***DS1302與RAM相關的寄存器,單個RAM單元,共31個,每個單元組態為一個8位的字節,其命令控制字為COH~FDH***///
                                                   ///***把數據從30地址中毒出來***///
        if(i != 3){       
                i = 3;
                write_ds1302ram(30,i);                         //4050   4100                 3080

                write_ds1302(0x8e,0x00);                    //打開寫保護
                for(i=0;i<7;i++)
                        write_ds1302(write_add[i],init_ds[i]);        //把最高位值0 允許ds1302工作
                write_ds1302(0x8e,0x80);        //關寫保護
        }
}
#endif








////////////////***************************************//////////////////////////
#ifndef _EEPROM52_H_
#define _EEPROM52_H_
uchar a_a;
#include <intrins.h>

#define RdCommand 0x01 //定義ISP的操作命令
#define PrgCommand 0x02
#define EraseCommand 0x03
#define Error 1
#define Ok 0
#define WaitTime 0x01 //定義CPU的等待時間
sfr ISP_DATA=0xe2;  //寄存器申明
sfr ISP_ADDRH=0xe3;
sfr ISP_ADDRL=0xe4;
sfr ISP_CMD=0xe5;
sfr ISP_TRIG=0xe6;
sfr ISP_CONTR=0xe7;

/* ================ 打開 ISP,IAP 功能 ================= */
void ISP_IAP_enable(void){
         EA = 0;       /* 關中斷   */
         ISP_CONTR = ISP_CONTR & 0x18;       /* 0001,1000 */
         ISP_CONTR = ISP_CONTR | WaitTime; /* 寫入硬件延時 */
         ISP_CONTR = ISP_CONTR | 0x80;       /* ISPEN=1  */
}

/* =============== 關閉 ISP,IAP 功能 ================== */
void ISP_IAP_disable(void){
         ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */
         ISP_TRIG = 0x00;
         EA   =   1;   /* 開中斷 */
}

/* ================ 公用的觸發代碼 ==================== */
void ISPgoon(void){
         ISP_IAP_enable();   /* 打開 ISP,IAP 功能 */
         ISP_TRIG = 0x46;  /* 觸發ISP_IAP命令字節1 */
         ISP_TRIG = 0xb9;  /* 觸發ISP_IAP命令字節2 */
         _nop_();
}

/* ==================== 字節讀 ======================== */
unsigned char byte_read(unsigned int byte_addr)
{
        EA = 0;
         ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址賦值 */
         ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
         ISP_CMD   = ISP_CMD & 0xf8;   /* 清除低3位  */
         ISP_CMD   = ISP_CMD | RdCommand; /* 寫入讀命令 */
         ISPgoon();       /* 觸發執行  */
         ISP_IAP_disable();    /* 關閉ISP,IAP功能 */
         EA  = 1;
         return (ISP_DATA);    /* 返回讀到的數據 */
}

/* ================== 扇區擦除 ======================== */
void SectorErase(unsigned int sector_addr){
         unsigned int iSectorAddr;
         iSectorAddr = (sector_addr & 0xfe00); /* 取扇區地址 */
         ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);
         ISP_ADDRL = 0x00;
         ISP_CMD = ISP_CMD & 0xf8;   /* 清空低3位  */
         ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3  */
         ISPgoon();       /* 觸發執行  */
         ISP_IAP_disable();    /* 關閉ISP,IAP功能 */
}

/* ==================== 字節寫 ======================== */
void byte_write(unsigned int byte_addr, unsigned char original_data){
         EA  = 0;
//         SectorErase(byte_addr);
         ISP_ADDRH = (unsigned char)(byte_addr >> 8);  /* 取地址  */
         ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff);
         ISP_CMD  = ISP_CMD & 0xf8;    /* 清低3位 */
         ISP_CMD  = ISP_CMD | PrgCommand;  /* 寫命令2 */
         ISP_DATA = original_data;   /* 寫入數據準備 */
         ISPgoon();       /* 觸發執行  */
         ISP_IAP_disable();     /* 關閉IAP功能 */
         EA =1;
}
#endif









//////////////**********************////////////////////////
#include <reg52.h>                 //調用單片機頭文件
#define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
#define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535
#include "eeprom52.h"

#include "intrins.h"

bit flag_200ms ;
bit flag_100ms ;

sbit dq   = P3^7;          //18b20 IO口的定義

uint temperature ;    //溫度變量

uchar menu_1,menu_2;

#include "ds1302.h"
#include "lcd1602.h"

/******************把數據保存到單片機內部eeprom中******************/
void write_eeprom(){
        SectorErase(0x2000);
        byte_write(0x2000, fen1);
        byte_write(0x2001, shi1);
        byte_write(0x2002, open1);
        byte_write(0x2058, a_a);       
}

/******************把數據從單片機內部eeprom中讀出來*****************/
void read_eeprom(){
        fen1  = byte_read(0x2000);
        shi1  = byte_read(0x2001);
        open1  = byte_read(0x2002);
        a_a      = byte_read(0x2058);
}

/**************開機自檢eeprom初始化*****************/
void init_eeprom(){
        read_eeprom();                //先讀
        if(a_a != 1)                //新的單片機初始單片機內問eeprom
        {
                fen1  = 3;
                shi1  = 8;
                open1  = 1;
                a_a = 1;
                write_eeprom();           //保存數據
        }       
}

/***********************18b20初始化函數*****************************/
void init_18b20(){
        bit q;
        dq = 1;                                //把總線拿高
        delay_uint(1);            //15us
        dq = 0;                                //給復位脈沖
        delay_uint(80);                //750us
        dq = 1;                                //把總線拿高 等待
        delay_uint(10);                //110us
        q = dq;                                //讀取18b20初始化信號
        delay_uint(20);                //200us
        dq = 1;                                //把總線拿高 釋放總線
}

/*************寫18b20內的數據***************/
void write_18b20(uchar dat){
        uchar i;
        for(i=0;i<8;i++){                                         //寫數據是低位開始
                dq = 0;                         //把總線拿低寫時間隙開始
                dq = dat & 0x01; //向18b20總線寫數據了
                delay_uint(5);         // 60us
                dq = 1;                         //釋放總線
                dat >>= 1;
        }       
}

/*************讀取18b20內的數據***************/
uchar read_18b20(){
        uchar i,value;
        for(i=0;i<8;i++){
                dq = 0;                         //把總線拿低讀時間隙開始
                value >>= 1;         //讀數據是低位開始
                dq = 1;                         //釋放總線
                if(dq == 1)                 //開始讀寫數據
                        value |= 0x80;
                delay_uint(5);         //60us        讀一個時間隙最少要保持60us的時間
        }
        return value;                 //返回數據
}

/*************讀取溫度的值 讀出來的是小數***************/
uint read_temp(){
        uint value;
        uchar low;                           //在讀取溫度的時候如果中斷的太頻繁了,就應該把中斷給關了,否則會影響到18b20的時序
        init_18b20();                   //初始化18b20
        write_18b20(0xcc);           //跳過64位ROM
        write_18b20(0x44);           //啟動一次溫度轉換命令
        delay_uint(50);                   //500us

        init_18b20();                   //初始化18b20
       
        write_18b20(0xcc);           //跳過64位ROM
        write_18b20(0xbe);           //發出讀取暫存器命令
       
        EA = 0;
        low = read_18b20();           //讀溫度低字節
        value = read_18b20();  //讀溫度高字節
        EA = 1;
        value <<= 8;                   //把溫度的高位左移8位
        value |= low;                   //把讀出的溫度低位放到value的低八位中
        value *= 0.625;               //轉換到溫度值 小數
        return value;                   //返回讀出的溫度 帶小數
}

/******************1ms 延時函數*******************/
void delay_1ms(uint q){
        uint i,j;
        for(i=0;i<q;i++)
                for(j=0;j<120;j++);
}

/******************寫星期函數*******************/
void write_week(uchar hang,uchar add,uchar week)//寫星期函數
{
        if(hang==1)   
                write_com(0x80+add);
        else
                write_com(0x80+0x40+add);          
        switch(week){
                case 1:write_data('M');//星期數為1時,顯示
                           write_data('O');
                           write_data('N');
                           break;
          
                case 2:write_data('T');//星期數據為2時顯示
                           write_data('U');
                           write_data('E');
                           break;
               
                case 3:write_data('W');//星期數據為3時顯示
                           write_data('E');
                           write_data('D');
                           break;
               
                case 4:write_data('T');//星期數據為4是顯示
                           write_data('H');
                           write_data('U');
                           break;
               
                case 5:write_data('F');//星期數據為5時顯示
                           write_data('R');
                           write_data('I');
                           break;
               
                case 6:write_data('S');//星期數據為6時顯示
                           write_data('T');
                           write_data('A');
                           break;
               
                case 7:write_data('S');//星期數據為7時顯示
                           write_data('U');
                           write_data('N');
                           break;
        }
}

/*************時鐘顯示***************/
void init_1602_ds1302(){
        write_sfm2_ds1302(1,1,shi);                   //顯示時
        write_sfm2_ds1302(1,4,fen);                   //顯示分
        write_sfm2_ds1302(1,7,miao);           //顯示秒
        write_week(2,12,week);
  //write_sfm1(1,14,week);                           //顯示星期
        write_sfm3_18B20(1,11,temperature);           //顯示溫度
       
        write_sfm2_ds1302(2,2,nian);   //顯示年
        write_sfm2_ds1302(2,5,yue);           //顯示月       
        write_sfm2_ds1302(2,8,ri);           //顯示日        
}                                                                          

/*************定時器0初始化程序***************/
void init_time0()          {
        EA   = 1;                   //開總中斷
        TMOD = 0X01;          //定時器0、工作方式1
        ET0  = 1;                  //開定時器0中斷
        TR0  = 1;                  //允許定時器0定時
}

/*****************主函數********************/
void main(){       
        delay_1ms(150);
        P0 = P1 = P2 = P3 = 0xff;                //單片機IO口初始化為1
        init_time0();                 //初始化定時器
        init_ds1302();                 //ds1302初始化
        init_1602();                 //lcd1602初始化
        init_1602_dis_csf(); //lcd1602初始化顯示
        init_eeprom();       //開始初始化保存的數據
        temperature = read_temp();        //先讀出溫度的值
        delay_1ms(650);
        temperature = read_temp();        //先讀出溫度的值
        while(1){
                if(flag_200ms == 1){       
                        flag_200ms = 0;
                        if(menu_1 == 0){
                                read_time();                  //讀時間
                                temperature = read_temp();        //先讀出溫度的值
                                init_1602_ds1302();   //顯示時鐘
                        }
                }
                delay_1ms(1);
        }
}

/**************定時器0中斷程序*****************/
void time0() interrupt 1{                         
        static uchar value;
        TH0 = 0X3C;
        TL0 = 0XB0;           //50ms
        value ++;          
        if((value % 2) == 0)         //100ms  
                flag_100ms = 1;         
        if(value >= 6)                         //200ms
        {
                value = 0;
                flag_200ms = 1;
        }
}




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

使用道具 舉報

沙發
ID:303383 發表于 2018-4-26 16:26 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

板凳
ID:213173 發表于 2018-4-26 17:41 | 只看該作者
void init_1602()         //lcd1602初始化設置
{
        write_com(0x38);//設置16*2顯示,5*7點陣,8位數據接口
        write_com(0x01);//顯示清零,數據指針清零
        write_com(0x0c);//設置開顯示,不顯光標
        write_com(0x06);//設置寫一個字符后地址指針加1
}
回復

使用道具 舉報

地板
ID:308346 發表于 2018-4-30 09:48 | 只看該作者
wulin 發表于 2018-4-26 17:41
void init_1602()         //lcd1602初始化設置
{
        write_com(0x38);//設置16*2顯示,5*7點陣,8位數據接 ...

還是和原來一樣誒
回復

使用道具 舉報

5#
ID:308346 發表于 2018-4-30 09:49 | 只看該作者
小貓貓愛吃魚 發表于 2018-4-26 16:26
你好!檢查液晶對應開發板的接口吧

你好,接口是按照開發板給的原理圖接的,核實了很多遍沒有錯啊
回復

使用道具 舉報

6#
ID:319274 發表于 2018-4-30 11:34 | 只看該作者
可能排線出現了問題
回復

使用道具 舉報

7#
ID:213173 發表于 2018-4-30 12:43 | 只看該作者

還是沒有仔細看,難怪玩不轉。
回復

使用道具 舉報

8#
ID:319344 發表于 2018-4-30 14:28 | 只看該作者
問題解決了嗎?你說第一行和第二行都能靜態顯示,我很好奇黑塊還能出現在什么地方,貼個圖才好幫你更好的分析呀
回復

使用道具 舉報

9#
ID:111634 發表于 2018-4-30 21:18 | 只看該作者
本帖最后由 zl2168 于 2018-4-30 21:20 編輯

給你介紹一個正確有效看得懂的案例,自己對照查錯吧!
實例67  LCD1602顯示屏顯示
⒈ LCD1602顯示屏簡介
⑴ 引腳功能    …
⑵ 內部寄存器    …
⑶ 控制指令    …
⑷ 操作時序    …
⒉ 電路設計    …
⒊ 程序設計    …
⒋ Keil調試    …
⒌ Proteus仿真    …
Proteus仿真一下,確認有效。
實例61 LCD1602顯示屏顯示.rar (49.26 KB, 下載次數: 135)

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1。書中電路和程序設計有詳細說明,程序語句條條有注解。
回復

使用道具 舉報

10#
ID:308346 發表于 2018-5-1 12:54 | 只看該作者
實際圖就是這樣,第一行顯示黑塊,但是它是有頻率的閃

0.JPG (2.02 MB, 下載次數: 82)

0.JPG
回復

使用道具 舉報

11#
ID:302494 發表于 2018-8-6 20:56 | 只看該作者
兄弟,你解決問題了沒有?我遇見同樣的問題了
回復

使用道具 舉報

12#
ID:96682 發表于 2018-8-7 12:04 | 只看該作者
檢查端口是否設置正確,從圖片上看連數碼管和 LED 都顯示了實為不該,正確應為只有 LCD 液晶屏顯示
回復

使用道具 舉報

13#
ID:389903 發表于 2018-9-5 15:45 | 只看該作者
sbit rs=P2^5;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit rw=P2^4;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit e =P2^6;         //片選信號   下降沿觸發
回復

使用道具 舉報

14#
ID:389903 發表于 2018-9-5 15:47 | 只看該作者
sbit rs=P2^5;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit rw=P2^4;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
sbit e =P2^6;         //片選信號   下降沿觸發

這幾個端口對照開發板的電路圖查一下。我記得好像是
sbit rs=P2^6;         
sbit rw=P2^5;         
sbit e =P2^7;         

只顯第一排黑塊是沒有LCD1602沒有正常初始化

回復

使用道具 舉報

15#
ID:308437 發表于 2018-9-5 16:41 | 只看該作者
小貓貓愛吃魚 發表于 2018-4-26 16:26
你好!檢查液晶對應開發板的接口吧

同意這個說法
回復

使用道具 舉報

16#
ID:468289 發表于 2019-1-15 22:59 | 只看該作者
剛剛遇到了,最后通過一根根線排查接好就行了。
不接單片機是顯示一排黑方塊的,lz一閃一閃的可能是接觸不良,,
其他有些人說是延時問題,但程序我看著沒問題...
回復

使用道具 舉報

17#
ID:449525 發表于 2019-2-23 11:06 | 只看該作者
小伙,之前在論壇看到你的問題。我沒事自己畫的電路板也出現了,在洞洞板上是可以的。軟件也是可以用的,最后查到是硬件問題,有2個引腳連接到一起了。如果有別人遇到,可以查下管腳。
回復

使用道具 舉報

18#
ID:69072 發表于 2019-2-23 12:12 | 只看該作者
考慮第二排地址錯誤
回復

使用道具 舉報

19#
ID:704182 發表于 2020-3-7 18:09 來自手機 | 只看該作者
一樣的開發板,一樣的問題
回復

使用道具 舉報

20#
ID:704304 發表于 2020-3-7 21:58 | 只看該作者
Hellen_z 發表于 2020-3-7 18:09
一樣的開發板,一樣的問題

他是插口插反了,你可以去檢查試試看
回復

使用道具 舉報

21#
ID:708010 發表于 2020-3-28 21:07 | 只看該作者
我也遇到了這個問題,然后拔掉了單片機,測了一下D0~D7的電壓,只有D6的電壓為0,請問是這個原因嗎?
回復

使用道具 舉報

22#
ID:973855 發表于 2022-2-22 08:48 | 只看該作者
void write_com(uchar com)
{
        e=0;
        rs=0;
        rw=0;
        P0=com;
        delay_uint(3);
        e=1;
        delay_uint(25);
        e=0;
}
這些是定義起來干嘛的
回復

使用道具 舉報

23#
ID:514901 發表于 2022-2-22 09:10 | 只看該作者
馬克扎西 發表于 2018-5-1 12:54
實際圖就是這樣,第一行顯示黑塊,但是它是有頻率的閃

屏幕接反了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久亚洲精品 | 亚洲九九色 | av免费看片 | 韩日视频在线观看 | 久久久久久久久久久国产 | 久草网站| 国产成人精品综合 | 国产精品视频免费观看 | 日韩免费一区 | 成人在线视频观看 | 91久久爽久久爽爽久久片 | 国产精品永久在线观看 | 国产精品久久久久久吹潮 | 国产一区视频在线 | 国产一区二区三区免费 | 精品久久亚洲 | 久久精品视频99 | 亚洲一区二区视频 | 久久久久久国产精品久久 | 国产精品91久久久久久 | 欧美极品在线视频 | 成人伊人 | 色视频免费 | 成人av网站在线观看 | 能看的av | 国产精品久久久爽爽爽麻豆色哟哟 | 欧美一级视频 | 激情六月天 | 日本精品视频一区二区 | 日韩在线精品视频 | 九九色综合 | 成人欧美一区二区三区色青冈 | 亚洲精品黄色 | 色噜噜狠狠色综合中国 | 狠狠草视频 | 97国产爽爽爽久久久 | 欧美精品一区二区免费 | 欧美性生活网 | 久久麻豆精品 | 国产精品乱码一区二区三区 | 久久综合爱|