找回密码
 立即注册

QQ登录

只需一步,快速开始

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

超声波测距(串口通迅备忘)

[复制链接]
跳转到指定楼层
楼主
ID:60076 发表于 2014-5-2 20:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg51.h>    //包含单片机寄存器的头文件
#include<intrins.h>  //包含_nop_()函数定义的头文件
#define uchar unsigned char
#define uint unsigned int
uchar falg,date_h,date_l,bb;
uint date;
unsigned char code table[]={0x3f,
0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,
0x71,0x80,0xc0};
sbit FM=P2^3;
void ranging();
void delay(uint z);
void display();
void main()
{
TMOD=0x20;  //设置定时器1为方式2;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;  //设置串口为方式1;
REN=1;  //接收使能;
EA=1;
ES=1;  //打开串口中断;
P1=0x00;
P0=0x3f;
while(1)
{
  ranging();
  if(falg==1)
   display();
}
}

void serial() interrupt 4  //串口中断子程序;
{
bb++;
if(bb==1)
{
  date_h=SBUF;             //
  RI=0;                //接收溢出位RI软件清零;
}
if(bb==2)
{
  date_l=SBUF;             //
  date=(date_h<<8)+date_l;
  bb=0;
  falg=1;
  RI=0;                //接收溢出位RI软件清零;
}
else
  falg=0;
}
void ranging() //测距子程序
{
ES=0;      //关串口中断;
SBUF=0x55;  //
while(!TI); //等待数据发完;
TI=0;  //发送溢出位TI软件清零;
ES=1;      //开串口中断;
}

void delay(uint z)
{
while(z--);
}
void display()
{
uchar wan,qian,bai,shi,ge;
wan=date0000/10000;
qian=date000/1000;
bai=date00/100;
shi=date0/10;
ge=date;
P0=table[wan];
P1=0xf7;
delay(20);
P1=0xff;
P0=table[qian];
P1=0xef;
delay(20);
P1=0xff;
P0=table[bai];
P1=0xdf;
delay(20);
P1=0xff;
P0=table[shi];
P1=0xbf;
delay(20);
P1=0xff;
P0=table[ge];
P1=0x7f;
delay(20);
P1=0xff;
}

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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