📄 基于单片机的高精度超声波测距电路源程序.txt
字号:
//超声波发射电路电路源程序
#include <AT89X52.H> //头文件
#include <stdio.h>
int n=0; //定义计数变量;
int value=0;
int scm; //定义数码管厘米位
int sfm; //定义数码管分米位
int sm; //定义数码管米位
int LEDDATE[]={*,*,*,*,*,*,*,*,*,*}; //这里没有编码,请大家根据自己的数码管连接情况进行编码
void initial(void); //初始化子程序
void delay(short i); //延时子程序
void display(void ); //数码管显示子程序
void tiqu (void); //提取数据子程序
void main (void) ; //程序主函数
{
initial( );
while(1)
{
display( );
}
}
void initialt(void) //初始化子程序
{
P3_1=0;
IE=0X8A;
TMOD=0xAA; //TO、T1都是方式2,8位定时器、带门控
TL1=0XC5; //T1计数频率为17.05KH
TH1=0XC6;
TR1=1; //启动T1;
TL0=0XE7; //T0发射计数频率为40KH
TH0=0XE8;
TR0=1; //启动T0;
void display(void)//数码管显示子程序
{
tiqu ();//提取出数码显示各个位
P1=LEDDATE[scm];
P3_7=1;
P1_0=0; //显示“厘米”位
delay(3); //延时
P1=LEDDATE[sfm];
P3_7=0;
P1_0=1; //显示“分米”位
delay(3); //延时
P1=LEDDATE[sm];
P3_7=0;
P1_0=0; //显示“米”位
delay(3); //延时
P3_7=1;
P1_0=1; //关显示;
//以上语句则在数码管上显示各个数字
}
void timer0_ISR () interrupt 1 { } //T0 40KH发射批频率
{
P3_0^=1;
}
void timer1_ISR () interrupt 3 { } //T1 计数频率17.05KHZ
{
n++;
if (P3_1==1)
{
value=n;
n=0;
}
}
void tiqu (void)
{
sm=value/100; //提取出“米”位
sfm=(value-sm*100)/10; //提取出“分米”位
scm=value-sm*100-sfm*10; //提取出“厘米”位
}
void delay(short i) //短暂延迟子程序
{
int j=0;
int k=0;
k=i*3;
while(j<k) j++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -