找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 512|回复: 0
收起左侧

51单片机超声波灯程序

[复制链接]
ID:1117272 发表于 2024-4-19 00:09 来自手机 | 显示全部楼层 |阅读模式
#include "reg51.h"
#include <intrins.h>
#define uchar unsigned char//无符号字符(8位)
#define uint unsigned int //无符号整数(16位)
uint time=0;
uint timer=0;
uint stoptime=0;
uint ringtimes=0;
unsigned long S=0;
bit flag =0;
sbit LED=P3^7;
unsigned char l_disbuff[4]={ 0xff,0,0,0,};//显示缓冲
unsigned char l_posit=1; //位选择

sbit RX = P1^1; //模块引脚
sbit TX = P1^0;
/********************************************************/
/**************1ms延时程序******************/
delay1ms(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
/********************************************************/
void Conut(void)
{ time=TH0*256+TL0;
TH0=0;
TL0=0;

S=(time*1.7)/100; //算出来是CM
if((S>=40)||flag==1) //超出测量范围显示“-”
{flag=0;
LED=1;
}
else
{

LED=0;
}
}

/********************************************************/
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
/********************************************************/
void zd3() interrupt 3 //T1中断用来扫描数码管和计1S启动模块
{
TH1=0xf8;
TL1=0x30;
timer++;
if(timer>=500)
{
timer=0;
TX=1; //1S 启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
/*********************************************************/

void main( void )
{
TMOD=0x11; //设T0,T1为方式1
TH0=0;
TL0=0;
TH1=0xf8; //2MS定时
TL1=0x30;
ET0=1; //允许T0中断
ET1=1; //允许T1中断
TR1=1; //开启定时器
EA=1; //开启总中断

while(1)
{
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
Conut(); //计算
}
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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