欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 我的單片機設計 紅外汽車(固定距離)測速仿真,求助解決問題! [打印本頁]

作者: 扭轉乾坤    時間: 2021-6-2 20:39
標題: 我的單片機設計 紅外汽車(固定距離)測速仿真,求助解決問題!
剛剛做的程序,感覺沒用好定時器測速,有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


作者: 扭轉乾坤    時間: 2021-6-2 21:00
可以yc解決。歡迎大神來幫助小弟一把吧拜托啦!!!!
作者: 扭轉乾坤    時間: 2021-6-2 21:19
我再具體描述一下吧!(求助丫~)
在兩個固定距離(5米)的區域設置了4個傳感器(傳感器輸出的是高電平有效),利用首尾傳感器啟停定時器。
然而,似乎速度無法測出來,放不進lcd1602顯示屏。
顯示部分是可以顯示的,速度測不出來。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1