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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2608|回復: 3
收起左側

自行車里程計算單片機仿真程序遇到問題求大神幫助!

[復制鏈接]
ID:251924 發表于 2017-11-21 16:18 | 顯示全部樓層 |閱讀模式
自行車速度已經顯示好了,就是里程不會寫程序里沒有,求助

QQ圖片20171121161817.png
程序在下面 求大神幫助


  1. #include <reg51.h>
  2. #include <intrins.h>

  3. sbit LCM_RS=P3^0; //液晶顯示模塊
  4. sbit LCM_RW=P3^1;//P3口來控制LCM的值
  5. sbit LCM_EN=P3^7;

  6. #define BUSY                  0x80              //常量定義
  7. #define DATAPORT         P0 //如上
  8. #define uchar                 unsigned char
  9. #define uint                   unsigned int
  10. #define L                        50 //50就是L

  11. uchar str0[16],str1[16],count;// 數組
  12. uint speed; //速度顯示
  13. unsigned long time;//

  14. void ddelay(uint);
  15. void lcd_wait(void);
  16. void display();
  17. void initLCM();
  18. void WriteCommandLCM(uchar WCLCM,uchar BusyC);
  19. void STR();
  20. void account();


  21. /*********延時K*1ms,12.000mhz**********/

  22. void int0_isr(void) interrupt 0         /*遙控使用外部中斷0,接P3.2口*/
  23. {
  24.     unsigned int temp;
  25.         time=count;
  26.                                 TR0=0;
  27.         temp=TH0;
  28.         temp=((temp << 8) | TL0);
  29.     TH0=0x3c;
  30.     TL0=0xaf;
  31.         count=0;
  32.     TR0=1;
  33.         time=time*50000+temp;
  34. }

  35. void time0_isr(void) interrupt 1        /*遙控使用定時計數器1 */
  36. {
  37.    TH0 =0x3c;
  38.    TL0 =0xaf;
  39.    count++;
  40. }

  41. void main(void)
  42. {
  43.            TMOD=0x01;                       /*TMOD T0選用方式1(16位定時) */
  44.     IP|=0x01;                           /*INT0 中斷優先*/
  45.     TCON|=0x11;                         /*TCON  EX0下降沿觸發,啟動T0*/
  46.     IE|=0x83;  
  47.     TH0=0x3c;
  48.     TL0=0xaf;
  49.   
  50.         initLCM();
  51.            WriteCommandLCM(0x01,1);                    //清顯示屏
  52.         for(;;)
  53.         {
  54.                 account();
  55.                 display();
  56.         }
  57. }

  58. void account()
  59. {
  60.         unsigned long a;
  61.         if (time!=0)
  62.         {
  63.                 a=L*360000000/time;
  64.         }
  65.         speed=a;
  66. }



  67. void STR() //速度LCD設計
  68. {
  69.         str0[0]='S';
  70.         str0[1]='p';
  71.         str0[2]='e';
  72.     str0[3]='e';
  73.         str0[4]='d';
  74.         str0[5]=' ';        
  75.         str0[6]=(speed%100000)/10000+0x30;
  76.         str0[7]=(speed%10000)/1000+0x30;
  77.         str0[8]=(speed%1000)/100+0x30;
  78.         str0[9]='.';
  79.         str0[10]=(speed%100)/10+0x30;
  80.         str0[11]=speed%10+0x30;
  81.         str0[12]='k';
  82.         str0[13]='m';
  83.         str0[14]='/';
  84.         str0[15]='h';
  85. }

  86. void ddelay(uint k)
  87. {
  88.     uint i,j;
  89.     for(i=0;i<k;i++)
  90.     {
  91.         for(j=0;j<60;j++)
  92.                 {;}
  93.     }
  94. }
  95. /**********寫指令到lcd子函數************/

  96. void WriteCommandLCM(uchar WCLCM,uchar BusyC)
  97. {
  98.     if(BusyC)lcd_wait();
  99.         DATAPORT=WCLCM;
  100.     LCM_RS=0;                   /* 選中指令寄存器*/
  101.     LCM_RW=0;                       // 寫模式
  102.     LCM_EN=1;
  103.         _nop_();
  104.         _nop_();
  105.         _nop_();
  106.     LCM_EN=0;

  107. }

  108. /**********寫數據到LCD子函數************/

  109. void WriteDataLCM(uchar WDLCM)
  110. {
  111.     lcd_wait( );            //檢測忙信號
  112.         DATAPORT=WDLCM;
  113.     LCM_RS=1;               /* 選中數據寄存器  */
  114.     LCM_RW=0;                   // 寫模式
  115.     LCM_EN=1;
  116.     _nop_();
  117.         _nop_();
  118.         _nop_();
  119.     LCM_EN=0;
  120. }

  121. /***********lcd內部等待函數*************/

  122. void lcd_wait(void)
  123. {
  124.     DATAPORT=0xff;             //讀LCD前若單片機輸出低電平,而讀出LCD為高電平,則沖突,Proteus就會顯示邏輯黃色
  125.         LCM_EN=1;
  126.     LCM_RS=0;
  127.     LCM_RW=1;
  128.     _nop_();
  129.     _nop_();
  130.         _nop_();
  131.     while(DATAPORT&BUSY)
  132.         {  LCM_EN=0;
  133.            _nop_();
  134.            _nop_();
  135.            LCM_EN=1;
  136.            _nop_();
  137.            _nop_();
  138.         }
  139.            LCM_EN=0;

  140. }

  141. /**********LCD初始化子函數***********/
  142. void initLCM( )
  143. {
  144.         DATAPORT=0;
  145.         ddelay(15);
  146.         WriteCommandLCM(0x38,0);    //三次顯示模式設置,不檢測忙信號
  147.     ddelay(5);
  148.     WriteCommandLCM(0x38,0);
  149.     ddelay(5);
  150.     WriteCommandLCM(0x38,0);
  151.     ddelay(5);

  152.     WriteCommandLCM(0x38,1);    //8bit數據傳送,2行顯示,5*7字形,檢測忙信號
  153.     WriteCommandLCM(0x08,1);    //關閉顯示檢測忙信號
  154.     WriteCommandLCM(0x01,1);    //清屏檢測忙信號
  155.     WriteCommandLCM(0x06,1);    //顯示光標右移設置,檢測忙信號
  156.     WriteCommandLCM(0x0c,1);    //顯示屏打開,光標不顯示,不閃爍,檢測忙信號
  157. }

  158. /****顯示指定坐標的一個字符子函數****/

  159. void DisplayOneChar(uchar X,uchar Y,uchar DData)
  160. {
  161.     Y&=1;
  162.     X&=15;
  163.     if(Y)X|=0x40;               //若y為1(顯示第二行),地址碼+0X40
  164.     X|=0x80;                    //指令碼為地址碼+0X80
  165.     WriteCommandLCM(X,0);
  166.     WriteDataLCM(DData);
  167. }

  168. /*******顯示指定坐標的一串字符子函數*****/

  169. void DisplayListChar(uchar X,uchar Y,uchar *DData)
  170. {
  171.     uchar ListLength=0;
  172.     Y&=0x01;
  173.     X&=0x0f;
  174.     while(X<16)
  175.     {
  176.         DisplayOneChar(X,Y,DData[ListLength]);
  177.         ListLength++;
  178.         X++;
  179.     }
  180. }


  181. void display()
  182. {

  183.         STR();
  184.         DisplayListChar(0,0,str0);
  185.            DisplayListChar(0,1,str1);
  186. }
