找回密码
 立即注册

QQ登录

只需一步,快速开始

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

为什么该程序运行一点都没反应求大佬详细解答,感觉自己写的是超简简化版求大佬指....

[复制链接]
ID:301339 发表于 2018-4-16 15:13 | 显示全部楼层 |阅读模式
5黑币
#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);
        }
                       
}

最佳答案

查看完整内容

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") ; }
回复

使用道具 举报

ID:213173 发表于 2018-4-16 15:13 | 显示全部楼层
523633035 发表于 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") ;
}
回复

使用道具 举报

ID:301339 发表于 2018-4-16 21:09 | 显示全部楼层
大佬们这是单片机超声波测距的程序
回复

使用道具 举报

ID:301339 发表于 2018-4-16 21:14 | 显示全部楼层

RE: 为什么该单片机超声波测距程序运行没反应求大佬详细解答求指点急

求指点谢谢,谢谢 谢谢。
回复

使用道具 举报

ID:301339 发表于 2018-4-17 14:52 | 显示全部楼层
wulin 发表于 2018-4-17 10:40
LCD初始化程序写错了!改这样试试
void LcdInit()                                                
{ ...

对确实是这样COM设置的是地址这个地方粘贴时出错了,谢谢。可是还是显示不出来求大佬于百忙中再指点一下谢谢
回复

使用道具 举报

ID:213173 发表于 2018-4-17 16:24 | 显示全部楼层
523633035 发表于 2018-4-17 14:52
对确实是这样COM设置的是地址这个地方粘贴时出错了,谢谢。可是还是显示不出来求大佬于百忙中再指点一下 ...

我没有超声波传感器用来测试,只是把LCD1602驱动程序修改后验证了一下,可以正常显示字符。你如果还有问题可以按模块逐一调试,分别调通了再统一调试,否则你搞不清问题在哪里。
无标题.jpg

回复

使用道具 举报

ID:213173 发表于 2018-4-17 17:50 | 显示全部楼层
523633035 发表于 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');
}

无标题1.jpg

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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