完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
老铁们,帮忙看看,太感谢了
#include #include ***it RX = P3^2;//单片机接收回响信号 ***it TX = P3^3;//单片机输出启动超声波模块脉冲 ***it ADDR0 = P1^0;//LED开启引脚 ***it ADDR1 = P1^1; ***it ADDR2 = P1^2; ***it ADDR3 = P1^3; ***it ENLED = P1^4; ***it Led = P0^0; //(测试) bit flags = 0; //超出测量范围标志 unsigned int S = 0; //距离 unsigned char code LedChar[11] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF}; //数码管显示字符 unsigned char LedBuff[4] = {0xff,0xff,0xff,0xff}; //数码管字符缓冲区 void count() //距离计算,同时为数码管字符缓冲区赋值 { unsigned int time = 0; time =( (TH0 - 0xD6) * 256 + (TL0 - 0x08)) / 2; TH0 = 0xD5; TL0 = 0xA5; S = (time * 12 / 11059200) * 34000; if(flags == 1) { flags = 0; LedBuff[0] = LedChar[2]; //测试 LedBuff[1] = LedChar[6]; LedBuff[2] = LedChar[6]; LedBuff[3] = LedChar[6]; /* LedBuff[3] = LedChar[10]; LedBuff[2] = LedChar[10]; LedBuff[1] = LedChar[10]; LedBuff[0] = LedChar[10]; */ } else { LedBuff[0] = LedChar[S % 10]; LedBuff[1] = LedChar[S / 10 % 10]; LedBuff[2] = LedChar[S / 100 % 10]; LedBuff[3] = LedChar[S / 1000 % 10]; } // TH0 = 0xD6; // TL0 = 0x08; } void Display()//数码管显示距离 { static unsigned char i = 0; P0 = LedBuff[i] ; P1 = (P1 & 0xF8) | i; if(i < 3) { i ++; } else i = 0; } void Interrupt() interrupt 3 //中断1,用于扫描数码管,开启超声波模块 { unsigned int timer = 0; TH1 = 0xF8; TL1 = 0x30;//定时2ms timer ++; Display(); if(timer >= 400)//定是达到800ms时,输出一次超声波模块开启脉冲 { timer = 0; TX = 1; //输出高电平,使超声波模块启动 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX = 0; } } void Interrupt0() interrupt 1 //用T0对回响信号进行扫描 { flags = 1; //超出了测距范围 TH0 = 0xD5; TL0 = 0xA5; // flags = 0; //(测试) // TH0 = 0xD6; // TL0 = 0x08; /*ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; Led = 0;*/ //(测试) } void main() { ADDR3 = 1; ENLED = 0;//使能数码管 TMOD = 0x11; TR1 = 1; TH1 = 0xf8; TL1 = 0X30; EA = 1; ET1 = 1; //中断1打开 ET0 = 1; //中断0打开 // TH0 = 0xD6; // TL0 = 0x08; TH0 = 0xd5; TL0 = 0xa5; while(1) { while(!RX);//当为高电平时 TR0 = 1; while(RX);//当为低电平时 TR0 = 0; count(); } }
|
|
相关推荐
1个回答
|
|
|
当连接GND的线断开时,就显示0000(应该是拔出时电平由高变低),导致测试时间为0。插入时,变为6662(插入时由低变高,定时器0溢出,)导致无法显示超出测量距离(即6662),所以,各位大神,是哪里错了呢。。。。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【瑞萨RA6E2】瑞萨E2S软件安装过程,等待过程玩下97_e2 studio_ZGZZ
140 浏览 0 评论
483 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
815 浏览 0 评论
1346 浏览 2 评论
804 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16903 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 17:50 , Processed in 0.722315 second(s), Total 73, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
634