欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4047|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

STC15L408AD單片機(jī)超聲波測(cè)距OLED顯示 源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一個(gè)星期做的設(shè)計(jì),沒(méi)加溫補(bǔ),感興趣的可以自己加上,親自測(cè)試過(guò),沒(méi)任何問(wèn)題,附件里有原理圖代碼

制作出來(lái)的實(shí)物圖如下:


電路原理圖如下:


單片機(jī)源程序如下:

  1. /*************************************************
  2. *STC15單片機(jī)超聲波測(cè)距數(shù)碼管顯示:
  3. *定時(shí)器0用于測(cè)量時(shí)間
  4. *定時(shí)器2用于數(shù)碼管掃描
  5. *
  6. *模塊工作原理:
  7. *1、采用(I0觸發(fā)測(cè)距、給至少10us的高電平信號(hào))
  8. *2、模塊自動(dòng)發(fā)送8個(gè)40khz的方波、自動(dòng)檢測(cè)是否有信號(hào)返回
  9. *3、有信號(hào)返回、通過(guò)I0輸出一高電平、高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間、
  10. *        測(cè)試距離=(高電平時(shí)間*聲速(340M/s)/2)
  11. *
  12. *
  13. *
  14. *
  15. */


  16. #include <stc15.h>
  17. #include <intrins.h>
  18. #include "oled.h"

  19. #define  SETDISTANCE  10   //設(shè)置報(bào)警值,低于此值,蜂鳴器報(bào)警


  20. int count = 0,count1=0;


  21. sbit  BEEP = P3^4;                         //蜂鳴器接口
  22. sbit  ECHO = P0^0;           //ECHO
  23. sbit  TRIG = P0^1;           //Trig


  24. unsigned int  time=0;               //用于定時(shí)時(shí)間
  25. unsigned int  time0=0;              //用于定時(shí)器計(jì)數(shù)
  26. unsigned long S=0;                  //存放計(jì)算出來(lái)的距離


  27. bit flag =0;                        //定時(shí)器0溢出標(biāo)志位
  28. //bit Beepflag =0;


  29. /* 函數(shù)聲明 */
  30. void Display(void);
  31. void Conut(void);
  32. void Start_modle(void);
  33. //void delay_ms(int);


  34. void Timer0Init(void)                //定時(shí)器0初始化
  35. {
  36.         TMOD=0x01;                   //設(shè)定定時(shí)器模式  
  37.         TH0=0X00;       //定時(shí)器0初值為0
  38.         TL0=0X00;         
  39.         ET0=1;          //開啟定時(shí)器0中斷
  40.         TR0=0;                            //先不開啟定時(shí)器0
  41.         EA=1;                           //開總中斷
  42. }

  43. void Timer2Init(void)                //定時(shí)器2初始化
  44. {
  45.         AUXR &= 0xFB;                 //定時(shí)器時(shí)鐘為12T模式
  46.                
  47.         T2L = 0XCD;                  //設(shè)定定時(shí)器初值  2Ms
  48.         T2H = 0XF8;               
  49.         AUXR |= 0x10;                //開啟定時(shí)2中斷
  50.         IE2 =0X04;                        //啟動(dòng)定時(shí)器2
  51. }


  52. /*************主函數(shù)*******************************************/
  53. void  main(  void  )
  54. {  
  55.                 OLED_Init();                        //初始化OLED  
  56. //                 OLED_On();
  57. //                 delay_ms(800);
  58.                 OLED_Clear();
  59.                  OLED_ShowCHinese(20,2,0);//
  60.                 OLED_ShowCHinese(38,2,1);//
  61.                 OLED_ShowString(56,2,"1901",16);//1901       
  62.                 OLED_ShowCHinese(20,4,2);//姓
  63.                 OLED_ShowCHinese(38,4,3);//名
  64.                 OLED_ShowString(56,4,":",16);//:
  65.                 OLED_ShowCHinese(66,4,4);//
  66.                 OLED_ShowCHinese(82,4,5);//                 
  67.                 delay_ms(800);                //清屏?xí)r間
  68.                 OLED_Clear();  
  69.         Timer0Init();
  70.         Timer2Init();
  71.         while(1)
  72.         {
  73.          Start_modle();
  74.          while(!ECHO);                //當(dāng)ECHO為零時(shí)等待
  75.          TR0=1;                            //開啟計(jì)數(shù)
  76.          while(ECHO==1);//&&(flag==0));                //當(dāng)ECHO為1計(jì)數(shù)并等待
  77.          TR0=0;                                //關(guān)閉計(jì)數(shù)
  78.    Conut();                        //計(jì)算       
  79.         }
  80. }

  81. /**********************啟動(dòng)模塊*********************************/              
  82. void Start_modle(void)
  83. {
  84.                         TRIG = 1;              //拉高TRIG                  
  85.                         _nop_();       //延時(shí)10us以上
  86.                         _nop_();
  87.                         _nop_();
  88.                         _nop_();
  89.                         _nop_();
  90.                         _nop_();
  91.                         _nop_();
  92.                         _nop_();
  93.                         _nop_();
  94.                         _nop_();
  95.                         _nop_();
  96.                         _nop_();
  97.                         _nop_();
  98.                         _nop_();
  99.                         _nop_();
  100.                         TRIG = 0;                //拉低TRIG   
  101. }
  102.    
  103. /**********************計(jì)算距離方法*******************************/
  104. void Conut(void)
  105. {
  106.         unsigned char a,b,c;
  107.          time=TH0*256+TL0;              //計(jì)算高電平時(shí)間
  108.          TH0=0;                         //復(fù)位定時(shí)器0的數(shù)值
  109.          TL0=0;
  110.        
  111.          OLED_ShowCHinese(0,4,6);//距
  112.          OLED_ShowCHinese(16,4,7);//離
  113.    OLED_ShowString(32,4,":",16);//:
  114.        
  115.         OLED_ShowCHinese(0,2,8);//超
  116.         OLED_ShowCHinese(16,2,9);//聲
  117.         OLED_ShowCHinese(32,2,10);//波
  118.         OLED_ShowCHinese(48,2,11);//測(cè)
  119.         OLED_ShowCHinese(64,2,12);//距
  120.        
  121.          S=(time*1.7)/100;     //換算成M          
  122.          if((S>=400)||flag==1) //如果測(cè)量超時(shí)
  123.          {         
  124.           flag=0;
  125.                  OLED_ShowString(42,4,"-",16);
  126.                  OLED_ShowString(52,4,"-",16);
  127.                  OLED_ShowString(62,4,"-",16);
  128.                  OLED_ShowString(72,4,"-",16);
  129.          }
  130.          else
  131.          {         
  132.                          a=S%1000/100;         
  133.                         b=S%1000%100/10;      
  134.                         c=S%1000%10 %10;     
  135.                 OLED_ShowNum(42,4,a,1,16);
  136.                 OLED_ShowString(52,4,".",16);                 
  137.                 OLED_ShowNum(62,4,b,1,16);       
  138.           OLED_ShowNum(72,4,c,1,16);
  139.                 OLED_ShowString(82,4,"M/S",16);
  140.          }
  141. }
  142.    
  143. /********************* 定時(shí)器0中斷函數(shù)***********************************/
  144. void Timer0Interrupt(void) interrupt 1                
  145. {
  146.         flag = 1;
  147. }
  148.   /**************定時(shí)器2中斷函數(shù)*****************/
  149. void Timer2Interrupt(void) interrupt 12
  150. {
  151.          time0++;               //用于定時(shí)時(shí)間
  152.          count++;
  153.         if(count >=100)
  154.         {
  155.                 count = 0;
  156.                 if(S<SETDISTANCE)    //判斷距離是否小于設(shè)定值
  157.                 {
  158.                   BEEP  = ~BEEP ;
  159.                 }
  160.                 else                  
  161.                         BEEP = 1;
  162.         }
  163.          if(time0>=400)                 //每800ms啟動(dòng)一次
  164.          {
  165.                  time0=0;
  166.                  Start_modle();
  167.          }       
  168. }
