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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1618|回復: 2
收起左側

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

[復制鏈接]
ID:679068 發表于 2021-6-2 20:39 | 顯示全部樓層 |閱讀模式
剛剛做的程序,感覺沒用好定時器測速,有protues仿真.含51單片機C源碼。
求助大神,該如何解決引腳高電平啟停定時器,在5m范圍內測速并顯示在1602上呢。。ain函數如下:
  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

rjcs.zip

44.11 KB, 下載次數: 3

回復

使用道具 舉報

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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区三区免费视频 | 久久综合av| 伊人激情网 | 中文字幕第49页 | 久国久产久精永久网页 | av在线免费观看不卡 | 欧美一级二级在线观看 | 91久久精品一区二区二区 | 久久精品无码一区二区三区 | 久久国产成人 | 欧美男人天堂 | 九九热精品视频 | 依人成人 | 中文欧美日韩 | 1级黄色大片 | 欧美一级视频免费看 | 啪视频在线 | 亚洲成人一区二区三区 | 少妇一区二区三区 | 日韩免费网站 | 国产一二区在线 | 伊人春色成人 | 成人二区 | 日韩成人精品在线 | 青娱乐av| av网站在线看 | 亚洲成人一区二区 | av网站在线播放 | 中文字幕一区二区三区四区五区 | 日韩精品久久久久 | 久久精品国产一区二区电影 | 久久精品亚洲精品国产欧美 | 亚洲 精品 综合 精品 自拍 | 伊人久久精品一区二区三区 | 97人人超碰| 一区二区日本 | 日韩免费网站 | 91在线精品视频 | 久久精品国产一区二区三区 | 精品美女久久久久久免费 | 亚洲 欧美 综合 |