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

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

QQ登錄

只需一步,快速開始

搜索
查看: 4411|回復(fù): 0
收起左側(cè)

STC89C51最小系統(tǒng)+HC-SR04+LCD12864(超聲波測(cè)距儀)源碼

[復(fù)制鏈接]
ID:368523 發(fā)表于 2018-7-13 16:12 | 顯示全部樓層 |閱讀模式
QQ圖片20180713160516.jpg
單片機(jī)源程序如下:
  1. /////////////////////////////////////////////////////////////////
  2. /***********************超聲波模塊程序**************************/
  3. /////////////////////////////////////////////////////////////////
  4. #include <reg52.h>
  5. #include <intrins.h>
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. //全局變量定義
  9. unsigned int time;
  10. unsigned int S,s_false;
  11. unsigned long num1;
  12. bit flag;
  13. //12864液晶顯示定義
  14. uchar code sj1[]={"<<超聲波測(cè)距儀>>"};
  15. uchar code sj2[]={"  榆林學(xué)院      "};
  16. uchar code sj3[]={"測(cè)量范圍5cm-2m  "};
  17. uchar code sj4[]={"當(dāng)前距離:"};
  18. uchar code sj5[]={"錯(cuò)誤 "};
  19. //超聲波引腳定義                                                
  20. sbit Trig =P1^1;          //定義引腳        
  21. sbit Echo =P3^2;
  22. //12864液晶引腳定義
  23. sbit lcdrs=P3^5;          //命令數(shù)據(jù)
  24. sbit lcdrw=P3^6;          //讀寫
  25. sbit lcde =P3^4;
  26. sbit LCD_PSB=P3^7;
  27. //時(shí)鐘調(diào)整按鍵引腳定義
  28. sbit rad=P2^4;
  29. sbit rsu=P2^5;
  30. sbit mad=P2^6;
  31. sbit msu=P2^7;

  32. sbit rst=P3^1;            //DS1302復(fù)位端,低電平關(guān)閉  
  33. //延時(shí)函數(shù)
  34. void delay(uint z)
  35. {
  36.         uint x,y;
  37.         for(x=z;x>0;x--)
  38.                 for(y=110;y>0;y--);
  39. }
  40. void delay_20us()
  41. {
  42.         uchar a;
  43.         for(a=0;a<100;a++);
  44. }
  45. //2864液晶寫命令函數(shù)
  46. void xmn(unsigned char com)
  47. {
  48.         lcdrs=0;
  49.         P0=com;
  50.         delay(5);
  51.         lcde=1;
  52.         delay(5);
  53.         lcde=0;
  54. }
  55. //2864液晶寫數(shù)據(jù)函數(shù)
  56. void xsj(unsigned char zifu)
  57. {
  58.         lcdrs=1;
  59.         P0=zifu;
  60.         delay(5);
  61.         lcde=1;
  62.         delay(5);
  63.         lcde=0;
  64. }
  65. //2864液晶顯示函數(shù)1
  66. void xs1()
  67. {
  68.         uchar i;
  69.         xmn(0x80);
  70.         for(i=0;i<16;i++)
  71.         {
  72.                 xsj(sj1[i]);
  73.         }
  74.         xmn(0x90);
  75.         for(i=0;i<16;i++)
  76.         {
  77.                 xsj(sj2[i]);
  78.         }
  79.         xmn(0x88);
  80.         for(i=0;i<16;i++)
  81.         {
  82.                 xsj(sj3[i]);
  83.         }
  84.         xmn(0x98);
  85.         for(i=0;i<16;i++)
  86.         {
  87.                 xsj(sj4[i]);
  88.         }
  89. }
  90. //2864液晶顯示函數(shù)2
  91. void xs2(uint t_emp)
  92. {
  93.         uchar qian,bai,shi,ge;
  94.         qian=t_emp/1000;
  95.         bai=(t_emp%1000)/100;
  96.         shi=(t_emp%100)/10;
  97.         ge=t_emp%10;

  98.         xmn(0x9d);
  99.         xsj(0x30+qian);
  100.         delay(1);
  101.         xsj(0x30+bai);
  102.         delay(1);
  103.         xsj(0x30+shi);
  104.         delay(1);
  105.         xsj(0x30+ge);
  106.         delay(1);
  107.         xsj('c');
  108.         delay(1);
  109.         xsj('m');
  110.         delay(100);
  111. }
  112. //超聲波計(jì)數(shù)函數(shù)
  113. void T0_time() interrupt 1  //T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍
  114. {
  115.         flag=0;                  //中斷溢出標(biāo)志,失敗
  116.         TH0=0;
  117.         TL0=0;
  118.         TR0=0;                   //關(guān)閉計(jì)數(shù)
  119. }
  120. //中斷定時(shí)函數(shù)
  121. void T1_timer() interrupt 3 //中斷
  122. {
  123.         TH1=(65536-50000)/256;
  124.         TL1=(65536-50000)%256;
  125.         num1++;
  126. }
  127. //超聲波模塊啟動(dòng)函數(shù)
  128. void StartModule()          //啟動(dòng)模塊
  129. {
  130.         Trig=1;                 //啟動(dòng)一次模塊
  131.         _nop_();_nop_();_nop_();_nop_();_nop_();
  132.         _nop_();_nop_();_nop_();_nop_();_nop_();
  133.         _nop_();_nop_();_nop_();_nop_();_nop_();
  134.         _nop_();_nop_();_nop_();_nop_();_nop_();
  135.         _nop_();
  136.         Trig=0;
  137. }
  138. //超聲波測(cè)試距離計(jì)算函數(shù)
  139. void Count(void)
  140. {
  141.         uchar i;
  142.         time=TH0*256+TL0;
  143.         TH0=0;
  144.         TL0=0;
  145.         S=(time*1.8)/100+2;               //算出來(lái)是CM
  146.         if(((S<5)||(S>=600))||flag==0)  //超出測(cè)量范圍顯示“-”失敗
  147.         {
  148.                 //flag=1;
  149.                 s_false=1000;
  150.                 xmn(0x9d);
  151.                 for(i=0;i<6;i++)
  152.                 {
  153.                         xsj(sj5[i]);
  154.                 }
  155.                 //(s_false);
  156.         }
  157.         else
  158.         {
  159.                 xs2(S);
  160.         }
  161. }
  162. //12864液晶初始化函數(shù)
  163. void init()
  164. {LCD_PSB=1;
  165.         delay(100);
  166.         xmn(0x30);
  167.         delay_20us();
  168.         xmn(0x30);
  169.         delay_20us();
  170.         xmn(0x0c);
  171.         delay_20us();
  172.         xmn(0x01);
  173.         delay_20us();
  174.         xmn(0x06);
  175.         delay_20us();
  176. }
  177. //主函數(shù)
  178. void main()
  179. {
  180.         //unsigned char TempCyc;
  181.         rst=0;           //關(guān)閉板上DS1302
  182.         
  183.         P0=0XFF;
  184.         
  185.         
  186.         P0=0XFF;

  187.         P0=0X00;

  188.         
  189.         P0=0X00;


  190.         delay(500);    //啟動(dòng)等待,等LCM講入工作狀態(tài)
  191.         lcdrw=0;
  192.         init();        //LCM初始化
  193.         delay(500);    //延時(shí)片刻(可不要)
  194.         while(1)
  195.         {
  196.                 TMOD=0x11; //設(shè)T0為方式1,GATE=1;
  197.                 TH0=0;
  198.                 TL0=0;
  199.                 ET0=1;     //允許T0中斷
  200.                 ET1=1;
  201.                 TR1=1;
  202.                 EA=1;      //開啟總中斷

  203.                 xs1();

  204.                 Trig=0;
  205.                 Echo=0;
  206.                 while(1)
  207.                 {
  208.                         StartModule();
  209.                         flag=1;
  210.                         //while(!Echo);      //當(dāng)echo為零時(shí)等待
  211.                         while((!Echo)&&flag);//當(dāng)echo為零時(shí)等待,中斷flag跳出等待
  212.                         TR0=1;               //開啟計(jì)數(shù)
  213.                         while(Echo&&flag);   //當(dāng)echo為1計(jì)數(shù)并等待
  214.                         TR0=0;               //關(guān)閉計(jì)數(shù)
  215.                         Count();             //計(jì)算
  216.                         delay(120);          //80MS
  217.                 }
  218.         }
  219. }
