📄 chaosb.c
字号:
#include "reg51.h"
#include "7219.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar k[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};
sbit vout =P2^0;
bit flag;//成功标志
bit wt;//溢出标志
float high,low;//超声波时间
uchar qian,bai,shi,ge;//距离的个位、十位、百位
/*************************************************************************
* 函数原型:void delay_50us()
* 功 能:50us的延时
**************************************************************************/
void delay_50us(unsigned int t) // t=100, 5ms; t=1000, 50ms
{
unsigned char j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
/*************************************************************************
* 函数原型:void work()
* 功 能:超声波距离转换
**************************************************************************/
void work(void)
{
float value;
value=(high*256+low)*17/1000-3;
qian=value/1000;
bai=(value-qian*1000)/100;
shi=(value-qian*1000-bai*100)/10;
ge=value-qian*1000-bai*100-shi*10;
}
/*************************************************************************
* 函数原型:void fas()
* 功 能:发送40khz的超声波
**************************************************************************/
void fas()
{
unsigned char i;
ET1 = 1;
TR1 = 1;
for(i=0;i<8;i++)
{
vout = ~vout;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
delay_50us(1);
EX0 = 1; //开启外部中断
EA = 1;
}
/*************************************************************************
* 函数原型:void INIT1()
* 功 能:超声波计时溢出中断
**************************************************************************/
void INTT1() interrupt 3
{
EA = 0;
TR1 = 0;
TH1 = 0;
TL1 = 0;
wt=1;
}
/*************************************************************************
* 函数原型:void work()
* 功 能:超声波返回中断
**************************************************************************/
void PINT0() interrupt 0
{
TR1 = 0;
//ET1 = 0; //关闭定时器0
//EX1 = 0;
EA = 0;
low = TL1;
high = TH1;
TH1 = 0;
TL1 = 0;
flag = 1;
// jis++;
}
/*************************************************************************
* 函数原型:void max7219show()
* 功 能:超声波距离显示--厘米为单位
**************************************************************************/
void max7219show()
{
Write(0x04,k[ge]);
Write(0x03,k[shi]);
Write(0x02,k[bai]);
Write(0x01,k[qian]);
}
main()
{
P0 = 0xff;
P1 = 0xff;
P2 = 0xff;
P3 = 0xff;
TMOD = 0x10;
TH1 = 0;
TL1 = 0;
inith();
max7219show();
wt=1;
while(1)
{
if(flag)
{
//EA = 0;
//if(jis>45)
//{
work();
max7219show();
// jis=0;
//}
delay_50us(6000);
flag = 0;
fas();
}
if (wt)
{
//EA=0;
// max7219show();
wt=0;
fas();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -