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

標題: 基于51單片機的超聲波倒車報警系統(tǒng)Proteus仿真程序 [打印本頁]

作者: Conformist    時間: 2020-6-1 22:01
標題: 基于51單片機的超聲波倒車報警系統(tǒng)Proteus仿真程序
stc89c52單片機+lcd1602+srf04超聲波傳感器+DS18B20溫度傳感器+無源蜂鳴器


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<math.h>
  4. #include"lcd.h"
  5. #include"temp.h"
  6. /*??????*/
  7. sbit Trig = P2^1;//??????????
  8. sbit Echo = P2^0;
  9. sbit DQ=P3^7;        //?????
  10. sbit beep=P1^5;        //???
  11. sbit key_up=P3^2;//????0?????
  12. sbit key_down=P3^3;//????1?????
  13. /*????????*/
  14. /*?????????*/
  15. unsigned char mes_temp[]="T:";//lcd???????
  16. unsigned char mes_dis[]="S:";
  17. unsigned char mes_alarmDis[]="aS:";
  18. unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
  19. /*??????*/
  20. float  time=0;//??
  21. float  temp;//??
  22. uint  S=0;//??
  23. uint alarm_distance = 10;//????
  24. bit    flag =0;//???????
  25. bit    flag_temp =0;//??????  0???,1???
  26. uchar disbuff[4]= { 0,0,0,0};//???????
  27. uchar temps[] = { 0, 0, 0, 0};//????
  28. uchar alarm_distances[] = { 0, 0};//??????
  29. /*****????****/
  30. void delay(uchar n){//10us
  31.     while(n--);
  32. }
  33. void delayms(unsigned int ms){//1ms
  34.     unsigned char i=100,j;
  35.     for(; ms; ms--){
  36.         while(--i){
  37.             j=10;
  38.             while(--j);
  39.         }
  40.     }
  41. }
  42. /****????*****/
  43.     void Conut(void)
  44.     {
  45.     uint i=0;//????,????????????
  46.     float v;//?????
  47.     /*****????*****/
  48.     time=TH0*256+TL0;//??,us
  49.     TL0=0;//??????,???????
  50.     TH0=0;
  51.     if(flag_temp == 1)//????(??0)
  52.         v=332+temp*0.6;//???????????? m/s
  53.     else//?????
  54.         v=332-temp*0.6;//???????????? m/s
  55.     /*  ????m/s???cm/us
  56.     v:m/s     ---->  ????0.5  0.5*v*100cm/1000 000us  ---->   v/20 000 cm/us
  57.     S=time*v  ---->  ???????
  58.     time/100  v/200  ???????????*/
  59.     time=time/100;
  60.     v=v/200;
  61.     S=time*v;//????
  62.     /*****??????*****/
  63.     /*****????,??????*****/
  64.     //?????????
  65.     LcdWriteCom(0x80+0x42);//???????2???  ????????0x80+0x40
  66.     if((S>=700)||flag==1) {//???????? ??????700cm ??????
  67.         flag=0;//?????????
  68.         while(i<1200){//????
  69.                 beep = ~beep;
  70.                 delay(100);
  71.                 i++;
  72.             }//???????????
  73.            i=0;//???????
  74.            beep = 0;
  75.         //LCD?????   -.--M
  76.         LcdWriteData(ASCII[11]);//-
  77.         LcdWriteData(ASCII[10]);//.
  78.         LcdWriteData(ASCII[11]);//-
  79.         LcdWriteData(ASCII[11]);//-
  80.         LcdWriteData( ASCII[12]);//M
  81.     }
  82.     else //?????? ? 68cm -->  0.68M
  83.     {
  84.         if(S<alarm_distance){
  85.             while(i<1200){//????
  86.                 beep = ~beep;
  87.                 delay(100);
  88.                 i++;
  89.             }//???????????
  90.            i=0;//???????
  91.            beep = 0;
  92.         }
  93.         beep = 0;//??????
  94.         disbuff[0]=S/100;         //??
  95.         disbuff[1]=S%100/10;      //??
  96.         disbuff[2]=S%10 %10;      //??
  97.         LcdWriteData(ASCII[disbuff[0]]);//0
  98.         LcdWriteData(ASCII[10]);            //.
  99.         LcdWriteData(ASCII[disbuff[1]]);//6
  100.         LcdWriteData(ASCII[disbuff[2]]);//8
  101.         LcdWriteData(ASCII[12]);            //M
  102.     }
  103.     LcdWriteCom(0x80+0x48);//??????
  104.     for(i = 0 ; i < 3; i++)
  105.         LcdWriteData(mes_alarmDis[i]);//aS:
  106.     alarm_distances[0]=alarm_distance%100/10;      //??
  107.     alarm_distances[1]=alarm_distance%10 %10;      //??
  108.     for(i = 0 ; i < 2; i++){
  109.         LcdWriteData(ASCII[alarm_distances[i]]);
  110.         if(i == 1){
  111.             LcdWriteData('c');
  112.             LcdWriteData('m');
  113.         }
  114.     }
  115. }
  116. /****??????***/
  117. void T0_OVERFLOW() interrupt 1 //T0?????????,??????
  118. {
  119.     flag=1;
  120. }
  121. void alarm_distance_up() interrupt 0  {//0?????0????
  122.     alarm_distance +=5;
  123. }
  124. void alarm_distance_down() interrupt 2        {//2?????1????
  125.     if(alarm_distance > 5)
  126.         alarm_distance -=5;
  127. }
  128. /****???????****/
  129. void  StartModule(){
  130.     uchar i;//????
  131.     Trig=1;//??????
  132.     for(i=10; i>0; i--)
  133.         _nop_(); //??10????,??
  134.     Trig=0;
  135. }
  136. /***??????*/
  137. void temp_deal(int t){
  138.     uchar i;//????
  139.     float tp;//??????????
  140.     uint  ttp;
  141.         if(t< 0){//?????
  142.         flag_temp = 0;
  143.         LcdWriteCom(0x82);//2???????
  144.         LcdWriteData('-');
  145.         //?????????????,????
  146.         //?????
  147.         t=t-1;
  148.         t=~t;
  149.         tp=t;
  150.         //? 27.123 ---> 2712.3+0.5 --->2712
  151.         ttp=tp*0.0625*100+0.5;
  152.         temp = ttp/100;
  153.     }
  154.     else{
  155.         flag_temp = 1;
  156.         if(t > 0){
  157.             LcdWriteCom(0x82);
  158.             LcdWriteData('+');
  159.         }
  160.         tp=t;//?????????
  161.         ttp=tp*0.0625*100+0.5;
  162.         temp = ttp/100;
  163.     }
  164.     //2712/1000 -> 2
  165.     temps[0] = ttp / 1000;
  166.     //2712%1000 -->712  712/100-->7
  167.     temps[1] = ttp % 1000 / 100;
  168.     //2712%100 --> 12  12/10 -->1
  169.     temps[2] = ttp % 100 / 10;
  170.     temps[3] = ttp % 10;//2712%10 --> 2
  171.     LcdWriteCom(0x83);
  172.     for(i =0; i < 4;i++){
  173.         if(i==2)
  174.             LcdWriteData(ASCII[10]);
  175.         LcdWriteData(ASCII[temps[i]]);
  176.     }
  177.     LcdWriteData(' ');
  178.     LcdWriteData('C');
  179. }
  180. /*???*/
  181. void main(void){
  182.     uchar i;      //for?????
  183.     TMOD=0x01;    //??????
  184.     TH0=0;  TL0=0;//???0??
  185.     IT0=1;  IT1=1;//????0,1?????
  186.     ET0=1;        //??T0??
  187.     EX0=1;  EX1=1;//??????0,1
  188.     EA=1;         //????
  189.     LcdInit();    //???1602
  190.     LcdWriteCom(0x80);//???????
  191.     for(i=0; i<2; i++)
  192.        LcdWriteData(mes_temp[i]);//T:
  193.     LcdWriteCom(0x80+0x40);//??????????
  194.     for(i=0; i<2; i++)
  195.         LcdWriteData(mes_dis[i]);//S:
  196.     while(1){
  197.         //?????????
  198.         temp_deal(Ds18b20ReadTemp());
  199.         StartModule();//???????
  200.         while(!Echo);                //echo=1???
  201.         TR0=1;                         //????
  202.         while(Echo);        //echo=0???
  203.         TR0=0;                                    //????
  204.         Conut();                          //???????
  205.         delayms(80);       //??80ms
  206.     }
  207. }

