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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

超聲波PIC單片機C程序

[復制鏈接]
跳轉到指定樓層
樓主
超聲波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黑下載附件…………
復制代碼

所有資料51hei提供下載:
超聲波PIC單片機C程序.rar (1.63 KB, 下載次數: 21)




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

使用道具 舉報

沙發
ID:33634 發表于 2017-6-1 21:03 | 只看該作者
注釋怎么是英文的?
回復

使用道具 舉報

板凳
ID:189772 發表于 2017-7-29 15:43 | 只看該作者
看不懂,樓主能講詳細點么?以及相配套的電路,
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩av一区二区在线观看 | 亚洲激情一区二区 | 国产91精品久久久久久久网曝门 | 国产精品福利在线观看 | 精品国产欧美日韩不卡在线观看 | 中文字幕成人 | 久草免费在线视频 | 色网在线播放 | 亚洲欧美精品久久 | 精品av | 国产成人一区二区三区 | 中文av在线播放 | 91精品久久久久久综合五月天 | 玖玖综合在线 | 国产精品伦理一区二区三区 | 亚洲一级在线 | 日韩成人一区 | 国产美女久久 | 自拍偷拍中文字幕 | 性国产丰满麻豆videosex | 久久精品久久精品 | 精品欧美一区二区精品久久 | 超碰婷婷 | 少妇久久久久 | 毛色毛片免费看 | 毛片av免费看 | 欧美日韩精品中文字幕 | 天天操天天射综合网 | 午夜免费观看体验区 | 午夜精品一区二区三区在线播放 | 精品99在线 | 亚洲精品久久久久avwww潮水 | 久久蜜桃av| 欧美午夜精品久久久久久浪潮 | 黄色骚片 | 国产成人精品午夜 | 国产亚洲一区二区三区 | 欧美精品一区二区三区在线 | 国产精品久久国产精品99 | 久久99深爱久久99精品 | 91xxx在线观看 |