找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

HC-SR04超聲波倒車?yán)走_(dá)Proteus仿真與單片機程序源碼

  [復(fù)制鏈接]
ID:347939 發(fā)表于 2018-6-8 23:54 | 顯示全部樓層 |閱讀模式
分享一個基于51單片機的倒車系統(tǒng)仿真,帶減小距離和增加距離調(diào)節(jié)以及報警功能.還有一個功能鍵
用HC-SR04超聲波模塊組成的LCD1602顯示的超聲波測距板仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

仿真圖

仿真圖
0.png 0.png

電路原理圖如下:
0.png

HC-SR04超聲波倒車?yán)走_(dá)的單片機源程序如下:
  1. #include <REGX52.H>
  2. #include <stdio.h>
  3. #include "LCD.H"
  4. #include "18B20.H"
  5. #include "delay.h"

  6. sbit k1=P3^5;
  7. sbit k2=P3^6;
  8. sbit csb=P2^5;
  9. sbit csbint=P3^2;
  10. sbit bg=P2^6;
  11. sbit fmq=P3^3;

  12. unsigned char aa[]={' ',' ','D','i','s','t','a','n','c','e',':'};           //Distance

  13. unsigned char bb[11]={' ',' ',' ',' ','.',' ',' ',' ',' ',' ',};        
  14. unsigned char cc[]={'A','.','A','A','m'};
  15. unsigned char zf,a1,a2,a3,xs,e,n,m,z;         //zf 溫度正負(fù)標(biāo)志位;a1,a2,a3,按鍵設(shè)定程序中定值的米、分米、厘米臨時存儲變量
  16.                                              //xs,e 用于按鍵程序中設(shè)定位閃動顯示的變量;flag,未用,n,是背光控制標(biāo)志位變量;m,z;
  17. unsigned int dz,k,s,j,bgz,k;
  18. int temp;
  19. float temperature,csbc,wdz;
  20. bit wh;

  21. main()
  22. {
  23.         TH0=0;
  24.         TL0=0;
  25.         TMOD=0X11;        //T1,T0為16位定時器
  26.         EA=0;
  27.         bg=0;
  28.         n=0;
  29.         m=0;
  30.         z=0;
  31.          init();
  32.         Init_DS18B20();
  33.     dz=80;
  34.         bb[6]=0xdf;
  35.         bb[7]=0x43;
  36.         e=4;
  37.         cc[0]=dz/100+'0';
  38.         cc[2]=dz/10%10+'0';
  39.         cc[3]=dz%10+'0';
  40.         LCD_Write_String(0,0,aa);
  41.         LCD_Write_String(11,1,cc);
  42.         while(1)
  43.         {
  44.                 temp=ReadTemperature();
  45.                 fmq=1;
  46.                 DelayMs(100);
  47.                 if(temp<0)
  48.                 {
  49.                            temp=-(temp-1);
  50.                            zf=1;
  51.                         bb[0]='-';
  52.                 }
  53.                 else
  54.                 {
  55.                         zf=0;
  56.                         bb[0]=' ';
  57.                 }
  58.                   csb=0;                                             //啟動一次模塊
  59.                   _nop_();
  60.                   _nop_();
  61.                   _nop_();
  62.                   _nop_();
  63.                   _nop_();
  64.                   _nop_();
  65.                   _nop_();
  66.                   _nop_();
  67.                   _nop_();
  68.                   _nop_();
  69.                   _nop_();
  70.                   _nop_();
  71.                   _nop_();
  72.                   _nop_();
  73.                   _nop_();
  74.                   _nop_();
  75.                   _nop_();
  76.                   _nop_();
  77.                   _nop_();
  78.                   _nop_();
  79.                   _nop_();
  80.                   csb=1;
  81.                 ET0=1;        //啟動計數(shù)器T0,用以計時
  82.                 TR0=1;
  83.                 EA=1;
  84.                 j=80;        //延時                  
  85.             while(j--)
  86.                 {
  87.                 }
  88.                 csbint=1;
  89.         j=0;
  90.                    while(csbint)                        //判斷接收回路是否收到超聲波的回波
  91.                 {
  92.                         j++;
  93.                         if(j>=2500)                        //如果達(dá)到一定時間沒有收到回波,則將csbint置零,退出接收回波處理程序
  94.                         csbint=0;
  95.                 }
  96.                 TR0=0;
  97.                 s=TH0*256+TL0;                        //讀取時間數(shù)據(jù)
  98.                 TH0=0;
  99.                 TL0=0;
  100.                 wdz=0.00000607*temp;   //溫度補償計算
  101.                 if(zf==0)
  102.                 {                                                                                                                                                                                       
  103.                           csbc=0.03315+wdz;
  104.                 }
  105.                 else csbc=0.03315-wdz;
  106.                 csbc=csbc/2;
  107.                 s=s*csbc-8;
  108.                 if(s<5) //測量值小于下限
  109.                 {
  110.                         cc[0]='-';
  111.                         cc[2]='-';
  112.                         cc[3]='-';
  113.                 }
  114.                 else if(s>500)        //測量值大于上限
  115.                 {
  116.                         cc[0]='C';
  117.                         cc[2]='C';
  118.                         cc[3]='C';
  119.                 }
  120.                 else
  121.                 {
  122.                         cc[0]=s/100+'0';
  123.                         cc[2]=s/10%10+'0';
  124.                         cc[3]=s%10+'0';
  125.                 }
  126.                 if(s<dz)
  127.                 {
  128.                         bgz=s*5;
  129.                           for (k=0;k<bgz;k++)
  130.                           {
  131.                             DelayUs2x(150);
  132.                             fmq=!fmq;       //BEEP取反
  133.                           }
  134.                 }
  135.                 bb[1]=temp/1000+0x30;
  136.                 bb[2]=temp/100%10+0x30;//顯示十位
  137.                 bb[3]=temp%100/10+0x30;//顯示個位
  138.                 bb[5]=temp%10+0x30; //小數(shù)
  139.         if(zf==0)
  140.             {
  141.                         if(temp<1000)
  142.                         {
  143.                                    bb[1]=' ';
  144.                                    if(temp<100)
  145.                                    {
  146.                                       bb[2]=' ';
  147.                                 }
  148.                         }
  149.                 }
  150.                 else
  151.                 {
  152.                         if(temp<1000)
  153.                         {
  154.                                    bb[1]='-';
  155.                                    bb[0]=' ';
  156.                                    if(temp<100)
  157.                                    {
  158.                                         bb[0]=' ';
  159.                                            bb[1]=' ';
  160.                                       bb[2]='-';
  161.                                 }
  162.                         }
  163.                 }
  164.                 LCD_Write_String(0,1,bb);
  165.                 LCD_Write_String(11,0,cc);
  166.                 while(!k2)                   //液晶背面開關(guān)
  167.                 {
  168.                    n=1;
  169.                 }
  170.                 if(n==1)
  171.                 {
  172.                    bg=~bg;                   //bg=0;時開背光燈
  173.                    n=0;
  174.                 }
  175.                 if(!k1)      //按鍵處理程序
  176.                 {
  177.                     TR1=0;
  178.                         TR0=0;
  179.                           cc[0]='A';
  180.                         cc[1]='.';
  181.                         cc[2]='A';
  182.                         cc[3]='A';
  183.                         cc[4]='m';
  184.                         LCD_Write_String(11,1,cc);
  185.                         k=500;
  186.                     while(k)
  187.                         {
  188.                                  k--;
  189.                                 DelayMs(2);
  190.                         }
  191.                           cc[0]=dz/100+'0';
  192.                         cc[2]=dz/10%10+'0';
  193.                         cc[3]=dz%10+'0';
  194.                         LCD_Write_String(11,1,cc);
  195.                         a1=dz/100;
  196.                         a2=dz/10%10;
  197.                         a3=dz%10;
  198.                         n=1;
  199.                           while(n)
  200.                         {
  201.                                 if(!k2)
  202.                                 {
  203.                                         while(!k2);
  204.                                         e=1;
  205.                                         xs=3;
  206.                                         a1+=1;
  207.                                         if(a1>5)
  208.                                         a1=0;
  209.                                           cc[0]=a1+'0';
  210.                                 }

  211.                                 if (e==1)
  212.                                 {
  213.                                         xs++;
  214.                                            cc[0]=a1+'0';
  215.                                           if(xs>6)
  216.                                           {
  217.                                     xs=0;
  218.                                                 e=0;
  219.                                           }
  220.                                 }
  221.                                 else
  222.                                 {
  223.                                         cc[0]=' ';
  224.                                         xs++;
  225.                                         if(xs>3)
  226.                                         {
  227.                                                 xs=0;
  228.                                                 e=1;
  229.                                         }
  230.                                 }
  231.                                 LCD_Write_String(11,1,cc);
  232.                                 if(!k1)
  233.                                 {
  234.                                         while(!k1);
  235.                                            cc[0]=a1+'0';
  236.                                         m=1;
  237.                                         while(m)
  238.                                         {
  239.                                                 if(!k2)
  240.                                                 {
  241.                                                         while(!k2);
  242.                                                         e=1;
  243.                                                         xs=3;
  244.                                                         a2+=1;
  245.                                                         if(a2>9)
  246.                                                         a2=0;
  247.                                                           cc[2]=a2+'0';
  248.                                                         LCD_Write_String(11,1,cc);
  249.                                                 }

  250.                                                 if (e==1)
  251.                                                 {
  252.                                                         xs++;
  253.                                                            cc[2]=a2+'0';
  254.                                                           if(xs>6)
  255.                                                           {
  256.                                                     xs=0;
  257.                                                                 e=0;
  258.                                                           }
  259.                                                 }
  260.                                                 else
  261.                                                 {
  262.                                                         cc[2]=' ';
  263.                                                         xs++;
  264.                                                         if(xs>3)
  265.                                                         {
  266.                                                                 xs=0;
  267.                                                                 e=1;
  268.                                                         }
  269.                                                 }
  270.                                                 LCD_Write_String(11,1,cc);
  271.                                                 
  272.                                                 if(!k1)
  273.                                                 {
  274.                                                         while(!k1);
  275.                                                         cc[2]=a2+'0';
  276.                                                         z=1;
  277.                                                         while(z)
  278.                                                         {
  279.                                                                 if(!k2)
  280.                                                                 {
  281.                                                                         while(!k2);
  282.                                                                         e=1;
  283.                                                                         xs=3;
  284.                                                                         a3+=1;
  285.                                                                         if(a3>9)
  286.                                                         a3=0;
  287.                                                                           cc[3]=a3+'0';
  288.                                                                         LCD_Write_String(11,1,cc);
  289.                                                                 }

  290.                                                                 if (e==1)
  291.                                                                 {
  292.                                                                         xs++;
  293.                                                                            cc[3]=a3+'0';
  294. ……………………

  295. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

0.png
Keil代碼與Proteus7.8仿真(dsn文件 只能用7.8版本打開)下載:
超聲波倒車?yán)走_(dá).zip (122.01 KB, 下載次數(shù): 1026)




評分

參與人數(shù) 3黑幣 +54 收起 理由
心動s290 + 1 贊一個!
zsyzdx + 3 贊一個!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:246531 發(fā)表于 2018-10-9 10:11 | 顯示全部樓層
很詳細(xì),強力推薦,贊一個
回復(fù)

使用道具 舉報

ID:407021 發(fā)表于 2018-10-10 09:46 | 顯示全部樓層
很有用,學(xué)習(xí)了
回復(fù)

使用道具 舉報

ID:407378 發(fā)表于 2018-10-10 09:47 | 顯示全部樓層
贊一個!!!!!!!!!!!!!!
回復(fù)

使用道具 舉報

ID:407378 發(fā)表于 2018-10-10 09:48 | 顯示全部樓層
贊一個!
回復(fù)

使用道具 舉報

ID:407428 發(fā)表于 2018-10-10 11:23 | 顯示全部樓層
贊一個
回復(fù)

使用道具 舉報

ID:412234 發(fā)表于 2018-10-19 13:44 | 顯示全部樓層
厲害了
回復(fù)

使用道具 舉報

ID:412234 發(fā)表于 2018-10-19 13:45 | 顯示全部樓層
厲害了
回復(fù)

使用道具 舉報

ID:426441 發(fā)表于 2018-11-14 15:53 | 顯示全部樓層
學(xué)習(xí)了,感謝
回復(fù)

使用道具 舉報

ID:443404 發(fā)表于 2018-12-12 10:07 | 顯示全部樓層
我這用不了啊
你這里的超聲波的hex文件不需要嗎?

回復(fù)

使用道具 舉報

ID:3802 發(fā)表于 2019-1-8 16:31 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

ID:500061 發(fā)表于 2019-4-7 18:58 | 顯示全部樓層
正好能用到,很厲害~
回復(fù)

使用道具 舉報

ID:515555 發(fā)表于 2019-4-18 15:53 | 顯示全部樓層
學(xué)習(xí)了
回復(fù)

使用道具 舉報

ID:244712 發(fā)表于 2019-4-22 16:10 | 顯示全部樓層
人狠話不多,找了全網(wǎng)就你最好
回復(fù)

使用道具 舉報

ID:524230 發(fā)表于 2019-4-29 10:41 | 顯示全部樓層
這個怎么用。繉(dǎo)入protues工程,單片機加載hex文件就可以實現(xiàn)仿真嗎?我是小白,請各位大神賜教
回復(fù)

使用道具 舉報

ID:524230 發(fā)表于 2019-4-29 10:43 | 顯示全部樓層
導(dǎo)入protues工程,單片機加載hex文件就可以實現(xiàn)仿真嗎?我是小白,請各位大神賜教
回復(fù)

使用道具 舉報

ID:525399 發(fā)表于 2019-5-3 21:59 | 顯示全部樓層
贊一個  剛需
回復(fù)

使用道具 舉報

ID:253767 發(fā)表于 2019-5-4 07:48 | 顯示全部樓層
謝謝分享。!
回復(fù)

使用道具 舉報

ID:79544 發(fā)表于 2019-5-4 18:39 | 顯示全部樓層
樓主您好 。仿真軟件ISIS7怎么找超聲波模塊?謝謝
回復(fù)

使用道具 舉報

ID:235332 發(fā)表于 2019-5-4 21:41 | 顯示全部樓層
資料不錯,想問一下HC-SR04這個元器件是怎么弄得呢?
回復(fù)

使用道具 舉報

ID:391610 發(fā)表于 2019-5-12 00:27 | 顯示全部樓層
sch文件打不開是什么原因
回復(fù)

使用道具 舉報

ID:554043 發(fā)表于 2019-6-4 18:35 來自手機 | 顯示全部樓層
樓主我買了,但是代碼用不出來,怎么辦
回復(fù)

使用道具 舉報

ID:554043 發(fā)表于 2019-6-4 18:36 來自手機 | 顯示全部樓層
樓主怎么用呀
IMG_20190604_180420.jpg
1559644547326..jpg
回復(fù)

使用道具 舉報

ID:525478 發(fā)表于 2019-6-10 14:01 | 顯示全部樓層
下載收藏  51黑有你更精彩
回復(fù)

使用道具 舉報

ID:295142 發(fā)表于 2019-6-18 15:25 | 顯示全部樓層
真好用啊 贊一個
回復(fù)

使用道具 舉報

ID:573176 發(fā)表于 2019-6-28 10:53 | 顯示全部樓層
自己做的HS-SR04不能仿真怎么回事
回復(fù)

使用道具 舉報

ID:576149 發(fā)表于 2019-7-2 10:01 | 顯示全部樓層
贊一個
回復(fù)

使用道具 舉報

ID:282095 發(fā)表于 2019-7-2 11:08 | 顯示全部樓層
主要利用了超聲波傳感器和液晶屏
回復(fù)

使用道具 舉報

ID:575298 發(fā)表于 2019-7-2 12:34 來自手機 | 顯示全部樓層
倒車?yán)走_(dá)
回復(fù)

使用道具 舉報

ID:407026 發(fā)表于 2019-8-1 21:06 | 顯示全部樓層
你好樓主 為什么我下載了 仿真沒有顯示
回復(fù)

使用道具 舉報

ID:407026 發(fā)表于 2019-8-1 21:18 | 顯示全部樓層
鵬博士PBs 發(fā)表于 2019-7-2 11:08
主要利用了超聲波傳感器和液晶屏

你好 ,為什么我打開 仿真不行呢
回復(fù)

使用道具 舉報

ID:489394 發(fā)表于 2019-8-11 19:00 | 顯示全部樓層
LCD不顯示怎么辦??
回復(fù)

使用道具 舉報

ID:472123 發(fā)表于 2019-9-20 00:08 | 顯示全部樓層
實用,贊一個
回復(fù)

使用道具 舉報

ID:312929 發(fā)表于 2019-10-25 09:29 | 顯示全部樓層
zhangxiaow 發(fā)表于 2019-5-12 00:27
sch文件打不開是什么原因

換個版本高的PROTEUS
回復(fù)

使用道具 舉報

ID:633379 發(fā)表于 2019-11-9 11:06 | 顯示全部樓層
仿真壓縮包打不開怎么辦
回復(fù)

使用道具 舉報

ID:509174 發(fā)表于 2019-11-11 14:22 | 顯示全部樓層

換個版本高的PROTEUS
回復(fù)

使用道具 舉報

ID:509174 發(fā)表于 2019-11-11 14:23 | 顯示全部樓層
真好用啊 贊一個
回復(fù)

使用道具 舉報

ID:546381 發(fā)表于 2019-11-24 18:43 | 顯示全部樓層
很詳細(xì),強力推薦,贊一個
回復(fù)

使用道具 舉報

ID:653556 發(fā)表于 2019-12-1 15:33 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

ID:654098 發(fā)表于 2019-12-2 11:18 | 顯示全部樓層
想下載。。。
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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