找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1548|回复: 3
打印 上一主题 下一主题
收起左侧

超声波lcd1602显示

[复制链接]
跳转到指定楼层
楼主
ID:233672 发表于 2017-12-23 16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
仅供大家参考
   超声波程序.zip (61.16 KB, 下载次数: 15)


#include<reg51.h>
#include<intrins.h>       
#include"lcd.h"
sbit Trig = P2^1;
sbit Echo = P2^0;

unsigned char PuZh[]="Distance:       ";
unsigned char code ASCII[15] =    {'0','1','2','3','4','5','6','7','8','9','.','-','M'};

static unsigned char DisNum = 0; //显示用指针                                  
       unsigned int  time=0;
           unsigned long S=0;

           bit      flag =0;                 //标志位flag
           unsigned char disbuff[4]           ={ 0,0,0,0,};

void Conut(void)
        {
         time=TH0*256+TL0;         //*256是16位计数器的高8位和低八位之分,恢复成16位数的时候要*256
                                                 //    将字节转化成十进制数,比如定时器中装的是0xabcd,转化成十进制就是d+c*16+b*16*16+a*16*16*16=43981。
                                                 //    发现ab*256=(b+a*16)*256=43776,cd=d+c*16=205,43776+205=43981
         TH0=0;
         TL0=0;
       
         S=(time*1.7)/100;     //算出来是CM           其中*0.0172是根据超声的声速、单片机的频率,得出来的一个系数。
         
         if((S>=300)) //超出测量范围显示“-”||flag==1
         {         
                  flag=0;
//                  P1 = 0XFD;
                 
                  DisplayOneChar(0, 1, ASCII[11]);
                  DisplayOneChar(1, 1, ASCII[10]);        //显示个点
                  DisplayOneChar(2, 1, ASCII[11]);
                  DisplayOneChar(3, 1, ASCII[11]);
                  DisplayOneChar(4, 1, ASCII[12]);        //显示M
         }
         else
         {
//                   P1 = 0X00;
                  disbuff[0]=S%1000/100;
                  disbuff[1]=S%1000%100/10;
                  disbuff[2]=S%1000%10 %10;
                  DisplayOneChar(0, 1, ASCII[disbuff[0]]);
                  DisplayOneChar(1, 1, ASCII[10]);        //显示点
                  DisplayOneChar(2, 1, ASCII[disbuff[1]]);
                  DisplayOneChar(3, 1, ASCII[disbuff[2]]);
                  DisplayOneChar(4, 1, ASCII[12]);        //显示M
         }
        }

void zd0() interrupt 1                  //T0中断用来计数器溢出,超过测距范围
{
    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 delayms(unsigned int ms)
{
        unsigned char i=100,j;
        for(;ms;ms--)
        {
                while(--i)
                {
                        j=10;
                        while(--j);
                }
        }
}

void main(void)
{
         TMOD=0x01;                   //设定时器0为工作方式1,GATE=1;
         TH0=0;
         TL0=0;         
         ET0=1;            //开定时器0中断
         EA=1;                           //开启总中断       

        InitLcd1602();
        LcdShowStr(0,0,PuZh);
        while(1)
        {
                 StartModule();
             while(!Echo);                //当RX为零时等待
             TR0=1;                            //开启计数
             while(Echo);                        //当RX为1计数并等待
             TR0=0;                                //关闭计数
                       
         Conut();                        //计算
                 delayms(80);
        }
                       
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:251082 发表于 2018-1-5 20:22 | 只看该作者
看看行不行
回复

使用道具 举报

板凳
ID:459923 发表于 2019-4-20 15:46 | 只看该作者
我能说用这个程序,我的keil直接死机了么
回复

使用道具 举报

地板
ID:373068 发表于 2019-4-23 19:59 | 只看该作者
1602管脚没定义吧。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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