找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2521|回复: 6
打印 上一主题 下一主题
收起左侧

求大佬帮助,LCD1602只显示第一行的黑块

[复制链接]
跳转到指定楼层
楼主
ID:635345 发表于 2020-9-8 21:24 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
LCD1602上电后只显示第一行的黑块,电路也没有问题,求帮助

IMG_20200908_212042.jpg (1000.97 KB, 下载次数: 50)

IMG_20200908_212042.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:88256 发表于 2020-9-8 22:47 | 只看该作者
一般是程序问题,对比度调了吗?把程序发出来看看
回复

使用道具 举报

板凳
ID:635345 发表于 2020-9-9 00:08 来自手机 | 只看该作者
hhdsdy 发表于 2020-9-8 22:47
一般是程序问题,对比度调了吗?把程序发出来看看

#include <REG52.h>#include<intrins.h>//宏定义#define LCM_Data  P0                  //将P0口定义为LCM_Data#define uchar unsigned char #define uint  unsigned int#define w 6                                //定义密码位数//1602的控制脚sbit lcd1602_rs=P2^5;sbit lcd1602_rw=P2^6;sbit lcd1602_en=P2^7;sbit Scl=P3^4;                        //24C02串行时钟sbit Sda=P3^5;                        //24C02串行数据sbit ALAM = P2^1;                //报警        //sbit KEY = P3^6;                //开锁sbit led = P2^0;                //灯bit  operation=0;                //操作标志位bit  pass=0;                        //密码正确标志bit  ReInputEn=0;                //重置输入允许标志        bit  s3_keydown=0;                //3秒按键标志位bit  key_disable=0;                //锁定键盘标志bit  flag_REC =0;       //串口接受标志位unsigned char buff[5]=0;unsigned char countt0,second;        //t0中断计数器,秒计数器void Delay5Ms(void);                //声明延时函数unsigned char code a[]={0xFE,0xFD,0xFB,0xF7};                                 //控盘扫描控制表//液晶显示数据数组unsigned char code start_line[]        = {"password:       "};unsigned char code name[]                  = { "===Coded Lock==="};        //显示名称unsigned char code Correct[]         = {"     correct    "};                //输入正确unsigned char code Error[]           = {"      error     "};          //输入错误unsigned char code codepass[]        = {"      pass      "}; unsigned char code LockOpen[]        = {"      open      "};                //OPENunsigned char code SetNew[]         = {"SetNewWordEnable"};unsigned char code Input[]           = {"input:          "};                //INPUTunsigned char code ResetOK[]         = {"ResetPasswordOK "};unsigned char code initword[]        = {"Init password..."};unsigned char code Er_try[]                = {"error,try again!"};unsigned char code again[]                = {"input again     "};unsigned char InputData[16];                                                                        //输入密码暂存区unsigned char CurrentPassword[16]={1,3,1,4,2,0};                         //管理员密码(只可在程序中修改)unsigned char TempPassword[16];unsigned char N=0,M=0,flag=0;                                //密码输入位数记数unsigned char ErrorCont;                        //错误次数计数unsigned char CorrectCont;                        //正确输入计数unsigned char ReInputCont;                         //重新输入计数unsigned char code initpassword[16]={0,0,0,0,0,0};                        //输入管理员密码后将密码初始为000000unsigned char  MM[2]={0,0};//=====================5ms延时==============================void Delay5Ms(void){        unsigned int TempCyc = 5552;        while(TempCyc--);}//===================400ms延时==============================void Delay400Ms(void){ unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA--) {  TempCycB=7269;  while(TempCycB--); }}//=============================================================================================//================================24C02========================================================//=============================================================================================void mDelay(uint t) //延时{         uchar i;           while(t--)           {                   for(i=0;i<125;i++)                   {;}           }}   void Nop(void)                  //空操作{         _nop_();                  //仅作延时用一条语句大约1us         _nop_();         _nop_();         _nop_();}/*****24c02程序参照24c02时序图*****//*起始条件*/void Start(void){         Sda=1;         Scl=1;         Nop();         Sda=0;         Nop();} /*停止条件*/void Stop(void){         Sda=0;         Scl=1;         Nop();         Sda=1;         Nop();}/*应答位*/void Ack(void){        Sda=0;        Nop();        Scl=1;        Nop();        Scl=0;}/*反向应答位*/void NoAck(void){         Sda=1;         Nop();         Scl=1;         Nop();         Scl=0;} /*发送数据子程序,Data为要求发送的数据*/void Send(uchar Data){           uchar BitCounter=8;           uchar temp;           do           {                   temp=Data;                                           //将待发送数据暂存temp                   Scl=0;                   Nop();                   if((temp&0x08)==0x08)                   //将读到的数据&0x80                   Sda=1;                   else                    Sda=0;                   Scl=1;                   temp=Data<<1;                                   //数据左移                   Data=temp;                                           //数据左移后重新赋值Data                   BitCounter--;                                   //该变量减到0时,数据也就传送完成了           }           while(BitCounter);                                   //判断是否传送完成           Scl=0;}/*读一字节的数据,并返回该字节值*/uchar Read(void){    uchar temp=0;        uchar temp1=0;        uchar BitCounter=8;        Sda=1;        do        {                Scl=0;                Nop();                Scl=1;                Nop();                if(Sda)                                   //数据位是否为1                        temp=temp|0x11;           //为1 temp的最低位为1(|0x01,就是将最低位变为1)                else                                   //如果为0                        temp=temp&0xfe;           //temp最低位为0(&0xfe(11111110)最低位就是0)                if(BitCounter-1)           //BitCounter减1后是否为真                {                        temp1=temp<<1;           //temp左移                        temp=temp1;                }                BitCounter--;                   //BitCounter减到0时,数据就接收完了        }        while(BitCounter);                   //判断是否接收完成        return(temp);}void WrToROM(uchar Data[],uchar Num,uchar Address){  uchar i;  uchar *PData;  PData=Data;  for(i=0;i<Num;i++)  {  Start();  Send(0xa0);  Ack();  Send(Address+i);  Ack();  Send(*(PData+i));  Ack();  Stop();  mDelay(20);  }}void RdFromROM(uchar Data[],uchar Num,uchar Address){  uchar i;  uchar *PData;  PData=Data;  for(i=0;i<Num;i++)  {  Start();  Send(0xa0);  Ack();  Send(Address+i);  Ack();  Start();  Send(0xa1);  Ack();  *(PData+i)=Read();  Scl=0;  NoAck();  Stop();  }}//==================================================================================================//=======================================LCD1602=#define yi 0x80 //LCD第一行的初始位置,因为LCD1602字符地址首位D7恒定为1(100000000=80)#define er 0x80+40 //LCD第二行初始位置(因为第二行第一个字符位置地址是0x40)//----------------延时函数,后面经常调用----------------------void delay(uint xms)//延时函数,有参函数{        uint x,y;        for(x=xms;x>0;x--)         for(y=110;y>0;y--);}//--------------------------写指令---------------------------void write_1602com(uchar com)//****液晶写入指令函数****{        lcd1602_rs=1;//数据/指令选择置为指令        lcd1602_rw=1; //读写选择置为写        P0=com;//送入数据        delay(1);        lcd1602_en=1;//拉高使能端,为制造有效的下降沿做准备        delay(1);        lcd1602_en=0;//en由高变低,产生下降沿,液晶执行命令}//-------------------------写数据-----------------------------void write_1602dat(uchar dat)//***液晶写入数据函数****{        lcd1602_rs=0;//数据/指令选择置为数据        lcd1602_rw=1; //读写选择置为写        P0=dat;//送入数据        delay(1);        lcd1602_en=1; //en置高电平,为制造下降沿做准备        delay(1);        lcd1602_en=0; //en由高变低,产生下降沿,液晶执行命令}//-------------------------初始化-------------------------void lcd_init(void){        write_1602com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据        write_1602com(0x0c);//开显示不显示光标        write_1602com(0x01);//清显示        write_1602com(0x06);//整屏不移动,光标自动右移
回复

使用道具 举报

地板
ID:213173 发表于 2020-9-9 11:09 | 只看该作者
本帖最后由 wulin 于 2020-9-9 11:14 编辑
hu1007110281 发表于 2020-9-9 00:08
#include #include//宏定义#define LCM_Data  P0                  //将P0口定义为LCM_Data#define uchar unsigned char ...

楼主洋洋洒洒码了这么多代码却把最最重要的主函数mian()丢了,怎么可能正常运行???
回复

使用道具 举报

5#
ID:472268 发表于 2020-9-9 12:16 | 只看该作者
@坛子,有现成代码
回复

使用道具 举报

6#
ID:695749 发表于 2020-9-9 12:21 | 只看该作者
要将问题描述简短,便于阅读。程序更要可阅读,以上的程序是不好阅读的
回复

使用道具 举报

7#
ID:235954 发表于 2020-9-9 12:49 | 只看该作者
调节电位器,降低一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表