全部評論(2條)
-
- 搗魔臆d熬照 2013-08-03 00:00:00
- 沒有硬件,沒有技術要求,別人實在沒有辦法給你做的。再說這種東西,還是自己做好些。
-
贊(5)
回復(0)
-
- 1灬︶噢 2016-08-02 08:13:37
- #ifndef ULTRASOUND_H #define ULTRASOUND_H #define uchar unsigned char #define uint unsigned int #define TRIG P1_3 //P1_2 #define ECHO P0_7 //P0_1 extern uchar RG; extern uchar H1; extern uchar L1; extern uchar H2; extern uchar L2; extern uchar H3; extern uchar L3; extern uint data; extern float distance; extern uchar LoadRegBuf[4]; //void Delay(uint n); void Delay_1us(uint microSecs); void Delay_10us(uint n); void Delay_1s(uint n); void SysClkSet32M(); void Init_UltrasoundRanging(); void UltrasoundRanging(uchar *ulLoadBufPtr); __interrupt void P0_ISR(void); #endif ××××××××××××××××××××××××××××××××××××××××××× //×××××××××××Ultrasound.c**************************** #include <ioCC2530.h> #include "Ultrasound.h" uchar RG; uchar H1; uchar L1; uchar H2; uchar L2; uchar H3; uchar L3; uint data; float distance; uchar LoadRegBuf[4];//全局數據,用以存儲定時計數器的值。 void Delay_1us(uint microSecs) { while(microSecs--) { /* 32 NOPs == 1 usecs 因為延時還有計算的緣故,用了31個nop*/ asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop"); } } void Delay_10us(uint n) { /* 320NOPs == 10usecs 因為延時還有計算的緣故,用了310個nop*/ uint tt,yy; for(tt = 0;tt<n;tt++); for(yy = 310;yy>0;yy--); {asm("NOP");} } void Delay_1s(uint n) { uint ulloop=1000; uint tt; for(tt =n ;tt>0;tt--); for( ulloop=1000;ulloop>0;ulloop--) { Delay_10us(100); } } void SysClkSet32M() { CLKCONCMD &= ~0x40; //設置系統時鐘源為32MHZ晶振 while(CLKCONSTA & 0x40); //等待晶振穩定 CLKCONCMD &= ~0x47; //設置系統主時鐘頻率為32MHZ //此時的CLKCONSTA為0x88。即普通時鐘和定時器時鐘都是32M。 } void Init_UltrasoundRanging() { P1DIR = 0x08; //0為輸入1為輸出 00001000 設置TRIG P1_3為輸出模式 TRIG=0; //將TRIG 設置為低電平 P0INP &= ~0x80; //有上拉、下拉 有初始化的左右 P0IEN |= 0x80; //P0_7 中斷使能 PICTL |= 0x01; //設置P0_7引腳,下降沿觸發中斷 IEN1 |= 0x20; // P0IE = 1; P0IFG = 0; } void UltrasoundRanging(uchar *ulLoadBufPtr) { SysClkSet32M(); Init_UltrasoundRanging(); EA = 0; TRIG =1; Delay_1us(10); //需要延時10us以上的高電平 TRIG =0; T1CNTL=0; T1CNTH=0; while(!ECHO); T1CTL = 0x09; //通道0,中斷有效,32分頻;自動重裝模式(0x0000->0xffff); L1=T1CNTL; H1=T1CNTH; *ulLoadBufPtr++=T1CNTL; *ulLoadBufPtr++=T1CNTH; EA = 1; Delay_10us(60000); Delay_10us(60000); } #pragma vector = P0INT_VECTOR __interrupt void P0_ISR(void) { EA=0; T1CTL = 0x00; LoadRegBuf[2]=T1CNTL; LoadRegBuf[3]=T1CNTH; L2=T1CNTL; H2=T1CNTH; if(P0IFG&0x080) //外部ECHO反饋信號 { P0IFG = 0; } T1CTL = 0x09; T1CNTL=0; T1CNTH=0; P0IF = 0; //清中斷標志 EA=1; } ×××××××××××××××××××××××××××××××××××××× #include <ioCC2530.h> #include "Ultrasound.h" void main(void) { while(1) { UltrasoundRanging(LoadRegBuf); Delay_1s(1); data=256*H2+L2-L1-256*H1; distance=(float)data*340/10000; Delay_1s(2); }; }
-
贊(9)
回復(0)
熱門問答
- 求一個cc2530 超聲波模塊測距的程序
2013-08-02 21:14:16
334
2
- 超聲波測距模塊
- 1——超聲波模塊測距的有效距離是多少?模塊的有效距離與什么有關?2——怎樣在一個單片機上同時使用幾個頻率不同的超聲波模塊(注意是完全同時工作)?是不是使用頻率不同的模塊就可... 1——超聲波模塊測距的有效距離是多少?模塊的有效距離與什么有關? 2——怎樣在一個單片機上同時使用幾個頻率不同的超聲波模塊(注意是完全同時工作)?是不是使用頻率不同的模塊就可以?如果是的話,那推薦一下每個模塊的頻率(同時使用3-4個)。 展開
2012-10-18 09:17:21
590
3
- 求一份verilog的超聲波測距程序
- 基本要求: 1) 測量距離不低于0.5m,測量精度優于0.1m。 2) 數字顯示測量結果,并能動態更新,更新周期約為0.5s。 拓展要求: 1) 測量距離大于1m,測量精度優于0.05m,顯示精度為0.01m,顯示要求同上。 2) 數字顯示測量結果的更新周期可調,顯示... 基本要求: 1) 測量距離不低于0.5m,測量精度優于0.1m。 2) 數字顯示測量結果,并能動態更新,更新周期約為0.5s。 拓展要求: 1) 測量距離大于1m,測量精度優于0.05m,顯示精度為0.01m,顯示要求同上。 2) 數字顯示測量結果的更新周期可調,顯示穩定。當距離小于0.5m時,通過蜂鳴器給出間歇式的“滴-滴”聲響告警;當距離小于0.3m時,告警聲響變得更加急促。 3) 其它功能(如使用多個超聲波傳感器實現汽車倒車雷達的功能)。 拓展要求可要可不要,求做過的大佬給份程序謝謝。 展開
2018-07-02 06:15:24
242
1
- 求US-100(模塊)超聲波測距的C語言程序,基于51單片機的,3Q哦~
- 求基于51單片機的US-100超聲波測距C語言程序。需要詳細點的具體設計程序,O(∩_∩)O~ US-100模塊參考資料:http://wenku.baidu.com/view/65e63e35a32d7375a41780ce.html 性能要求:實現2--150cm的測距,測得結果保留4位有效數字(取整數),單位:mm。 哪... 求基于51單片機的US-100超聲波測距C語言程序。需要詳細點的具體設計程序,O(∩_∩)O~ US-100模塊參考資料:http://wenku.baidu.com/view/65e63e35a32d7375a41780ce.html 性能要求:實現2--150cm的測距,測得結果保留4位有效數字(取整數),單位:mm。 哪位大神幫幫忙嘍,急啊!!!真心謝謝大神了~ 展開
2017-05-17 15:16:00
536
1
- 超聲波測距程序問題
- #include
#define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit Tx = P3^3; //產生脈沖引腳 sbit Rx = P3^2; //回波引腳 uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0...
2012-07-17 06:51:21
526
2
- 求一份如圖 基于單片機超聲波倒車測距的程序
2016-08-01 00:14:58
575
1
- 超聲波測距模塊兩次測距Z短間隔
2012-07-25 02:10:55
362
2
- 51單片機超聲波測距模塊代碼
- ****************************************************************************************這是代碼原文 我想問一下主函數下的while循環里面 為什么等到echo回波回來了 才打開定時器1和外部中斷呢 這時候回波已經回來了啊 不是測不出超聲波回波的時間了... ****************************************************************************************這是代碼原文 我想問一下主函數下的while循環里面 為什么等到echo回波回來了 才打開定時器1和外部中斷呢 這時候回波已經回來了啊 不是測不出超聲波回波的時間了嗎還有就是 為什么在whlie循環前先打開了總中斷 然后進入whlie又立刻關閉 再重新打開 那diyi次打開不是很多余嗎 麻煩大神解答一下 展開
2018-06-26 20:47:55
505
1
- 求個51單片機超聲波測距(距離+報警)的c程序
- 求個51單片機超聲波測距(距離+報警)的c程序
2017-05-19 03:18:16
391
1
- 求一個基于stm32和us-100的超聲波測距原理圖
2018-06-17 12:43:03
650
1
- 超聲波模塊測距時,多個回波的檢測
- 用超聲波模塊進行測距,有幾個疑問: 1、模塊自動發送8個40khz的方波,這8個方波遇到多個物體時有沒有可能返回多個回波? 2、如果會返回多個回波,比如距離超聲波模塊20cm處有個物體,40cm處也有個物體,那么應該會有兩個回波返回,模塊應該先接收到20cm處的... 用超聲波模塊進行測距,有幾個疑問: 1、模塊自動發送8個40khz的方波,這8個方波遇到多個物體時有沒有可能返回多個回波? 2、如果會返回多個回波,比如距離超聲波模塊20cm處有個物體,40cm處也有個物體,那么應該會有兩個回波返回,模塊應該先接收到20cm處的回波,此時接收管腳Echo已經拉低了(Echo高電平持續時間結束,測距完成),40cm處的回波到來時就被模塊忽略了嗎?如果想檢測40cm處的物體該怎么辦? 展開
2013-04-13 02:50:25
882
2
- 基于89C52單片機的HC-SR04超聲波測距系統程序
2018-12-09 01:37:42
298
0
- 求51單片機超聲波測距代碼
2011-08-20 06:16:46
421
2
- 超聲波測距模塊是什么?哪里有?具體點的,謝謝
2016-12-02 03:53:37
244
1
- 超聲波測距模塊顯示距離的時候為什么會跳動
2012-08-27 00:28:46
408
2
- 幫幫忙 幫我解釋詳細下 這個程序 超聲波測距的
- void Conut(void) { time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.72)/100; //算出來是CM
2013-06-17 03:22:24
413
1
- 這個51單片機HC-SR04超聲波測距程序哪里錯了
- //晶振11.0592MHz #include
#define uchar unsigned char #define uint unsigned int sbit trig=P0^2; sbit echo=P3^3; float dis=0; uint irtime=0; void delay_20us() { uchar bt ; for(bt=0;bt<100;bt++); } void TI... //晶振11.0592MHz #include #define uchar unsigned char #define uint unsigned int sbit trig=P0^2; sbit echo=P3^3; float dis=0; uint irtime=0; void delay_20us() { uchar bt ; for(bt=0;bt<100;bt++); } void TIM1init(void)//定時器1初始化 { TMOD=0x22;//定時器1工作方式2,TH1是重裝值,TL1是初值 TH1=0xd2; //重載值 溢出一次約50us TL1=0xd2; //初始化值 ET1=1; //開中斷 } void EX1init(void) //外部中斷1初始化 { IT1 = 1; //指定外部中斷0下降沿觸發,INT1 (P3.3) EA = 1; //開總中斷 } /*------------------------------------------------ 定時器1中斷處理 ------------------------------------------------*/ void tim1_isr (void) interrupt 3 { irtime++; //用于計數2個下降沿之間的時間 } /*------------------------------------------------ 外部中斷1中斷處理 ------------------------------------------------*/ void EX1_ISR (void) interrupt 2 //外部中斷1服務函數 { dis=340*(irtime/2.0)*50/10000; irtime=0; TR1=0; EX1=0; } void test(void) { trig=1; delay_20us(); trig=0; EX1=1; while(!echo); TR1=1; } void main(void) { TIM1init(); EX1init(); while(1) { test(); display(dis); } } 主函數調用test,然后在數碼管上顯示(顯示函數略過),測試的時候,在數碼管上顯示的距離明顯不對,還各種不穩定,有時就個位數上顯示一個1或2,不知道怎么回事 展開
2016-01-25 09:17:10
345
2
- 誰有基于AVR atmega16超聲波測距程序 發給我
2011-04-03 04:30:42
306
1
- 51單片機超聲波模塊測厚度程序怎么寫?
2018-12-03 12:10:19
420
0
- 微波模塊 雷達測距
- 在做一個雷達液位計也就是雷達測距的項目,主要問題在前端,市場上有哪些廉價的傳感器呢?脈沖雷達,FMCW雷達都可以。除了innosent就沒有其他公司生產這一類傳感器呢么?國產的沒有?
2011-10-24 16:18:50
313
2
5月突出貢獻榜
推薦主頁
最新話題
-
- #DeepSeek如何看待儀器#
- 干體爐技術發展與應用研究
- 從-70℃到150℃:一臺試驗箱如何終結智能...從-70℃到150℃:一臺試驗箱如何終結智能調光膜失效風險?解決方案:SMC-210PF-FPC溫濕度折彎試驗箱的五大核心價值1. 多維度環境模擬,覆蓋全生命周期測試需求超寬溫域:支持-70℃至+150℃的極限溫度模擬(可選配),復現材料在極寒、高溫、冷熱沖擊下的性能表現;控濕:濕度范圍20%~98%RH(精度±3%RH),模擬熱帶雨林、沙漠干燥等復雜工況,暴露材料吸濕膨脹、分層缺陷;動態折彎:0°~180°連續可調折彎角度,支持R1~R20彎曲半徑設定,模擬實際裝配中的微小應力,提前預警裂紋、斷裂風險。
參與評論
登錄后參與評論