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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

超聲波PIC單片機C程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:229453 發表于 2017-8-30 20:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
超聲波PIC單片機C程序
單片機源程序如下:
  1. ////////////////////////////////////////////////////////////////////////////////
  2. //
  3. //     PIC16F877 + HC-SR04 + LCD03 example
  4. //     Written October 2008 , using HITECH PIC16 compiler
  5. //
  6. //                 Note - assumes a 20MHz crystal, which is 5MHz timer clock
  7. //                 A 1:4 prescaler is used to give a 1.25MHz timer count (0.8uS per tick)
  8. //
  9. //     This code is Freeware - Use it for any purpose you like.
  10. //
  11. ///////////////////////////////////////////////////////////////////////////////


  12. #include <pic.h>
  13. #include <stdio.h>
  14.          
  15. __CONFIG(0x3b32);               

  16. #define trig        RB0
  17. #define echo        RB1

  18. void clrscn(void);                                                        // prototypes
  19. void cursor(char pos);
  20. void print(char *p);
  21. void setup(void);
  22. unsigned int get_srf04(void);

  23. char s[21];                                                                                // buffer used to hold text to print

  24. void main(void)
  25. {
  26. unsigned int range;

  27.         setup();                                                                                // sets up the PIC16F877 I2C port
  28.         clrscn();                                                                        // clears the LCD03 disply
  29.         cursor(2);                                                                        // sets cursor to 1st row of LCD03
  30.         sprintf(s,"SRF04 Ranger Test");                // text, printed into our buffer
  31.         print(s);                                                                        // send it to the LCD03

  32.         while(1) {                                                                        // loop forever
  33.                 range = get_srf04();                                        // get range from srf04 (round trip flight time in 0.8uS units)
  34.                 cursor(24);                                                                // sets cursor to 2nd row of LCD03
  35.                 sprintf(s,"Range = %dcm  ", range/72);        // convert to cm
  36.                 print(s);                                                                // send it to the LCD03       
  37.                 cursor(44);                                                                // sets cursor to 3rd row of LCD03
  38.                 sprintf(s,"Range = %dinch  ", range/185);        // convert to inches
  39.                 print(s);                                                                // send it to the LCD03       

  40.                 TMR1H = 0;                                                                // 52mS delay - this is so that the SRF04 ranging is not too rapid
  41.                 TMR1L = 0;                                                                // and the previous pulse has faded away before we start the next one
  42.                 T1CON = 0x21;                                                        // 1:4 prescale and running
  43.                 TMR1IF = 0;
  44.                 while(!TMR1IF);                                                // wait for delay time
  45.                 TMR1ON = 0;                                                                // stop timer       
  46.         }
  47. }

  48. unsigned int get_srf04(void)
  49. {
  50.         TMR1H = 0xff;                                                // prepare timer for 10uS pulse
  51.         TMR1L = -14;
  52.         T1CON = 0x21;                                                // 1:4 prescale and running
  53.         TMR1IF = 0;       
  54.         trig = 1;                                                        // start trigger pulse
  55.         while(!TMR1IF);                                        // wait 10uS
  56.         trig = 0;                                                        // end trigger pulse
  57.         TMR1ON = 0;                                                        // stop timer
  58.                
  59.         TMR1H = 0;                                                        // prepare timer to measure echo pulse
  60.         TMR1L = 0;
  61.         T1CON = 0x20;                                                // 1:4 prescale but not running yet
  62.         TMR1IF = 0;
  63.         while(!echo && !TMR1IF);                // wait for echo pulse to start (go high)
  64.         TMR1ON = 1;                                                        // start timer to measure pulse
  65.         while(echo && !TMR1IF);                        // wait for echo pulse to stop (go low)
  66.         TMR1ON = 0;                                                        // stop timer
  67.         return (TMR1H<<8)+TMR1L;                // TMR1H:TMR1L contains flight time of the pulse in 0.8uS units
  68. }

  69. void clrscn(void)
  70. {
  71.         SEN = 1;                                                                // send start bit
  72.         while(SEN);                                                        // and wait for it to clear

  73.         SSPIF = 0;
  74.         SSPBUF = 0xc6;                                                // LCD02 I2C address
  75.         while(!SSPIF);                                                // wait for interrupt
  76.         SSPIF = 0;                                                        // then clear it.

  77.         SSPBUF = 0;                                                        // address of register to write to
  78.         while(!SSPIF);                                                //
  79.         SSPIF = 0;                                                        //

  80.         SSPBUF = 12;                                                // clear screen
  81.         while(!SSPIF);                                                //
  82.         SSPIF = 0;                                                        //

  83.         SSPBUF = 4;                                                        // cursor off
  84.         while(!SSPIF);                                                //
  85.         SSPIF = 0;                                                        //
  86.          
  87.         PEN = 1;                                                                // send stop bit
  88.         while(PEN);                                                        //
  89. }

  90.                
  91. void cursor(char pos)
  92. {
  93.         SEN = 1;                                                                // send start bit
  94.         while(SEN);                                                        // and wait for it to clear

  95.         SSPIF = 0;
  96.         SSPBUF = 0xc6;                                                // LCD02 I2C address
  97.         while(!SSPIF);                                                // wait for interrupt
  98.         SSPIF = 0;                                                        // then clear it.

  99.         SSPBUF = 0;                                                        // address of register to write to
  100.         while(!SSPIF);                                                //
  101.         SSPIF = 0;                                                        //

  102.         SSPBUF = 2;                                                        // set cursor
  103.         while(!SSPIF);                                                //
  104.         SSPIF = 0;                                                        //
  105.         SSPBUF = pos;                                                //  
  106.         while(!SSPIF);                                                //
  107.         SSPIF = 0;                                                        //
  108.          
  109.         PEN = 1;                                                                // send stop bit
  110.         while(PEN);                                                        //
  111. }

  112.                
  113. void print(char *p)
  114. {
  115.         SEN = 1;                                                                // send start bit
  116.         while(SEN);                                                        // and wait for it to clear

  117.         SSPIF = 0;
  118.         SSPBUF = 0xc6;                                // LCD02 I2C address
  119.         while(!SSPIF);                                // wait for interrupt
  120.         SSPIF = 0;                                        // then clear it.

  121.         SSPBUF = 0;                                        // address of register to write to
  122.         while(!SSPIF);                                //
  123.         SSPIF = 0;                                        //

  124.         while(*p) {
  125.                 SSPBUF = *p++;                        // write the data
  126.                 while(!SSPIF);                        //
  127.                 SSPIF = 0;                                //
  128.         }

  129.         PEN = 1;                                        // send stop bit
  130.         while(PEN);                                        //
  131. }

  132. ……………………

  133. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


