標題: 為什么該程序運行一點都沒反應求大佬詳細解答,感覺自己寫的是超簡簡化版求大佬指.... [打印本頁]

作者: 523633035    時間: 2018-4-16 15:13
標題: 為什么該程序運行一點都沒反應求大佬詳細解答,感覺自己寫的是超簡簡化版求大佬指....
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

#define Lcd1602_DB  P0          
sbit Lcd1602_RS = P2^6;
sbit Lcd1602_RW = P2^5;
sbit Lcd1602_EN = P2^7;
       
sbit Trig = P2^1;
sbit Echo = P2^0;
static unsigned char DisNum = 0;                                  
unsigned int  time=0;
unsigned long S=0;
bit      flag =0;
unsigned char disdat[4] ={ 0,0,0,0,};

void delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}


void Lcd1602_Write_com(unsigned char cmd)
{
        Lcd1602_RS=0;
        P0=cmd;
        delayms(1);
        Lcd1602_EN =1;
    delayms(1);
        Lcd1602_EN =0;
    delayms(1);
}

void Lcd1602_Write_Data(unsigned char shu)
{
        Lcd1602_RS=1;
        P0=shu;
        delayms(1);
        Lcd1602_EN =1;
    delayms(1);
        Lcd1602_EN =0;
        delayms(1);
}

void write_1602(uchar add,uchar sj)
{
        Lcd1602_Write_com(0*80+0*40+add);
        Lcd1602_Write_Data(sj) ;
}               

void zifuchuan(uchar *ch)         
{
    while(*ch!=0)   
    Lcd1602_Write_Data(*ch++);
        delayms(1);
}                                                                                                                                                                                                                    //仔細看一下那個程序

void LcdInit()                                               
{
         Lcd1602_Write_Data(0x38);  
         Lcd1602_Write_Data(0x0c);  
         Lcd1602_Write_Data(0x06);  
         Lcd1602_Write_Data(0x01);  
         Lcd1602_Write_Data(0x80);  
         zifuchuan("TFB") ;
}
  void Conut(void)
{
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
         S=time/58;
         disdat[0]=S%1000/100;                          
         disdat[1]=S%1000%100/10;                  
         disdat[2]=S%1000%10 %10;                  
         write_1602(1,disdat[1]+0*30);                                         
         write_1602(2,disdat[2]+0*30);               
         write_1602(3,disdat[3]+0*30);
         write_1602(5,'c');
     write_1602(6,'m');
         
         

         }                                  


void zd0() interrupt 1                  
  {
    flag=1;                                                       
  }

void  StartModule()                         
  {
          Trig=1;                                            
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          Trig=0;
  }




void main(void)
{
         delayms(1);
     LcdInit();
         TMOD=0x01;                  
         TH0=0;
         TL0=0;         
         ET0=1;            
         EA=1;                          



        while(1)
{
         StartModule();
     while(!Echo);               
         TR0=1;                            
     while(Echo);                       
         TR0=0;                       
     Conut();               
     delayms(1);
        }
                       
}

作者: wulin    時間: 2018-4-16 15:13
523633035 發(fā)表于 2018-4-16 21:14
求指點謝謝,謝謝 謝謝。

LCD初始化程序寫錯了!改這樣試試
void LcdInit()                                                
{
        Lcd1602_Write_com(0x38);  
        Lcd1602_Write_com(0x0c);  
        Lcd1602_Write_com(0x06);  
        Lcd1602_Write_com(0x01);  
        Lcd1602_Write_com(0x80);  
        zifuchuan("TFB") ;
}
作者: 523633035    時間: 2018-4-16 21:09
大佬們這是單片機超聲波測距的程序
作者: 523633035    時間: 2018-4-16 21:14
標題: RE: 為什么該單片機超聲波測距程序運行沒反應求大佬詳細解答求指點急
求指點謝謝,謝謝 謝謝。
作者: 523633035    時間: 2018-4-17 14:52
wulin 發(fā)表于 2018-4-17 10:40
LCD初始化程序寫錯了!改這樣試試
void LcdInit()                                                
{ ...

對確實是這樣COM設置的是地址這個地方粘貼時出錯了,謝謝?墒沁是顯示不出來求大佬于百忙中再指點一下謝謝
作者: wulin    時間: 2018-4-17 16:24
523633035 發(fā)表于 2018-4-17 14:52
對確實是這樣COM設置的是地址這個地方粘貼時出錯了,謝謝?墒沁是顯示不出來求大佬于百忙中再指點一下 ...

我沒有超聲波傳感器用來測試,只是把LCD1602驅動程序修改后驗證了一下,可以正常顯示字符。你如果還有問題可以按模塊逐一調試,分別調通了再統一調試,否則你搞不清問題在哪里。



作者: wulin    時間: 2018-4-17 17:50
523633035 發(fā)表于 2018-4-17 14:52
對確實是這樣COM設置的是地址這個地方粘貼時出錯了,謝謝。可是還是顯示不出來求大佬于百忙中再指點一下 ...

下面兩個函數都寫錯了,改后的效果是不是你想要的?
void write_1602(uchar add,uchar sj)
{
        Lcd1602_Write_com(0x80+0x40+add);
        Lcd1602_Write_Data(sj);
}

void Conut(void)
{
        time=TH0*256+TL0;
        TH0=0;
        TL0=0;
//        S=time/58;
        S=125;//這是隨便寫的數,用以驗證此程序
        disdat[0]=S%1000/100;
        disdat[1]=S%1000%100/10;
        disdat[2]=S%1000%10 %10;
        write_1602(1,disdat[0]+0x30);
        write_1602(2,disdat[1]+0x30);
        write_1602(3,disdat[2]+0x30);
        write_1602(5,'c');
        write_1602(6,'m');
}








歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1