完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
# include
# include char tab[]={0xd7,0x14,0xcd,0x5d,0x1e,0x5b,0xdb,0x15,0xdf,0x5f} ; ***it trig=P1^0; ***it echo=P3^2; ***it P27=P2^7; ***it P26=P2^6; ***it P25=P2^5; ***it P24=P2^4; char d; int timeH,timeL; void delay(int z) { int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display(unsigned char temp) { int i; unsigned char ge,shi,bai; bai=temp/100; shi=(temp%100)/10; ge=temp%10; for(i=0;i<10;i++) { P27=1;P26=0;P25=0;P24=0; P0=tab[ge]; P27=1;P26=1;P25=0;P24=0; P0=tab[shi]; P27=1;P26=1;P25=1;P24=0; P0=tab[bai]; } } main () { EA=1; TMOD=0x09; TH0=0; TL0=0; ET0=1; //EX0=1; trig=0; while(1) { trig=1; nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); trig=0; EX0=1; while(echo==0); TR0=1; while(echo==1); TR0=0; d=(timeH*256+timeL)*0.017; //CM display(d); delay(40); } } void time0() interrupt 1 { TH0=0; TL0=0; } void int0() interrupt 0 { EX0=0; timeH=TH0; timeL=TL0; } |
|
相关推荐
6 个讨论
|
|
|
void display(unsigned char temp) temp的取值范围是0-255.应该改为unsigned int temp;
char d; 改为unsigned int d; 还有你到底有没有明白定时器和外部中断一起用。TMOD = 0x09是什么概念? P27,P26,P25,P24这个直接用P2.0=一个数能后右移4位更好点。 while(echo==0); TR0=1; while(echo==1); TR0=0; 这句应该有问题。你的外部中断使一个高低变化的信号吗?如果不是在这里肯定会停止,后面运行不下去,肯定也显示不了。如果是高低变化,高低变化的频率肯定不会有60多毫秒吧,这样肯定会影响定时器和后面的程序。 我猜应该是if(echo == 0) TR0 = 1; if(echo == 1) TR0 = 0; 如果有外部中断来了,echo = 0,这时候开启定时器。如果没有外部中断则关闭定时器。 建议你还是直接用外部中断,边沿触发或者是下降沿触发来处理。 如果用if检测一定要注意防抖处理。 |
|
|
|
|
|
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16899 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 19:26 , Processed in 0.971244 second(s), Total 66, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1407