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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6069|回復: 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;
            }
        }
        
    }

}

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

使用道具 舉報

沙發
ID:641629 發表于 2020-4-12 16:00 | 只看該作者
先不管你的程序, 你看看PIN3  灰度調節引腳    如果有設置可調電阻  試試調整一下電阻值
回復

使用道具 舉報

板凳
ID:584814 發表于 2020-4-12 18:09 | 只看該作者
做帶顯示的,行把顯示程序調整好,再接下去做其他。
回復

使用道具 舉報

地板
ID:406255 發表于 2020-4-12 20:12 | 只看該作者
先確認LCD1602的顯示對比度,測試好LCD1602的顯示程序
回復

使用道具 舉報

5#
ID:279295 發表于 2020-4-12 22:51 | 只看該作者
liuxuhe 發表于 2020-4-12 16:00
先不管你的程序, 你看看PIN3  灰度調節引腳    如果有設置可調電阻  試試調整一下電阻值

我在VSS和V0之間加了一個3k的電阻
回復

使用道具 舉報

6#
ID:411550 發表于 2020-4-13 10:32 | 只看該作者
1:亮度問題,需要調電阻值 2:程序問題,修改驅動程序 3:電路問題,引腳沒有接到位
回復

使用道具 舉報

7#
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产精品一区二区夜夜嗨 | 欧美中文在线 | 亚洲一区二区三区四区五区午夜 | 国产成人精品一区二区三区网站观看 | 亚洲成人精品国产 | 久久久久国产精品一区二区 | 美女国产 | 毛片视频免费 | 亚洲天堂av在线 | 在线观看涩涩视频 | 99久久精品一区二区毛片吞精 | 国产精品久久久久久久久免费樱桃 | 亚洲精品在线视频 | 中文字幕a√ | 男女免费网站 | 91久久精品日日躁夜夜躁国产 | 91九色porny首页最多播放 | 日韩爱爱网站 | 欧美高清视频一区 | 美女张开腿露出尿口 | 97精品久久 | 成人欧美一区二区三区在线播放 | 久久精品aaa | 99精品在线| av免费网站在线观看 | 久久福利电影 | 一级毛片在线播放 | jdav视频在线观看免费 | 久久成人免费 | 奇米av | 狠狠爱一区二区三区 | 天天操夜夜拍 | 三级欧美| 九九99靖品| 综合中文字幕 | 91在线免费观看网站 | 欧美国产激情二区三区 | 国产高清在线精品一区二区三区 | 欧洲精品在线观看 | 亚洲精品www久久久久久广东 | 精品国产乱码一区二区三区a |