完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
测距显示到65之后不显示66显示的是0,从0又开始了,是啥问题,还有我这个测距只能测1.3米什么问题,我的是CT107D开发板,下面是程序
#include #include #include #define uchar unsigned char #define uint unsigned int #define BUZZ XBYTE[0xBFFF] uchar code table[]= {0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90}; uchar dspbuf[8]={10,10,10,10,10,10,10,10}; uchar dspcom=0; ***it TX=P1^0; //发送 ***it RX=P1^1; //接收 uchar a,flag; void delay() //延迟函数 { uchar i; i=10; _nop_(); _nop_(); _nop_(); while(--i); } void display() //显示函数 { XBYTE[0xE000]=0xff; XBYTE[0xC000]=(1< if(++dspcom==8) { dspcom=0; } } void init() //初始化计时器 { BUZZ=0; TMOD=0x11; TH0=(65536-2000)/256; TL0=(65536-2000)%256; TH1=0; TL1=0; EA=1; ET0=1; TR0=1; } void send_wave() //发送方波 { uchar x; for(x=0;x<8;x++) //发送八个方波 { TX=1; delay(); TX=0; delay(); } } uint getdistance() //测距 { uint distance,time; send_wave(); TR1=1; while((RX==1)&&(TF1==0)); //等待收到超声波 TR1=0; if(TF1==1) { TF1=0; distance=999; } else { time=TH1; //时间 time=(time<<8)|TL1; distance=time*17/1000; //距离 } TH1=TL1=0; return distance; } void main() { uint value; init(); while(1) { if(flag==1) { flag=0; value=getdistance(); dspbuf[0]=value/100; dspbuf[1]=value%100/10; dspbuf[2]=value%10; } } } void timer0() interrupt 1 //中断 { TH0=(65536-2000)/256; TL0=(65536-2000)%256; display(); if(++a==50) { a=0; flag=1; } } |
|
相关推荐
3个回答
|
|
总感觉这是一个16位的无符号数据除1000后取整的结果。是不是你这个受制于申请的变量长度的原因啊??
最佳答案
|
|
|
|
怎么改,大神,我快被这个问题烦死了 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
417 浏览 0 评论
430 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
393 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
974 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1055 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11779 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 00:11 , Processed in 0.514529 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号