復(fù)制代碼

所有資料51hei提供下載:
UltrasonicDistanceMeasurementSystem-master.zip (148.28 KB, 下載次數(shù): 172)



作者: 1feng1    時間: 2020-10-13 09:13
請問是51單片機還是stm32單片機
作者: 太一663.    時間: 2020-10-23 15:31
1feng1 發(fā)表于 2020-10-13 09:13
請問是51單片機還是stm32單片機

51的

作者: zf66    時間: 2020-11-1 10:42
怎么顯示成功的結(jié)果
作者: 小小酥3    時間: 2021-12-26 17:09
我想要注釋





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品久久国产精品 | 免费观看a级毛片在线播放 黄网站免费入口 | 国产精品久久久久久久一区探花 | 国产成人精品一区二区三区在线 | 亚洲视频一区在线观看 | 国产成人精品一区二区 | 久久99久久99久久 | 久久综合九九 | 久草视频在线播放 | 国产日韩欧美电影 | www.日韩 | 日韩欧美国产一区二区三区 | 自拍在线 | 日韩毛片中文字幕 | 国产高潮好爽受不了了夜夜做 | 国产激情精品 | 91视频在线观看 | 国产三级精品三级在线观看四季网 | 欧美极品少妇xxxxⅹ免费视频 | 色婷婷亚洲| 91精品国产日韩91久久久久久 | 日韩久久久久久 | 精品三区| 一区二区在线 | 五月激情婷婷在线 | 国产欧美精品一区二区三区 | 日韩男人天堂 | av中文字幕网站 | 亚洲国产精品激情在线观看 | 自拍视频精品 | 国产乱码精品一区二区三区忘忧草 | 国产成人免费视频网站高清观看视频 | 91视频a | 日韩国产欧美一区 | 精品欧美在线观看 | av高清毛片 | 精久久久久| 久久这里只有精品首页 | 九九热这里 | 国产在线激情视频 | 免费a网|