復(fù)制代碼

Keil代碼下載:
STC15超聲波測(cè)距OLED顯示.7z (54.15 KB, 下載次數(shù): 71)



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:102963 發(fā)表于 2022-3-30 10:05 | 只看該作者
M/S不是速度單位嗎,怎么成了距離了?
回復(fù)

使用道具 舉報(bào)

板凳
ID:1011792 發(fā)表于 2022-4-2 17:20 | 只看該作者
songxia8013 發(fā)表于 2022-3-30 10:05
M/S不是速度單位嗎,怎么成了距離了?

確實(shí)是,OLED_ShowString(82,4,"M/S",16); 這個(gè)函數(shù)改成CM就好了
回復(fù)

使用道具 舉報(bào)

地板
ID:143767 發(fā)表于 2022-4-3 17:54 | 只看該作者
你好樓主,這個(gè)我按照你的原理圖接線,并把你編譯好的HE文件燒錄進(jìn)去,OLED屏幕沒(méi)有任何反應(yīng),跟我用STC89C52RC有關(guān)系嗎?程序能燒錄進(jìn)去,不知是什么原因
回復(fù)

使用道具 舉報(bào)

5#
ID:143767 發(fā)表于 2022-4-3 18:19 | 只看該作者
不好意思,現(xiàn)正常了,是我把信號(hào)接到P1口了,謝謝
回復(fù)

使用道具 舉報(bào)

6#
ID:356957 發(fā)表于 2022-4-4 21:15 來(lái)自觸屏版 | 只看該作者
確實(shí)是,OLED_ShowString(82,4,"M/S",16); 這個(gè)函數(shù)改成CM就好了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表