历史上的今天
今天是:2025年05月23日(星期五)
2020年05月23日 | 51单片机超声波模块数码管程序分享
2020-05-23 来源:elecfans
超声波原理简单测距准确,应用广泛下面贴一个自己写的数码管程序,显示部分需要改,写的是我使用的是慧净开发板,共阴数码管。

//超声波模块程序
//Trig = P2^0
//Echo = P3^2
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的码表
uinttime = 0;
uintTImeH = 0;
uintTImeL = 0;
uint succeed_flag;
sbit dula=P2^0; //段选信号的锁存器控制
sbit wela=P2^1; //位选信号的锁存器控制
sbit Trig = P2^2;
sbit Echo = P3^2;
//
void delay(uint z)
{
uint x,y;
for(x=z;x》0;x--)
for(y=125;y》0;y--);
}
//
void delay_20us()
{
uchar a ;
for(a=0;a《100;a++);
}
//***************************************************************
//显示数据转换程序
void display(uinttemp)
{
uchar qian,ge,shi,bai;
qian = temp/1000;
bai=temp/100%10;
shi=temp%100/10;
ge=temp%10;
wela=1;
//P0=0xf7;
P0 = 0xfe;
wela=0;
dula=1;
P0=table[qian];
dula=0;
delay(5);
wela=1;
//P0=0xf7;
P0 = 0xfd;
wela=0;
dula=1;
P0=table[bai];
dula=0;
delay(5);
dula=1;
P0=0x00; //关位码
dula=0;
wela=1;
//P0=0xef;
P0 = 0xfb;
wela=0;
dula=1;
P0=table[shi];
dula=0;
delay(5);
dula=1;
P0=0x00; //关位码
dula=0;
dula=1;
P0=table[ge];
dula=0;
wela=1;
//P0=0xdf;
P0 = 0xf7;
wela=0;
delay(5);
dula=1;
P0=0x00; //关位码
dula=0;
}
//***************************************************************
void main()
{
uint distance;
uint test =0;
Trig=0; //首先拉低脉冲输入引脚
EA=1; //打开总中断0
TMOD=0x10; //定时器1,16位工作方式
while(1)
{
EA=0; //关总中断
Trig=1; //超声波输入端
delay_20us(); //延时20us
Trig=0; //产生一个20us的脉冲
while(Echo==0); //等待Echo回波引脚变高电平
succeed_flag=0; //清测量成功标志
EA=1;
EX0=1; //打开外部中断0
TH1=0; //定时器1清零
TL1=0; //定时器1清零
TF1=0; //计数溢出标志
TR1=1; //启动定时器1
delay(20); //等待测量的结果
TR1=0; //关闭定时器1
EX0=0; //关闭外部中断0
if(succeed_flag==1)
{
TIme=TImeH*256+timeL;
distance=time*0.172; //厘米
display(distance);
}
if(succeed_flag==0)
{
distance=0; //没有回波则清零
test = !test; //测试灯变化
}
}
}
//***************************************************************
//外部中断0,用做判断回波电平
void exter() interrupt 0 // 外部中断0是0号
{
timeH =TH1; //取出定时器的值
timeL =TL1; //取出定时器的值
succeed_flag=1;//至成功测量的标志
EX0=0; //关闭外部中断
}
//****************************************************************
//定时器1中断,用做超声波测距计时
void timer1() interrupt 3 //
{
TH1=0;
TL1=0;
}
史海拾趣
|
在WinXP下,调用正常,但是在Wince下执行WSAWaitForMultipleEvents返回错误 87参数不正确。 请教一下,错误在什么地方? 已下代码在线程中执行,pClientSocket->m_hClientEvent是与连接Socket对应的事件, WSAWaitForMultipleEvents等待1000.. ...… 查看全部问答> |
|
招聘2-3名软件测试人员 我部门是隶属于一工厂的研发部,工厂在深圳福永(机场附近)。主要从事GPS的研发工作。 工作地点:深圳市南山区科技园 要求: 1) 计算机软件及相关专业毕业,大专及以上学历 2) 对软件测试有一定的了解和兴趣 3) 有耐心 ...… 查看全部问答> |
|
R3中微软的Silverlight的例子XAMLPERF中的FRM_START,FRM_STOP,FRM_GET_FRAMES_PER_SECOND什么意思? 这三个东西在main.cpp中定义的: class FrameRateManager { enum FrameRateMonitorMessage { FRM_START = 0, FRM_S ...… 查看全部问答> |
|
我想找一块使用时间比较长的成熟开发板,带SD卡驱动,USB接口和液晶显示功能就可以了,提供相关PCB制板文件,这是其一 其二,想在上面再扩展个心电采集电路部分,调通该部分功能 如有对以上擅长者,有合作意向请联系本人 QQ:12665590 … 查看全部问答> |
|
移植 lan91c111 for pxa255 wince4.2 驱动 到 pxa270 wince5.0 下,哪位高手做过,需要修改那些地方,指点一下,谢谢!… 查看全部问答> |
|
问了 2个问题 STM32F107的以太网 用的NICHeLITE 协议栈 主讲的年青帅哥(外)说中文的很溜,可听估计还是差些 也许是我问问题没说清楚 感觉整场会 ADC的主讲比较精彩 交流也很激烈 新的3in1 还有个像游戏机一样的 ...… 查看全部问答> |
|
为自己写了2个。c文件但是没法链接哦 源文件没问题编译K的 Target not created gpio.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_cl.o).gpio.axf: Error: L6218E: Undefined symbol RCC_APB2PeriphResetC ...… 查看全部问答> |




