找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5194|回复: 6
收起左侧

为什么lcd1602只亮不显示

[复制链接]
ID:279295 发表于 2020-4-12 11:22 | 显示全部楼层 |阅读模式
上电,1602有亮度,显示是小黑块,但不显示数据

程序如下:


#include "reg52.h"
#include "type.h"

bit flag;
uchar model=0;  //模式

uchar temp1H=35; //上限值
uchar temp2H=35; //上限值
uchar temp3H=35; //上限值
uchar hum1H=50; //上限值
uchar hum2H=50; //上限值
uchar hum3H=50; //上限值
uchar temp_L=10;
uchar  date[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char temp1=0,temp2=0,temp3=0,hum1=0,hum2=0,hum3=0;
#define SEND_MESSA_TO_YOUR "at+cmgs=\"18584002126\"\r\n"    //填入你手上的手机号码 不是板子的

#include "LCD1602.H"
sbit set=P1^6;
sbit add=P3^5;
sbit min=P3^4;
sbit beep=P3^6;
sbit led1=P1^2;
sbit led2=P1^1;

/***********模拟开关*********************/
sbit CS_4052=P1^0;
sbit B_4052=P1^1;
sbit A_4052=P1^2;
uchar fen=0; //定时发送短信计时
bit sendFlag=0; //发送短信标志
void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)
{unsigned int i,j;
   for(i=0;i<ms;i++)
    for(j=0;j<100;j++);
}
void Uart_Send(uchar dat)     //发送一字节   
{
  SBUF=dat;
  while(!TI);
  TI=0;
}
//发送一串字符到串口
void Uart_Sends(char* data_at)  
{
    unsigned char cnt=0;
    while(*(data_at+cnt))    //判断一串数据是否结束
    {
        Uart_Send(*(data_at+cnt));
        cnt++;
    }
        
}
void select(uchar num)        
{
  if(num==1)     //上位机串口使能
    {
     CS_4052=0;
     B_4052=0;
     A_4052=0;
    }
else  if(num==2)     //CC2530串口使能
    {
     CS_4052=0;
     B_4052=0;
     A_4052=1;
    }
else  if(num==3)     //wifi串口使能
    {
     CS_4052=0;
     B_4052=1;
     A_4052=0;
    }
}
//发送短信函数
void Send_SMS(void)
{
    uchar yy=1;
   
  select(1);    //GSM模块串口使能
    delay1ms(100);
    Uart_Sends("AT+CMGF=1\r");//设置中文方式发送
    delay1ms(800);
    delay1ms(1000);
    Uart_Sends(SEND_MESSA_TO_YOUR);                                                                                             
    delay1ms(1000);   
switch (yy)                                             
{                                                
   
  case 1 : Uart_Sends("wendu1=\r\n");                                   
           Uart_Send(temp1/10+0x30);
           Uart_Send(temp1%10+0x30);
           Uart_Sends(",wendu2=");
           Uart_Send(temp2/10+0x30);
           Uart_Send(temp2%10+0x30);
           Uart_Sends(",wendu3=");
           Uart_Send(temp3/10+0x30);
           Uart_Send(temp3%10+0x30);
           Uart_Sends("\r\nshidu1=\r\n");     
           Uart_Send(hum1/10+0x30);
           Uart_Send(hum1%10+0x30);
       Uart_Sends(",shidu2=");
           Uart_Send(hum2/10+0x30);
           Uart_Send(hum2%10+0x30);
       Uart_Sends(",shidu3=");
           Uart_Send(hum3/10+0x30);
           Uart_Send(hum3%10+0x30);
           Uart_Sends("\r\n");
             if(temp1>temp1H)
             {
              Uart_Sends("wendu1 Warning!!!\r\n");
             }
             if(temp2>temp2H)
             {
              Uart_Sends("wendu2 Warning!!!\r\n");
             }
             if(temp3>temp3H)
             {
              Uart_Sends("wendu3 Warning!!!\r\n");
             }
             if(hum1>hum1H)
             {
              Uart_Sends("hum1 Warning!!!\r\n");
             }
             if(hum2>hum2H)
             {
              Uart_Sends("hum2 Warning!!!\r\n");
             }
             if(hum3>hum3H)
             {
              Uart_Sends("hum3 Warning!!!\r\n");
             }            
            
         
            break;    //烟雾报警
  
}                                       
                             
   Uart_Send(0x1a);//以0x1a来结束,表示内容结束,发送短信            
                                                                  
}
void key()
  {
        uchar i=0;
        
   if(!set) //检测设置按键
     {
      while(!set);
      model++;
     if(model==7)
      {
         model=0;   
      }
     if(model==1)//设置模式显示
     {
          WRITE_LCD1602_COM(0x80);
        for(i=0;i<16;i++)
            WRITE_LCD1602_DAT(DIS_TAB3[i]);
            WRITE_LCD1602_COM(0x80+0x40);
            for(i=0;i<16;i++)
            WRITE_LCD1602_DAT(DIS_TAB4[i]);
            WRITE_LCD1602_COM(0x80+0x40+9);
     }
else if(model==0)//正常模式显示
  {   
          WRITE_LCD1602_COM(0x80);
      for(i=0;i<16;i++)
            WRITE_LCD1602_DAT(DIS_TAB1[i]);
            WRITE_LCD1602_COM(0x80+0x40);
            for(i=0;i<16;i++)
            WRITE_LCD1602_DAT(DIS_TAB2[i]);
            WRITE_LCD1602_COM(0x80+0x40+9);   
    }
     
   
      
     }
else  if(!add)
    {
     while(!add);
     switch(model)
       {
     case 1: if(temp1H<90) temp1H++;        break;
       case 2: if(temp2H<90) temp2H++;        break;
       case 3: if(temp3H<90) temp3H++;       break;
         case 4: if(hum1H<90)  hum1H++;        break;
         case 5: if(hum2H<90)  hum2H++;        break;
         case 6: if(hum3H<90)  hum3H++;        break;
         default:break;
       }

   
    }
else   if(!min)
    {
     while(!min);
     switch(model)
       {
       case 1: if(temp1H>0) temp1H--;        break;
       case 2: if(temp2H>0) temp2H--;        break;
       case 3: if(temp3H>0) temp3H--;        break;
         case 4: if(hum1H>0)  hum1H--;        break;
         case 5: if(hum2H>0)  hum2H--;        break;
         case 6: if(hum3H>0)  hum3H--;        break;
         default:break;
       }

   
    }
  
  }
     void beeps()
      {
      static uchar count;
      count++;
      if(count<20)
      beep=0;
else if(count<40)      
      beep=1;
      else
      count=0;
      
      }

     void control()//报警检测控制
      {
     static uchar flagsend=0;
            
          if((temp1>temp1H)||(temp2>temp2H)||(temp3>temp3H)||
                (hum1>hum1H)||(hum2>hum2H)||(hum3>hum3H))     //温度控制
           {
             beeps();      // 蜂鸣器报警
              if(flagsend==0)   
                {   
               flagsend=1;            
                  Send_SMS();
                }
           }
        else  
           {
                flagsend=0;     
            beep=1;// 关闭蜂鸣器报警
           }

      }


   void rec_cc2530data()
   {
        select(2);      //选通 cc2530 串口
     ES=1; //串口接收中断
    if(date[0]==0x55)
    {   
         date[0]=0;
         if((date[1]==1)&&(date[2]+date[3]==date[4]))      //第一路    数据
         {
          date[1]=0;
          temp1=date[2];
          hum1=date[3];
         }
          if((date[1]==2)&&(date[2]+date[3]==date[4]))  //第二路
         {
         date[1]=0;
          temp2=date[2];
          hum2=date[3];
         }
          if((date[1]==3)&&(date[2]+date[3]==date[4]))   //第三路
         {
          date[1]=0;
          temp3=date[2];
          hum3=date[3];
         }
     
    }
   
   }
   void send_pcdata() //上传上位机数据
   {
        select(1);      //选通 上位机串口
        ES=0; //关闭串口接收中断
          Uart_Sends("温度1:");
        delay1ms(10);
        Uart_Send(temp1%100/10+'0');
        delay1ms(10);
        Uart_Send(temp1%10+'0');   
        Uart_Sends("\r\n");
        delay1ms(10);
        Uart_Sends("温度2:");
        delay1ms(10);
        Uart_Send(temp2%100/10+'0');
        delay1ms(10);
        Uart_Send(temp2%10+'0');   
        Uart_Sends("\r\n");  
        delay1ms(10);

        Uart_Sends("温度3:");
        delay1ms(10);
        Uart_Send(temp3%100/10+'0');
        delay1ms(10);
        Uart_Send(temp3%10+'0');   
        Uart_Sends("\r\n");  

           Uart_Sends("湿度1:");
        delay1ms(10);
        Uart_Send(hum1%100/10+'0');
        delay1ms(10);
        Uart_Send(hum1%10+'0');   
        Uart_Sends("\r\n");
        delay1ms(10);
        Uart_Sends("湿度2:");
        delay1ms(10);
        Uart_Send(hum2%100/10+'0');
        delay1ms(10);
        Uart_Send(hum2%10+'0');   
        Uart_Sends("\r\n");  
        delay1ms(10);

        Uart_Sends("湿度3:");
        delay1ms(10);
        Uart_Send(hum3%100/10+'0');
        delay1ms(10);
        Uart_Send(hum3%10+'0');   
        Uart_Sends("\r\n");  
           delay1ms(10);
   }
     //定时器0初始化
     void Timer0Init(void)        //50毫秒@11.0592MHz
{
     
    TMOD &= 0xF0;        //设置定时器模式
    TMOD |= 0x01;        //设置定时器模式
    TL0 = 0x00;        //设置定时初值
    TH0 = 0x4C;        //设置定时初值
    TF0 = 0;        //清除TF0标志
    TR0 = 1;        //定时器0开始计时
    ET0=1;
}

void main()
{
   
    init_1602();
    TMOD=0x20;     // T1定时方式2
    SCON=0x40;//串行工作 方式1
    PCON=0x00; //不加倍
    TH1=TL1=0xfd; //定时器1赋初值  保证波特率9600
    TR1=1;          //开定时器1
    REN=1;          //允许串口接收
    ES=1;          //打开串口中断
    EA=1;          //开总中?

    Timer0Init();
    while(1)
    {
         
         control(); //控制
         key();   //按键功能
      

          if(sendFlag==0)
            {
            sendFlag=1; //代表已经发过一次,不在发了
            Send_SMS(); //发送短信
            }
         
              rec_cc2530data();
              delay1ms(50);
            display();
    }

}

   void serial()interrupt 4        //串口中断服务函数
  {
   static uchar j;
   
   if(!RI);
   RI=0;            //清楚接收完毕标志
   date[j]=SBUF;
   if(date[0]==0x55)  //判断接收到的第一位为传感器所发数据
      j++;
  else
      j=0;


   if(j==5)           //接收传感器所发数据字节
     j=0;
  
   
  }
void timer0() interrupt  1 //50ms
{
static uchar count=0,miao=0;
   
  TL0 = 0x00;        //设置定时初值
    TH0 = 0x4C;        //设置定时初值
  count++;
    if(count>20)
    {
        count=0;
       miao++;
        if(miao>60)
        {
            
            miao=0;
          fen++;
            if(fen>=1)
            {
              fen=0;
                sendFlag=0;
            }
        }
        
    }

}

回复

使用道具 举报

ID:641629 发表于 2020-4-12 16:00 | 显示全部楼层
先不管你的程序, 你看看PIN3  灰度调节引脚    如果有设置可调电阻  试试调整一下电阻值
回复

使用道具 举报

ID:584814 发表于 2020-4-12 18:09 | 显示全部楼层
做带显示的,行把显示程序调整好,再接下去做其他。
回复

使用道具 举报

ID:406255 发表于 2020-4-12 20:12 | 显示全部楼层
先确认LCD1602的显示对比度,测试好LCD1602的显示程序
回复

使用道具 举报

ID:279295 发表于 2020-4-12 22:51 | 显示全部楼层
liuxuhe 发表于 2020-4-12 16:00
先不管你的程序, 你看看PIN3  灰度调节引脚    如果有设置可调电阻  试试调整一下电阻值

我在VSS和V0之间加了一个3k的电阻
回复

使用道具 举报

ID:411550 发表于 2020-4-13 10:32 | 显示全部楼层
1:亮度问题,需要调电阻值 2:程序问题,修改驱动程序 3:电路问题,引脚没有接到位
回复

使用道具 举报

ID:591189 发表于 2020-4-13 11:14 | 显示全部楼层
脸盲啊 发表于 2020-4-12 22:51
我在VSS和V0之间加了一个3k的电阻

这里是要滑动变阻器的,网上电路图应该没人会让你装电阻。。。。你说你显示小黑快说明电阻不对,应该是电阻小了,换成10K滑动变阻器再调一下。建议先做个仿真,也不麻烦,可以直接看出你的程序是否有输出,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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