復制代碼



回復

使用道具 舉報

ID:251924 發表于 2017-11-21 16:20 | 顯示全部樓層
剛剛程序有亂碼我重新發一個


回復

使用道具 舉報

ID:164602 發表于 2017-11-22 09:26 | 顯示全部樓層
給你兩個建議:
第一:你的速度已經有了,那么,里程就太太......太簡單了,找時間啊,S=Vt,初中就知道的。
這個時間可不能用定時器啊,定時器的時間太短了,用1302之類的時間芯片好了——確定計時開始時刻,確定掃描時間,即多久顯示更新一次里程,就可以算里程了。
第二:如果上面方法的程序太難(我想想都覺得麻煩),那就用簡單方法了。在自行車輪子了裝一個光電傳感器,輪子轉動一周,計數一次,這個里程就是輪子周長,確定轉動幾周顯示更新一次,就可以有里程數據了。可以用外部中斷接收這個光電傳感器的數據,這樣可以計數的最大值,可以由程序設定,而不是定時/計數器,定時器的最大值有限制。
回復

使用道具 舉報

ID:249916 發表于 2017-11-22 20:50 | 顯示全部樓層
我也在做這個,才開始,請教一下霍爾元件怎么產生高低電平的?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人在线视频 | 丝袜 亚洲 欧美 日韩 综合 | 国产乡下妇女做爰 | 国产精品精品视频一区二区三区 | 精品日韩一区二区 | 久草网站| 老司机午夜性大片 | 玖玖玖在线 | 桃花av在线 | 国产精品久久久久久久毛片 | 国产欧美日韩一区 | av一级久久 | 亚洲欧洲色视频 | 伊人超碰在线 | 黑人巨大精品欧美一区二区一视频 | 国产福利91精品 | 男女羞羞视频免费 | 亚洲精品久久久久久久久久久久久 | 欧美一级全黄 | 美女黄网站视频免费 | 天天玩天天干天天操 | 久婷婷 | 在线视频 中文字幕 | 91精品国产欧美一区二区 | 天天操天天操 | 中文字幕免费在线 | 天天搞天天操 | 国产精品69毛片高清亚洲 | 在线播放中文字幕 | 色综合色综合色综合 | 久久亚洲欧美日韩精品专区 | 伊人影院在线观看 | 国产日韩久久 | 亚洲毛片在线观看 | 色综合一区 | 欧美一级片a | www.久久 | 欧美一区二区黄 | 成年人在线观看 | 国产成人高清 | 一区二区三区国产精品 |