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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

CC2530超聲波串口打印 源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:432417 發表于 2020-7-26 19:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
通過CC2530驅動超聲波模塊,測量距離,并在串口中打印出來。

單片機源程序如下:
  1. #include <ioCC2530.h>
  2. #include "Ultrasound.h"
  3. #include <stdio.h>
  4. #include <string.h>
  5. uchar RG;
  6. uchar H1;
  7. uchar L1;
  8. uchar H2;
  9. uchar L2;
  10. uchar H3;
  11. uchar L3;
  12. uint  data;
  13. uchar TXData;
  14. float distance;

  15. uchar LoadRegBuf[4];//全局數據,用以存儲定時計數器的值。

  16. void Delay_1us(uint microSecs)
  17. {  while(microSecs--)
  18.   {    /* 32 NOPs == 1 usecs 因為延時還有計算的緣故,用了31個nop*/
  19.     asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
  20.     asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
  21.     asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
  22.     asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
  23.     asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
  24.     asm("nop"); asm("nop"); asm("nop"); asm("nop"); asm("nop");
  25.     asm("nop");
  26.   }
  27. }

  28. void Delay_10us(uint n)
  29. { /* 320NOPs == 10usecs 因為延時還有計算的緣故,用了310個nop*/
  30.     uint tt,yy;
  31.     for(tt = 0;tt<n;tt++);
  32.     for(yy = 310;yy>0;yy--);
  33.     {asm("NOP");}
  34. }

  35. void Delay_1s(uint n)
  36. {       uint ulloop=1000;
  37.         uint tt;
  38.     for(tt =n ;tt>0;tt--);
  39.     for( ulloop=1000;ulloop>0;ulloop--)
  40.     {
  41.           Delay_10us(100);
  42.         }

  43. }

  44. void SysClkSet32M()
  45. {
  46.     CLKCONCMD &= ~0x40;         //設置系統時鐘源為32MHZ晶振
  47.     while(CLKCONSTA & 0x40);     //等待晶振穩定
  48.     CLKCONCMD &= ~0x47;        //設置系統主時鐘頻率為32MHZ
  49.                                //此時的CLKCONSTA為0x88。即普通時鐘和定時器時鐘都是32M。      
  50.   }

  51. void Init_UltrasoundRanging()
  52. {  
  53.     P1DIR = 0x08;     //0為輸入1為輸出  00001000  設置TRIG P1_3為輸出模式
  54.     TRIG=0;           //將TRIG 設置為低電平
  55.    
  56.     P0INP &= ~0x80;   //有上拉、下拉 有初始化的左右
  57.     P0IEN |= 0x80;    //P0_7 中斷使能
  58.     PICTL |= 0x01;    //設置P0_7引腳,下降沿觸發中斷   
  59.     IEN1 |= 0x20;      // P0IE = 1;
  60.     P0IFG = 0;  

  61. }

  62. void UltrasoundRanging(uchar *ulLoadBufPtr)
  63. {   
  64.      SysClkSet32M();
  65.      Init_UltrasoundRanging();
  66.      
  67.     // T1CC0H = 0x00;
  68.      //T1CC0L = 0xfa;
  69.      EA = 0;
  70.      TRIG =1;
  71.       
  72.      Delay_1us(10);     //需要延時10us以上的高電平
  73.      TRIG =0;

  74.      T1CNTL=0;
  75.      T1CNTH=0;
  76.      while(!ECHO);  
  77.      T1CTL = 0x09;      //0000 1010
  78.                         //0000 1001
  79.                         //通道0,中斷有效,32分頻;自動重裝模式(0x0000->0xffff);
  80.      L1=T1CNTL;  
  81.      H1=T1CNTH;   
  82.      *ulLoadBufPtr++=T1CNTL;
  83.      *ulLoadBufPtr++=T1CNTH;
  84.       EA = 1;  
  85.       //Delay_10us(60000);     
  86.       //Delay_10us(60000);  
  87.   
  88. }


  89. /**********串口初始化函數****************************/
  90. void InitUart(void){
  91.   PERCFG = 0x00;
  92.   P0SEL = 0x0c;
  93.   P2DIR &= ~0xc0;
  94.   U0CSR |= 0x80;
  95.   U0GCR |= 11;
  96.   U0BAUD |= 216;
  97.   UTX0IF = 0;
  98. }

  99. /**********串口發送函數****************************/
  100. void UartSendString(char *Data, int len){
  101.   uint i;
  102.   for(i=0;i<len;i++){
  103.     U0DBUF = *Data++;
  104.     while(UTX0IF == 0);
  105.     UTX0IF = 0;
  106.   }
  107. }

  108. #pragma vector = P0INT_VECTOR
  109. __interrupt void P0_ISR(void)
  110. {
  111.          EA=0;  
  112.          T1CTL = 0x00;  
  113.          LoadRegBuf[2]=T1CNTL;  
  114.          LoadRegBuf[3]=T1CNTH;  
  115.          L2=T1CNTL;  
  116.          H2=T1CNTH;  
  117.          
  118.         if(P0IFG&0x080)          //外部ECHO反饋信號
  119.         {   
  120.          P0IFG = 0;        
  121.         }
  122.         T1CTL = 0x09;  
  123.          T1CNTL=0;
  124.          T1CNTH=0;
  125.         P0IF = 0;             //清中斷標志
  126.         EA=1;
  127. }

  128. void InitLed(void){
  129.   P1DIR |= 0x01;
  130.   LED1 = 0;
  131. }

  132. void main(void)
  133. {
  134.     InitUart();
  135.     InitLed();
  136.     char strTemp[6];
  137.    
  138.     while(1)
  139.     {
  140.      UltrasoundRanging(LoadRegBuf);
  141.      Delay_1s(1);
  142.      data=256*H2+L2-L1-256*H1;  
  143.      distance=(float)data*340/10000;
  144.      memset(strTemp, 0, 6);
  145.      sprintf(strTemp,"%.02f", distance);//將浮點數轉成字符串
  146.      UartSendString(strTemp, 5);
  147.      UartSendString("CM",2);
  148.      UartSendString("\r\n",2);
  149.      if((int)distance<=20){
  150.        LED1 = 1;
  151.      }else{
  152.        LED1 = 0;
  153.      }
  154.      distance=0;
  155.      Delay_1s(2);
  156.     };
  157. }
復制代碼

所有資料51hei提供下載:
超聲波+串口.zip (48.48 KB, 下載次數: 14)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美久久一区 | 日韩欧美在线视频 | 韩日一区二区 | 国产91av视频在线观看 | 综合久 | 黄色一级电影在线观看 | 欧美日韩视频在线播放 | 在线看片福利 | 日韩视频一区在线观看 | 521av网站 | 二区精品 | 三级成人在线观看 | 欧美h| 国内精品在线视频 | 国产精品一区久久久 | 黄免费在线 | 午夜成人在线视频 | 在线视频亚洲 | 看av网| 久久国产精品-国产精品 | 香蕉久久久 | 成人av电影在线 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 久草视 | 风间由美一区二区三区在线观看 | 99久久精品一区二区毛片吞精 | 国产精品一区在线 | 亚洲码欧美码一区二区三区 | 国产精品久久久久久福利一牛影视 | 午夜视频在线免费观看 | 毛片在线免费 | 99免费| 在线观看中文字幕一区二区 | 国产精品免费一区二区三区四区 | aaa精品 | 日韩中文字幕在线不卡 | 鸡毛片| 欧美精品在线一区二区三区 | 欧美簧片 | 91精品久久久久久久久 | 久久久久国产一区二区三区四区 |