完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大大,这是我用的超声波测距程序,问题是数码管显示乱码,数码管的程序没问题,从逻辑上又找不到是哪里错误,恳请指出。
#include #include #define ulong4 unsigned long // 宏定义 #define uChar8 unsigned char #define uInt16 unsigned int uInt16 time = 0; uInt16 timer = 0; ulong4 S = 0; uChar8 flag = 0; ***it ECHO = P1^1; // 外部中断0 接收端 ***it TRIG = P1^0; // 发射端 ***it led0 =P2^4; // 数码管 ***it led1 =P2^5; ***it led2 =P2^6; ***it led3 =P2^7; uChar8 discode[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x3f,0x06,0x5b}; uChar8 LedBuff[4]={ 0x00, 0x00, 0x00, 0x00}; void Timer_ISR() // 定时器初始化 { TMOD = 0x11; //超声波就用定时器1 TH0=(65536-100)/256; //0.1mS定时 TL0=(65536-100)%256; TR0 = 1; ET0 = 1; TR1 = 0; ET1 = 1; EA = 1; } void Display(void) //扫描数码管 { static unsigned char i = 1; P0 = 0x00; switch(i) { case 0: led3 = 0; led1 = 1; i++; P0=LedBuff[0];break; case 1: led2 = 0; led3 = 1; i++; P0=LedBuff[1];break; case 2: led1 = 0; led2 = 1; i=0; P0=LedBuff[2];break; default:break; } } void Delay20us() //@12.000MHz { unsigned char i; i = 57; while (--i); } void StartModule() // 启动测距信号 { TRIG=1; // 给发送端一个启动信号 Delay20us(); TRIG=0; } void Conut(void) //计算超声波测距的距离 { while(!ECHO); //当RX为零时等待 TR1 = 1; //开启计数 while(ECHO); //当RX为1计数并等待 TR1 = 0; time=TH1*256+TL1; //读取脉宽长度 TH1=0; TL1=0; S =(time*1.7)/100; //算出来是CM if((S>=420)) //超出测量范围显示“F” { flag=0; S=0; LedBuff[0] = discode[15]; LedBuff[1] = discode[15]; LedBuff[2] = discode[15]; } else { LedBuff[0] = discode[S%10]; LedBuff[1] = discode[S/10%10]; LedBuff[2] = discode[S/100%10]; } } void main(void) { Timer_ISR(); while(1) { if(timer == 2000) { timer = 0; StartModule(); Conut(); //计算距离 } } } void timer0()interrupt 1 { TH0=(65536-100)/256; //S定时 TL0=(65536-100)%256; Display(); timer++; } void time1()interrupt 3 { flag=1; } |
|
相关推荐
2个回答
|
|
如果数码管能正确显示任何你想显示的数字,那就是显示没问题,是数据格式转换的问题,
{ LedBuff[0] = discode[S%10]; LedBuff[1] = discode[S/10%10]; LedBuff[2] = discode[S/100%10]; } 你可以给S任意数字,看是否能正确显示 |
|
|
|
沙发说的对,能显示就说明程序是没问题的,显示乱码首先看数据转换是否写错或不全;再就是数码管的引脚是否连接正确!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12032 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 07:35 , Processed in 0.511137 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号