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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

超聲波仿真加單片機源程序 需8.6版本的proteus

[復制鏈接]
跳轉到指定樓層
樓主
仿真需要8.6版本的仿真proteus
超聲波仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


51單片機源程序:
  1. #include <REGX52.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. #define smgport P0
  6. uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  7. uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7};
  8. uchar dis_smg[4]   ={0x40,0x40,0x40,0x40};
  9. sbit smg_w=P2^1;
  10. sbit smg_d=P2^0;
  11. sbit ECHO=P3^2;
  12. sbit TR=P3^3; //觸發信號
  13. uchar Flag;//測量標志位0.5秒觸發一次
  14. /**************************************************
  15. 10us延時
  16. **************************************************/
  17. void Delay10Us(void)
  18. {
  19.     _nop_();_nop_();
  20.     _nop_();_nop_();
  21.     _nop_();_nop_();
  22.     _nop_();_nop_();
  23. }
  24. /**************************************************
  25. 數碼位選函數
  26. **************************************************/
  27. void smg_we_switch(uchar i)
  28. {
  29.     smgport=smg_we[i];
  30.     smg_w=1;
  31.     //smgport=smg_we[i];
  32.     smg_w=0;        
  33. }
  34. void smg_d_switch(uchar dat)
  35. {
  36.     smgport=dat;
  37.     smg_d=1;
  38.     smg_d=0;//所存           
  39. }
  40. /**************************************************
  41. 關閉顯示用于消隱
  42. **************************************************/
  43. void smgalloff(void)
  44. {
  45.     smgport=0;
  46.     smg_d=1;
  47.     smg_d=0;

  48.     smgport=0xff;
  49.     smg_w=1;
  50.     smg_w=0;      
  51. }
  52. /**************************************************
  53. 數碼管顯示
  54. **************************************************/
  55. void smgDis(void)
  56. {
  57.     static uchar i=0;
  58.     smgalloff();
  59.     smg_d_switch(dis_smg[i]);
  60.     smg_we_switch(i);
  61.     if(++i==4)i=0;
  62. }
  63. /**************************************************
  64. 距離測量
  65. **************************************************/
  66. void Measure(void)
  67. {
  68.     uchar Err; //錯誤標記
  69.     unsigned long distance,pTime;//距離,時間變量
  70.     Err=0;
  71.     TR=1;     //TR保持10us高電平觸發模塊測距
  72.     Delay10Us();
  73.     TR=0;
  74.     TH0=0;
  75.     TL0=0;
  76.     while(ECHO==0);//等待ECHO變為高
  77.     TR0=1;       //啟動定時器,外部高電平觸發
  78.     while(ECHO==1)//等待超聲波回應獲超時
  79.     {
  80.         pTime=TH0*256+TL0;
  81.         if(pTime>40000)//時間超時
  82.         {
  83.             Err=1;
  84.             break;
  85.         }
  86.     }
  87.     TR0=0;//關閉定時器
  88.     pTime=TH0*256+TL0; //獲取時間
  89.     if(pTime<59)//測量距離小于2cm
  90.     {
  91.         Err=1;
  92.     }
  93.     if(Err==0)
  94.     {
  95.         distance=(pTime*173)/10000;//;pTime*346/1000000/2=pTime*0.0173 仿真的環境溫度為25度346m/s
  96.         if(distance>400)//仿真有效值只到331CM
  97.         {
  98.             Err=1;           
  99.         }
  100.         else
  101.         {
  102.             dis_smg[0]=0;
  103.             dis_smg[1]=smg_du[distance/100]; //分離千位
  104.             dis_smg[2]=smg_du[(distance/10)%10];//分離百位
  105.             dis_smg[3]=smg_du[distance%10];     //分離個位
  106.             return;
  107.         }
  108.     }
  109.     dis_smg[0]=0;    //錯誤時數碼管顯示Err
  110.     dis_smg[1]=0x79;
  111.     dis_smg[2]=0x50;
  112.     dis_smg[3]=0x50;              
  113. }
  114. /**************************************************
  115. 定時器0初始化
  116. **************************************************/
  117. void Timer0Init(void)
  118. {
  119.     TMOD|=0x09;//工作于16位模式,只有P32和TR0同時為1時開始計數
  120. }
  121. /**************************************************
  122. 定時器1初始化
  123. **************************************************/
  124. void Timer1Init(void)
  125. {
  126.     TMOD|=0x10;//定時器1工作在方式1
  127.         TH1 = (65536-2000)/256;
  128.         TL1 = (65536-2000)%256;     //2ms
  129.     TR1=1;
  130.     ET1=1;
  131.     EA=1;        
  132. }
  133. void main(void)
  134. {
  135.     TR=0;       //關閉觸發
  136.     smgalloff();
  137.     Timer0Init();//定時器0初始化
  138.     Timer1Init();//定時器1初始化
  139.     while(1)
  140.     {
  141.         if(Flag)//每500ms測量一次
  142.         {
  143.             Flag=0;
  144.             Measure();//測量
  145.         }
  146. …………
  147. …………
  148. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

全部資料51hei下載地址:
單片機超聲波仿真.zip (106.37 KB, 下載次數: 226)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2017-12-3 00:43 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:212177 發表于 2018-1-30 09:41 來自手機 | 只看該作者
哈哈,我終于找到這個超聲波模塊了
回復

使用道具 舉報

地板
ID:310648 發表于 2018-5-22 10:11 | 只看該作者
怎么下載不了
回復

使用道具 舉報

5#
ID:523759 發表于 2019-6-10 09:35 | 只看該作者
那個圈是怎么放置的
回復

使用道具 舉報

6#
ID:655329 發表于 2019-12-3 17:59 | 只看該作者
厲害
回復

使用道具 舉報

7#
ID:826192 發表于 2020-10-8 20:22 | 只看該作者
仿真中為什么顯示不了距離
回復

使用道具 舉報

8#
ID:208271 發表于 2023-2-25 13:00 | 只看該作者
用8.9運行,可以運行,程序也沒有問題,感謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲 自拍 另类 欧美 丝袜 | 91久久久久久 | 中文字幕免费在线 | 欧美一区二区三区免费电影 | 成年人在线 | 欧美专区在线 | 欧美日韩国产一区二区三区 | 精品一二三区 | 色呦呦网站| h视频在线观看免费 | 中文在线播放 | 欧美综合在线视频 | 午夜影晥| 亚洲精品一区二区在线 | 中文字幕一区二区三区四区五区 | 91精品国产一区二区三区动漫 | 天天影视亚洲综合网 | 日韩欧美三区 | 精精国产视频 | 日韩国产高清在线观看 | 国产精品伦理一区 | 国产色在线 | www.久久久久久久久久久久 | 久久久www成人免费精品 | 9999在线视频 | 国产丝袜一区二区三区免费视频 | 久久亚洲综合 | 欧美激情精品久久久久久 | 国精产品一品二品国精在线观看 | 亚洲人成人一区二区在线观看 | 久久久久国产精品一区 | 精品久久久久久亚洲综合网站 | 国产亚洲一区二区在线观看 | 91视频麻豆 | 精产国产伦理一二三区 | 色婷婷一区二区三区四区 | av网站免费 | 日韩国产欧美一区 | 91久操视频| 正在播放国产精品 | 国内久久精品 |