3029|4

16

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

超声波+1602 [复制链接]

超声波+1602显示

 
/*============================================================
//HC-SRO4 超声波测距模块 程序
使用12M或11.0592M晶振,实测使用11.0592M TX信号触发 RX信号回响
=============================================================*/

#include<reg52.h>
#define uchar unsigned char 
#define uint unsigned int 
sbit  RX = P2^0;
sbit  TX = P2^1;
sbit rs=P2^4;
sbit rw=P2^5;
sbit e=P2^6;

 
uint  i, timerH,timerL,time=0;
unsigned long S=0;
uint disbuff[]={0,0,0};

//************************************************
//延时函数,在12MHz的晶振频率下
//大约50us的延时
//************************************************
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
        for(j=19;j>0;j--);
}

//************************************************
//延时函数,在12MHz的晶振频率下
//大约50ms的延时
//************************************************
void delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}

void write_com(uchar com)
{
e=0;
rs=0;
rw=0;
P0=com;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
}

void write_data(uchar dat)
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
}

void init(void)
{
delay_50us(300);
write_com(0x38);
delay_50us(100);
write_com(0x38);
delay_50us(100);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}

/********************************************************/
    void Conut(void)
{
time=timerH*256+timerL;
S=time*0.0172;     //算出来是CM
    if(S<=999)         
 disbuff[0]=S/100;
 disbuff[1]=S%100/10;
 disbuff[2]=S%100%10;
 }
 write_com(0xc0);
 for(i=0;i<3;i++)
  {
write_data(disbuff);
delay_50us(20);
    }     
}

     void  StartModule()          //启动模块
  {
 TX=1;                     
 delay_50us(1);
 TX=0;
  } 
 
/*********************************************************/
void main(void)
{
init();            //LCM初始化
TMOD=0x01;   //设T0为方式1
TH0=0;
TL0=0;          
ET0=1;             //允许T0中断
EA=1;   //开启总中断*/
while(1)
 {
    StartModule();
    while(!RX);//当RX为零时等待
    TR0=1;    //开启计数
    while(RX);//当RX为1计数并等待
    TR0=0;//关闭计数
         Conut();//计算 
 }
}

void t0() interrupt 1
{
 TH0=0;
 TL0=0;
 timerH=TH0;
 timerL=TL0;
}

自己写的程序,请大家帮帮忙,为什么1602显示是3个乱码,(1602没坏)  谢谢
此帖出自51单片机论坛

最新回复

分段测试一下吧,先在初始化1602后加个死循环while(1);看黑块是否清除。 单测显示部分,关闭中断只显示一部分数据验证是否正常。 再看看其它部分,看是看不出来滴。  详情 回复 发表于 2012-2-29 23:40
点赞 关注
 

回复
举报

7172

帖子

195

TA的资源

五彩晶圆(高级)

沙发
 
测距程序怎么这么短
此帖出自51单片机论坛
 
 
 

回复

4005

帖子

0

TA的资源

版主

板凳
 
分段测试一下吧,先在初始化1602后加个死循环while(1);看黑块是否清除。
单测显示部分,关闭中断只显示一部分数据验证是否正常。
再看看其它部分,看是看不出来滴。
此帖出自51单片机论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

4
 
谢谢  单测显示部分,关闭中断,显示正常 一旦打开中断,就出现乱码 问题应该是出现在中断程序那里,不过我怎么改,都会出现乱码
此帖出自51单片机论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(中级)

5
 
知道原因了   disbuff[0]=S/100;
disbuff[1]=S%100/10;
disbuff[2]=S%100%10;
}
write_com(0xc0);
for(i=0;i<3;i++)
  {
write_data(disbuff);
delay_50us(20);
问题出现在这里  write_data(disbuff);
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表