找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3720|回复: 3
收起左侧

超声波测距4位共阳数码管显示,烧录之后数码管只闪了下,这是什么原因,求个位大侠

[复制链接]
回帖奖励 1 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次(中奖概率 50%)
ID:139175 发表于 2016-10-24 21:47 | 显示全部楼层 |阅读模式
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar time,distance,ge,shi,bai;
sbit Trig=P0^0;  //超声波发射
sbit Echo=P0^1;  //回波接收
sbit smg0=P2^0;  //数码管0位选
sbit smg1=P2^1;  //数码管1位选
sbit smg2=P2^2;  //数码管2位选
sbit smg3=P2^3;  //数码管3位选
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};    //四位共阳数码管段码

void delay(uchar i)
{
  uchar j,k;
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
/*
**********************************************
* 函 数 名 :超声波测距
* 功能说明 :启动超声波,并计算距离
* 形    参 :无
* 返 回 值 :int distance
**********************************************
*/
int chaoshengbo(void)
{
  TH0=0;
  TL0=0;
  Trig=0;
  delay(1);
  Trig=1;
  delay(10);
  while(!Echo);
  {
    TR0=1;
  }
  while(Echo);
  {
    TR0=0;
time=TH0*256+TL0;
distance=(time*1.7)/100;
return distance;
  }
}

/*
**********************************************
* 函 数 名 :测量距离数码管显示
* 功能说明 :用四位共阳数码管显示测量距离
* 形    参 :uint distance
* 返 回 值 :无
**********************************************
*/

void display(int distance)
{
  bai=distance/100;
  shi=distance%100/10;
  ge=distance/10;
  P0=table[bai];
  smg0=0;
  delay(5);
  smg0=1;
  P0=table[bai];
  smg0=0;
  delay(5);
  smg0=1;
  P0=table[shi];
  smg1=0;
  delay(5);
  smg1=1;
  P0=table[ge];
  smg2=0;
  delay(5);
  smg2=1;
}

/*
**********************************************
* 函 数 名 :主函数
* 功能说明 :
* 形    参 :无
* 返 回 值 :无
**********************************************
*/

void main(void)
{                             //4位共阳数码管显示超声波测的距离
   distance=chaoshengbo();
   display(distance);                                //超声波测距,返回一个整形参数distanc                                                        
}

回复

使用道具 举报

ID:138155 发表于 2016-10-24 21:51 | 显示全部楼层
为控制没有循环 就运行一次所以只能闪一下
回复

使用道具 举报

ID:139175 发表于 2016-10-24 21:57 | 显示全部楼层
wuyibin2003 发表于 2016-10-24 21:51
为控制没有循环 就运行一次所以只能闪一下

加了也一样啊
回复

使用道具 举报

ID:123732 发表于 2016-10-24 23:14 | 显示全部楼层
  1. void main(void)
  2. {                             //4位共阳数码管显示超声波测的距离
  3.           while(1){
  4.                   distance=chaoshengbo();
  5.                    display(distance);  //超声波测距,返回一个整形参数distanc                                                        
  6.         }
  7. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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