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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我的單片機設計 紅外汽車(固定距離)測速仿真,求助解決問題!

[復制鏈接]
跳轉到指定樓層
樓主
剛剛做的程序,感覺沒用好定時器測速,有protues仿真.含51單片機C源碼。
求助大神,該如何解決引腳高電平啟停定時器,在5m范圍內測速并顯示在1602上呢。!main函數如下:
  1. #include"reg52.h"
  2. #include"stdio.h"
  3. #include"lcd.h"

  4. sbit yd0=P2^0;
  5. sbit yd1=P2^1;
  6. sbit yd2=P2^2;
  7. sbit yd3=P2^3;

  8. typedef unsigned char u8;
  9. u8 dis0[10];
  10. u8 dis1[]="sd:Unknow";               
  11. u8 dis2[]="Track is free";
  12. u8 dis3[]="Approach";
  13. u8 dis4[]="Arrived";

  14. unsigned long suCount=0;//計數
  15. float sudu;//速度

  16. //unsigned long time_50ms=0;                   //定時器計數
  17. //bit disFlag=0;//定時更新顯示

  18. void Init_Timer0(void);        //函數聲明
  19. void Init_Timer1(void);//
  20. //定時器0與定時器1的中斷方式//

  21. void LCD_Write_String0()        // LCD區段空閑顯示子程序
  22. {
  23.         u8 u;
  24.         u8 v;
  25.                 LcdInit();
  26.         for(u=0;u<13;u++)
  27.         {
  28.         LcdWriteData(dis2[u]);
  29.         }
  30.         LcdInit2();
  31.         for(v=0;v<10;v++)
  32.         {
  33.         LcdWriteData(dis1[v]);
  34.         }
  35.         Delay1ms(3000);
  36. }

  37. void LCD_Write_String1()        // LCD列車檢測顯示子程序
  38. {
  39.         u8 m;
  40.         u8 n;
  41.         LcdInit();
  42.         for(m=0;m<9;m++)
  43.         {
  44.                 LcdWriteData(dis3[m]);
  45.         }
  46.         LcdInit2();
  47.         for(n=0;n<10;n++)
  48.         {
  49.         LcdWriteData(dis0[n]);
  50.         }
  51.    Delay1ms(3000);
  52. }

  53. void LCD_Write_String2()
  54. {
  55.         u8 x;
  56.         u8 z;
  57.         LcdInit();
  58.         for(x=0;x<8;x++)
  59.         {
  60.                 LcdWriteData(dis4[x]);
  61.         }
  62.         LcdInit2();
  63.         for(z=0;z<10;z++)
  64.         {
  65.         LcdWriteData(dis0[z]);
  66.         }
  67.         Delay1ms(3000);
  68. }


  69. void Init_Timer0(void)
  70. {
  71.         TMOD=0x01;          //使用模式1,16位定時器                     
  72.         TH0=(65536-45872)/256;                  //重新賦值 50ms
  73.         TL0=(65536-45872)%256;
  74.         EA=1;            //總中斷打開
  75.         ET0=1;           //開定時器0中斷
  76.         TR0=1;           //啟動定時器0
  77. }

  78. void Timer0_isr(void) interrupt 0
  79. {
  80.         TH0=(65536-45872)/256;                  //重新賦值 50ms
  81.         TL0=(65536-45872)%256;
  82.         suCount++;                //定時計數
  83. }

  84. void Init_Timer1(void)
  85. {
  86.         TMOD=0x01;          //使用模式1,16位定時器,                     
  87.         TH1=(65536-45872)/256;                  //重新賦值 50ms
  88.         TL1=(65536-45872)%256;
  89.         EA=1;            //總中斷打開
  90.         ET1=1;           //開定時器1中斷
  91.         TR1=1;           //啟動定時器1
  92. }

  93. void Timer1_isr(void) interrupt 1
  94. {
  95.         TH1=(65536-45872)/256;                  //重新賦值 50ms
  96.         TL1=(65536-45872)%256;
  97.         suCount++;                //定時計數
  98. }


  99. void main()        //主程序(列車接近檢測與列車到達檢測)
  100. {                        
  101.      P2=0x00;         //傳感器高電平輸出,先置低電平
  102.          suCount=0;         //計數開始
  103.         Init_Timer0();        //定時器0初始化
  104.         TR0=0;
  105.         while(1)
  106. {
  107.          if(yd0==1) //列車接近區段首部壓電傳感器電平觸發  高電平觸發
  108.             {
  109.          //    suCount=0;         //計數開始
  110.               TR0=1;  //開啟定時器0
  111.            if(yd1==1)//列車接近區段尾部壓電傳感器電平觸發  高電平觸發
  112.             {
  113.               TR0=0;  //停止定時器0
  114.              sudu=(5*3.6)/((float)(suCount*2)/(1000)); //設置距離為 5m
  115.                   sprintf(dis0,"sd:%fkm/h",sudu);//打印
  116.                 LCD_Write_String1();  //顯示      
  117.             }
  118.         }
  119.         else if(yd2==1)                //列車到達區段檢測
  120.         {
  121.         TR1=1;
  122.         if(yd3==1)
  123.         {
  124.         TR1=0;
  125.         sudu=(5*3.6)/((float)(suCount*2)/(1000)); //設置距離為 5m
  126.         sprintf(dis0,"sd:%fkm/h",sudu);//打印
  127.    LCD_Write_String2();  //顯示  
  128.    }
  129.         }
  130. //區段空閑檢測//
  131.         else         
  132.         {
  133.         LCD_Write_String0();
  134.         }
  135.         }
  136. }
復制代碼


圖片仿真11.png (68.99 KB, 下載次數: 48)

圖片仿真11.png

rjcs.zip

44.11 KB, 下載次數: 3

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

使用道具 舉報

沙發
ID:679068 發表于 2021-6-2 21:00 | 只看該作者
可以yc解決。歡迎大神來幫助小弟一把吧拜托啦。。!
回復

使用道具 舉報

板凳
ID:679068 發表于 2021-6-2 21:19 | 只看該作者
我再具體描述一下吧。ㄇ笾緙)
在兩個固定距離(5米)的區域設置了4個傳感器(傳感器輸出的是高電平有效),利用首尾傳感器啟停定時器。
然而,似乎速度無法測出來,放不進lcd1602顯示屏。
顯示部分是可以顯示的,速度測不出來。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩三级电影一区二区 | 国产精品国产精品国产专区不卡 | 国产一区中文 | 91久久国产综合久久 | 久草色视频 | 精品在线看 | 国产精品视频专区 | 免费观看一级特黄欧美大片 | 久久国产精品久久久久久 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 一区二区三区在线电影 | 欧美精品在线一区 | 国产欧美精品一区二区色综合朱莉 | 成人在线视频免费观看 | 九九导航| 一区二区三区免费 | 日韩视频在线一区 | 久亚州在线播放 | 欧美性猛交一区二区三区精品 | 亚洲欧美一区二区三区在线 | 一区二区在线 | 亚洲一区免费 | 免费成人高清在线视频 | 久久国| 日本人爽p大片免费看 | 美女毛片免费看 | 天堂一区二区三区四区 | 玖玖国产精品视频 | 国产免费自拍 | 一级毛片免费 | 久久草在线视频 | 国产高清在线精品一区二区三区 | 亚洲 中文 欧美 日韩 在线观看 | 久久91精品国产一区二区 | www.亚洲| 国产精品毛片在线 | 久久高清 | 国产第一区二区 | 亚洲精品一区二区三区在线观看 | 在线中文字幕国产 | 日本免费一区二区三区视频 |