復(fù)制代碼

所有資料51hei提供下載:
51單片機(jī)控制超聲波測(cè)距.zip (62.84 KB, 下載次數(shù): 112)



評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本午夜一区二区三区 | av在线播放一区二区 | 国产欧美在线一区 | 91麻豆精品国产91久久久久久久久 | www.国产精| 亚洲系列第一页 | 国产精品视频久久久久 | 日韩专区中文字幕 | 欧美日韩精品 | 国产精品久久久久久久久免费樱桃 | 日韩手机在线视频 | 日韩成人免费在线视频 | 亚洲福利在线视频 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 91精品久久久 | 欧美精品久久久 | 成人在线一区二区三区 | 亚洲综合色网 | 四虎永久影院 | 自拍偷拍亚洲一区 | 综合国产在线 | 免费成人高清在线视频 | 欧美999| 一区二区三区高清在线观看 | 精品一区二区三区免费毛片 | 一级网站 | 91五月天 | 日本综合在线观看 | 精品在线观看一区二区 | 久久精品一 | 网站黄色在线免费观看 | 中文字幕人成乱码在线观看 | 亚洲精品久久久久久久久久久 | 精品在线观看一区二区 | 欧美看片| 91精品国产一区二区三区蜜臀 | 中文字幕1区2区3区 亚洲国产成人精品女人久久久 | 国产精品成人一区二区 | 国产日韩欧美 | 五月天婷婷激情 | www成人免费视频 |