久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4802|回復: 3
打印 上一主題 下一主題
收起左側

ATMEGA8單片機制作的超聲波測距儀

[復制鏈接]
跳轉到指定樓層
樓主
ID:76686 發表于 2015-4-12 01:52 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
       ATMEGA8單片機制作的超聲波測距儀,測量范圍10cm-250cm,測距小于100cm時,誤差是1~2cm.,大于100cm時,誤差是3~5cm。5V供電 檢測距離 0.5M,ATMEGA8單片機制作的超聲波測距儀由3位LED數碼管顯示障礙物距離, 3位LED數碼管采用積木式插裝方式,便于調試檢查及使用在不同場合。這款超超聲波測距儀,電路簡單,制作容易,ATMEGA8單片機制作的超聲波測距儀比較適合手于制作超聲波避障小車的避障傳感器。下面附上電原理圖、源程序,方便大家仿制,需要說明的一點,這款超聲波測距儀的資料來源于網絡,作者:xinchangkk,這里要感謝一下作者的無私奉獻。

        點擊 ATMEGA8單片機制作的超聲波測距儀程序.zip (2.27 KB, 下載次數: 37)




  1. 雙龍SL-SRF-25超聲波測距—AVR單片機
  2. /*********************************************************************
  3. Project        :   超聲波測距
  4. Chip type      :   ATMEGA8
  5. Clock frequency:   8.000000MHz
  6. *********************************************************************/
  7. #include<iom8v.h>
  8. #include<macros.h>
  9. #pragma interrupt_handler intt0:10                    //T0溢出中斷
  10. #pragma interrupt_handler icp_timer1:6                //T1捕捉中斷
  11. #pragma data:code  //設定數據區為程序存儲器
  12. const unsigned char tab1[]={0X28,0XEE,0X32,0XA2,0XE4,
  13.                             0XA1,0X21,0XEA,0X20,0XA0};//七段譯碼字型表(lm,cm)
  14. const unsigned char tab2[]={0X08,0XCE,0X12,0X82,0XC4,
  15.                             0X81,0X01,0XCA,0X00,0X80};//七段譯碼字型表(m)
  16. #pragma data:data //設定數據區回到數據存儲器
  17. unsigned char ledbuff[]={0X08,0X28,0X28};//顯示緩沖區
  18. unsigned char count;
  19. unsigned char newcount;
  20. unsigned char oldcount;
  21. void intt0(void)//T0中斷定時程序,定時58US,即測距1CM.
  22. {
  23. TCNT0=0XC6;
  24. count++;
  25. }
  26. void icp_timer1(void)//ICP1捕捉中斷,捕捉頻率38.5~41.6
  27. {
  28. if (96<=ICR1<=104)
  29. {
  30.   SREG&=0X7f;
  31.   newcount=count-13;
  32.   ICR1=0;
  33.   TCNT1=0;
  34.   TCCR1B=0X81;
  35. }
  36. }
  37. void delay_1us(void)//1us
  38. {
  39. asm("nop");
  40. }
  41. void delay_us(unsigned int t)//tus
  42. {
  43. unsigned int i=0;
  44. for(i=0;i<t;i++)
  45. delay_1us();
  46. }
  47. void delay_1ms(void)//1ms
  48. {
  49. unsigned int i;
  50. for(i=1;i<1142;i++);
  51. }
  52. void delay_ms(unsigned char t)
  53. {
  54. unsigned char  i=0;
  55. for(i=0;i<t;i++)
  56. {
  57.   delay_1ms();
  58. }
  59. }

  60. void send40kHz(void)           //發射40KHz超聲波
  61. {
  62. count=0;
  63. TIMSK&=0XDF;//禁止ICP1使能
  64. OCR2=0X64;
  65. TCCR2=0X19;
  66. }
  67. void close40kHz(void)         //停止發射超聲波
  68. {
  69. TCCR2=0X00;
  70. }
  71. void hextobcd(unsigned char m)//將count十六進制數據轉換為LED七段碼
  72. {
  73. unsigned char temp;
  74. temp=m%10;
  75. ledbuff[0]=tab1[temp];//mm位
  76. m=m/10;
  77. temp=m%10;
  78. ledbuff[1]=tab1[temp];//lm位
  79. temp=m/10;
  80. ledbuff[2]=tab2[temp];//m位
  81. }
  82. void display3led(void)        //數碼管顯示
  83. {
  84. unsigned char i;
  85.   for(i=0;i<3;i++)
  86. {
  87.   PORTD=ledbuff;
  88.   PORTC=~(1<<i);//PC0-mm位,PC1-lm位,PC2-m位
  89.   delay_1ms();
  90.   PORTC=(1<<i);
  91. }
  92. }

  93. void display8led(void)        //8LED顯示
  94. {
  95.     if(newcount<10)               
  96.       PORTD=0XFE;
  97.     else if (newcount<20)
  98.           PORTD=0XFD;
  99.     else if (newcount<30)   
  100.       PORTD=0XFB;
  101.     else if (newcount<40)
  102.       PORTD=0XF7;
  103.     else if (newcount<50)  
  104.       PORTD=0XEF;
  105.     else if (newcount<100)
  106.       PORTD=0XDF;
  107.     else if (newcount<180)
  108.       PORTD=0XBF;
  109.     else                        
  110.      PORTD=0X7F;
  111. }  

  112. void mcu_init(void)//MCU初始化
  113. {
  114. DDRD=0XFF;
  115. PORTD=0XFF;
  116. DDRC=0XDF;       //PC5為輸入
  117. PORTC=0XFF;
  118. DDRB=0XFE;
  119. PORTB=0XF7;
  120. TCNT2=0X00;
  121. TCNT0=0XC6;      //T0定時58US
  122. TCCR0=0X02;      //T0定時器1/8分頻
  123. TCNT1=0X00;
  124. TCCR1A=0X00;
  125. TCCR1B=0X81;     //輸入捕獲噪音抑制允許,ICP1下降沿觸發,系統時鐘
  126. TIMSK=0X01;      //使能T0定時溢出

  127. }
  128. void main(void)
  129. {
  130. unsigned char i;
  131. mcu_init();
  132. for(;;)
  133. {
  134.   send40kHz();
  135.   SREG|=0X80;
  136.   delay_us(50);
  137.   close40kHz();
  138.   delay_us(20);
  139.   TIMSK=0X21;
  140.   if(!(PINC&0X20))                    //如果插上JD1短路塊,則數碼管顯示距離
  141.     {
  142.     if (newcount!=oldcount)
  143.        oldcount=newcount;
  144.        hextobcd(oldcount);
  145.     for(i=0;i<20;i++)
  146.        display3led();
  147.     }
  148.   else
  149.     {  
  150.     PORTC=0XFF;
  151.     display8led();
  152.     delay_ms(100);
  153.     }  
  154.   }

  155. }

  156. 雙龍SL-SRF-25超聲波避障程序—51單片機
  157. /***********************************************************************/
  158. /*
  159.                  廣州雙龍電子
  160.                 WWW.SL.COM.CN
  161.    功能:
  162.         超聲波避障,避障距離為10cm;前進遇障后退左轉彎.
  163.     接線方法:
  164.          52板P1.0(用短線)接超聲波傳感器J1-1(J1插針的第一腳)
  165.    注意:
  166.          用戶可以根據自已的避障距離,把52板P1.0腳連接到超聲波傳感器的相應腳
  167.    以下是避障距離范圍情況:
  168.         1:  J1-1  避障距離范圍5~9cm
  169.         2:  J1-2  避障距離范圍10~19cm
  170.         3:  J1-3  避障距離范圍20~29cm
  171.         4:  J1-4  避障距離范圍30~39cm
  172.         5:  J1-5  避障距離范圍40~49cm
  173.         6:  J1-6  避障距離范圍50~99cm
  174.         7:  J1-7  避障距離范圍100~179cm
  175.         8:  J1-8  避障距離范圍180~250cm
  176.    Chip type       :  AT89S52   
  177.    Clock frequency :  24MHz
  178. */
  179. /************************************************************************/
  180. #include "reg52.h"
  181. sbit P1_0=P1^0;              //定義避障距離檢測腳
  182. void delay_1ms(void)         //1毫秒延時程序
  183. {
  184. unsigned char j=0,i=8;
  185.    do
  186.      {
  187.         while(--j) ;
  188.      }
  189.    while(--i);
  190. }

  191. void delay(unsigned char i)  // 毫秒級延時程序
  192. {
  193.   while(i--)
  194.   delay_1ms();  
  195. }

  196. void forward(void)           //LED4~5亮,前進
  197. {
  198.    P0=0XE7;
  199.    P3=0x50;
  200. }
  201. void left (void)             //LED1~3亮,左轉
  202. {
  203.   P0=0XF8;
  204.   P3=0x60;
  205. }
  206. void back (void)            //LED全亮,后退
  207. {
  208.   P0=0;
  209.   P3=0XA0;
  210. }

  211. void init(void)            //端口初始化
  212. {
  213.   P1|=0X01;                //要讀取P1.0,就先寫1
  214.   P0=255;                  //8LED全不亮
  215.   P3=0;
  216. }
  217. /***********************************************************************
  218.                      主函數
  219. ***********************************************************************/
  220. void main(void)   
  221. {
  222.   init();                //系統初始化
  223.   while(1)               //循環
  224.   {
  225.     if(!P1_0)            //如果在避障范圍,則后退,左轉彎
  226.     {
  227.       back();
  228.       delay(200);         //后退200毫秒
  229.       left();
  230.       delay(200);         //左轉90度.
  231.     }
  232.    else
  233.       {
  234.        forward();
  235.        delay(200);
  236.       }
  237.     }
  238. }