超聲波PIC單片機C程序.rar (1.63 KB, 下載次數: 19)


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

使用道具 舉報

沙發
ID:209855 發表于 2017-11-22 14:01 | 只看該作者
超聲波傳感器是用的什么型號的?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区亚洲 | 久久久久国产精品人 | 亚洲精品久久久久久久久久久 | 亚洲高清av在线 | 美女张开腿露出尿口 | 亚洲成av人片在线观看 | 九九看片| 中文字幕高清 | 日韩三级在线观看 | 日韩精品在线一区二区 | 国产精品日韩 | 久久福利电影 | 国产精品久久久久久一区二区三区 | 国产精品高潮呻吟久久 | 欧美激情精品久久久久 | 福利视频网 | 蜜桃一区二区三区在线 | 日韩在线不卡视频 | 欧美精品国产一区二区 | 日韩欧美高清 | 黄视频网站在线 | av黄色在线| 99九九久久 | 国产精品成av人在线视午夜片 | 黄网免费看 | 日韩一区二区三区在线 | 青青草一区二区 | 操操日| 欧美日韩一区在线 | 一区二区久久精品 | 亚洲国产欧美日韩 | a级毛片免费高清视频 | 91在线视频免费观看 | 久久久国产一区二区三区 | 国产成人精品一区二区三区网站观看 | 天天色天天射天天干 | 天堂免费 | 精品久久久久久久久久久久久久久久久 | 久久精品国产免费看久久精品 | 欧美一级片在线观看 | 日韩2020狼一二三 |