復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:151421 發表于 2016-12-1 13:21 | 只看該作者
厲害了我的大神
回復

使用道具 舉報

板凳
ID:433029 發表于 2018-12-4 14:44 | 只看該作者
高手在路上!
回復

使用道具 舉報

地板
ID:552794 發表于 2019-6-9 10:34 | 只看該作者
樓主:厚道人,實實在在的分享.向你學習,致敬!!!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产91久久久久福利 | 999www视频免费观看 | 一区欧美| 国产成人综合在线 | 亚洲视频国产 | 中文字幕不卡视频在线观看 | 精精精精xxxx免费视频 | 欧美一区二区在线观看 | 2020国产在线| 毛片区| 日本不卡免费新一二三区 | www国产亚洲精品久久网站 | 久久久久亚洲视频 | 日韩免费一区二区 | 久久精品中文字幕 | 99亚洲精品 | 国产午夜精品一区二区三区在线观看 | 成人久久久 | 精品国产高清一区二区三区 | 国产一区 | 99热精品久久 | av大全在线观看 | 国产精品高潮呻吟久久久久 | 国产精品99久久免费观看 | 亚洲欧美一区二区三区在线 | 丝袜美腿一区二区三区动态图 | 国产精品视频久久久久久 | 99re国产精品 | 欧美一级在线观看 | 久久久精品 | 亚洲欧美日韩国产综合 | 成人妇女免费播放久久久 | 91网站在线看 | 亚洲色在线视频 | 毛片一区二区三区 | 手机av在线 | 日韩精品在线免费 | 欧美极品视频在线观看 | 日韩在线免费播放 | 久久国产综合 | 国产精品黄色 |