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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 34354|回復: 71
收起左側

基于單片機的自行車里程表設計(有原理圖 仿真電路 源程序 pcb)

  [復制鏈接]
ID:138645 發表于 2016-9-7 13:54 | 顯示全部樓層 |閱讀模式
有需要  畢業 或者 課程設計的自己下
0.png
51單片機自行車里程表原理圖

0.png
自行車里程表仿真

0.png
自行車里程表的pcb圖

1-源程序.zip

71.7 KB, 下載次數: 594, 下載積分: 黑幣 -5

2-原理圖.zip

457.17 KB, 下載次數: 419, 下載積分: 黑幣 -5

5-protus仿真.zip

50.95 KB, 下載次數: 478, 下載積分: 黑幣 -5

12-pcb圖.zip

141.87 KB, 下載次數: 306, 下載積分: 黑幣 -5

評分

參與人數 4黑幣 +76 收起 理由
359901492 + 9 很給力!
tieq1952 + 12 很給力!
Lieternal + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:190950 發表于 2017-4-18 19:31 | 顯示全部樓層
大神好,我想問問這個速度和里程的代碼具體可以解釋一下嗎  沒看懂


if(m>=10)
        {
                m=0;
                Mileage=Mileage+10*(Velocity/3.6)/2;                 //里程m=里程+速度km/h/3.6/2
                Velocity=count *2*3.14*RADIUS /100000*2*3600  /40;//將500ms的距離經過運算得到km/h,將速度/100,方便顯示
                count=0;        
        }
}
回復

使用道具 舉報

ID:247623 發表于 2017-11-10 16:43 | 顯示全部樓層
親測能用,仿真圖如下
搜狗截圖20171110163625.jpg

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:69408 發表于 2018-6-24 00:19 | 顯示全部樓層
終于弄明白了,那個除以40是樓主隨便寫的樣,我沒有要,參考樓主朋友的程序,我打算用在電動車里程表上,所以將安全速度改成了加脈沖個數設置了,使每圈的磁極脈沖個數與輪半徑都參與里程與速度關連了,仿真沒有問題了等有空做個實物出來試試看到底行不行了。
if(m>=10)
        {
                m=0;
               
                Mileage=Mileage+count*2*3.14*RADIUS/maicong/10;//里程數mileage=里程+記數值*輪周長/每圈磁極對數/10
                Velocity=count *2*3.14*RADIUS/maicong/100000*2*3600 ;//velocity是速度,將500ms的距離經過運算得到km/h,方便顯示
                count=0;       
        }

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:295874 發表于 2018-10-26 11:28 | 顯示全部樓層
程序從頭到尾認真研究與學習了一下,就程序整體邏輯而言,個人以為還是不錯的,但是其中有一處個人以為還可以進一步優化,其中正常顯示的邏輯中,關于里程的存儲處理函數SETS();,放在if(Mode==0&&bike_set==0)中,具體見下屬函數,會導致里程存儲過于頻繁,對于FLASH是一種考驗,又因為本程序的邏輯中,測速計算處于定時器中斷中,每隔500ms才計算一次速度及里程數據,所以更沒有必要那么頻繁的存儲里程數據。還有其中的/40注釋沒有說明,其實我以為就是前面別人所說的磁極脈沖數。個人見解歡迎批評指正,謝謝。
if(Mode==0&&bike_set==0)//正常顯示模式
        {
                //讀時間
                        Ds1302_Read_Time();
                        //顯示時間
                        write_1602com(0x80);
                        write_1602dat(0x30+time_buf1[1]/10);
                        write_1602dat(0x30+time_buf1[1]%10);
                        write_1602com(0x80+3);
                        write_1602dat(0x30+time_buf1[2]/10);
                        write_1602dat(0x30+time_buf1[2]%10);
                        write_1602com(0x80+6);
                        write_1602dat(0x30+time_buf1[3]/10);
                        write_1602dat(0x30+time_buf1[3]%10);
                        write_1602com(0x80+9);
                        write_1602dat(0x30+time_buf1[4]/10);
                        write_1602dat(0x30+time_buf1[4]%10);
                        write_1602com(0x80+12);
                        write_1602dat(0x30+time_buf1[5]/10);
                        write_1602dat(0x30+time_buf1[5]%10);
                        write_1602com(0x80+15);
                        write_1602dat(time_buf1[7]-1);               

                        if(before_sec!=time_buf1[6])//:顯示周期為1s,500ms顯示:500ms顯示空
                        {
                                before_sec=time_buf1[6];
                                write_1602com(0x80+11);
                                write_1602dat(':');
                                LED_SEC=1;
                        }
                        if(LED_SEC==0)
                        {
                                write_1602com(0x80+11);
                                write_1602dat(' ');       
                        }

                        write_1602com(0x80+0x40);//顯示固定符號寫入位置,從2行第2個位置后開始顯示
                        if(Mileage/1000000==0)
                        write_1602dat(' ');
                        else
                        write_1602dat(0x30+Mileage/1000000);//數字+0x30得到該數字的LCD1602顯示碼
                        if(Mileage%1000000/100000==0)
                        write_1602dat(' ');
                        else       
                        write_1602dat(0x30+Mileage%1000000/100000);//數字+0x30得到該數字的LCD1602顯示碼
                        write_1602dat(0x30+Mileage%1000000%100000/10000);//數字+0x30得到該數字的LCD1602顯示碼
                        write_1602com(0x80+0x40+4);
                        write_1602dat(0x30+Mileage%1000000%100000%10000/1000);//數字+30得到該數字的LCD1602顯示碼
                        write_1602dat(0x30+Mileage%1000000%100000%10000%1000/100);//數字+30得到該數字的LCD1602顯示碼
                        write_1602dat(0x30+Mileage%1000000%100000%10000%1000%100/10);//數字+30得到該數字的LCD1602顯示碼
                        SETS();
       
                        write_1602com(0x80+0x40+10);
                        write_1602dat(0x30+Velocity/10);
                        write_1602dat(0x30+Velocity%10);//數字+30得到該數字的LCD1602顯示碼
        }
回復

使用道具 舉報

ID:419294 發表于 2018-11-1 20:45 | 顯示全部樓層
版主能否解釋一下里面的參數

Mileage=Mileage+10*(Velocity/3.6)/2;                 //里程m=里程+速度km/h/3.6/2
Velocity=count *2*3.14*RADIUS /100000*2*3600  /40;//將500ms的距離經過運算得到km/h,將速度/100,方便顯示
回復

使用道具 舉報

ID:1 發表于 2016-9-7 23:43 | 顯示全部樓層
下面是主程序:
  1. #include<reg52.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. #include "Data.h"
  5. #include "DS1302.h"
  6. #include "AT24C02.h"

  7. sbit COUNT_IN=P3^2;

  8. //定義1602相關管腳
  9. sbit rs=P1^4;
  10. sbit en=P1^0;

  11. //鍵盤定義
  12. sbit K1=P3^4;        //設置時間
  13. sbit K3=P3^6;        //減按鍵
  14. sbit K2=P3^5;        //加按鍵
  15. sbit K4=P3^7;        //設置半徑安全距離
  16. sbit BEEP=P3^0;

  17. uint count;
  18. unsigned long Velocity,Mileage;

  19. uchar code tab1[]={"  /  /     :    "}; //14/09/10 16:34 3          
  20. uchar code tab2[]={"  0.000km 00km/h"};        //000.000km 00km/h
  21. uchar code tab3[]={"Wheel Radius  cm"};
  22. uchar code tab4[]={"Safe Speed  km/h"};
  23. uchar code tab5[]={"Sec :           "};
  24.                                                   
  25. uchar Mode=0;
  26. uchar bike_set=0;
  27. uchar a;
  28. char RADIUS,SAFE_SPEED;
  29. bit LED_SEC;
  30. uchar before_sec;       

  31. //自定義字符
  32. uchar code num[]={
  33.                                                 0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//1         
  34.                                                 0x1f,0x01,0x01,0x1f,0x10,0x10,0x1f,0x00,//2
  35.                                                 0x1f,0x01,0x01,0x1f,0x01,0x01,0x1f,0x00,//3         
  36.                                                 0x11,0x11,0x11,0x1f,0x01,0x01,0x01,0x00,//4
  37.                                                 0x1f,0x10,0x10,0x1f,0x01,0x01,0x1f,0x00,//5         
  38.                                                 0x1f,0x10,0x10,0x1f,0x11,0x11,0x1f,0x00,//6
  39.                                                 0x1f,0x01,0x01,0x01,0x01,0x01,0x01,0x00,//7        
  40. };
  41. void READS();
  42. void SETS();
  43. void delay(uint x)
  44. {
  45.         uint i,j;
  46.         for(i=0;i<x;i++)
  47.         for(j=0;j<110;j++);
  48. }
  49. void init()
  50. {
  51.         IT0=1;        //INT0負跳變觸發       
  52.     TMOD=0x01;//定時器工作于方式1
  53.         TH0=0x3c;          //50ms
  54.         TL0=0xb0;
  55.         EA=1; //CPU開中斷總允許
  56.         ET0=1;//開定時中斷
  57.         EX0=1;//開外部INTO中斷
  58.     TR0=1;//啟動定時
  59. }
  60. /********液晶寫入指令函數與寫入數據函數,以后可調用**************/

  61. void write_1602com(uchar com)//****液晶寫入指令函數****
  62. {
  63.         rs=0;//數據/指令選擇置為指令
  64.         P0=com;//送入數據
  65.         delay(1);
  66.         en=1;//拉高使能端,為制造有效的下降沿做準備
  67.         delay(1);
  68.         en=0;//en由高變低,產生下降沿,液晶執行命令

  69. }


  70. void write_1602dat(uchar dat)//***液晶寫入數據函數****
  71. {
  72.         rs=1;//數據/指令選擇置為數據
  73.         P0=dat;//送入數據
  74.         delay(1);
  75.         en=1; //en置高電平,為制造下降沿做準備
  76.         delay(1);
  77.         en=0; //en由高變低,產生下降沿,液晶執行命令
  78. }
  79. //自定義字符集
  80. void Lcd_ram()      
  81. {
  82.         uint i,j,k=0,temp=0x40;
  83.         for(i=0;i<7;i++)
  84.         {
  85.            for(j=0;j<8;j++)
  86.            {
  87.             write_1602com(temp+j);
  88.             write_1602dat(num[k]);
  89.             k++;
  90.            }
  91.            temp=temp+8;
  92.         }
  93. }

  94. void lcd_init()//***液晶初始化函數****
  95. {
  96.         Lcd_ram();
  97.         write_1602com(0x38);//設置液晶工作模式,意思:16*2行顯示,5*7點陣,8位數據
  98.         write_1602com(0x0c);//開顯示不顯示光標
  99.         write_1602com(0x06);//整屏不移動,光標自動右移
  100.         write_1602com(0x01);//清顯示

  101.         write_1602com(0x80);//顯示固定符號從第一行第1個位置之后開始顯示
  102.         for(a=0;a<16;a++)
  103.         {
  104.                 write_1602dat(tab1[a]);//向液晶屏寫固定符號部分
  105.         }
  106.         write_1602com(0x80+0x40);//顯示固定符號寫入位置,從第2個位置后開始顯示
  107.         for(a=0;a<16;a++)
  108.         {
  109.                 write_1602dat(tab2[a]);//寫顯示固定符號
  110.         }
  111. }

  112. void display()
  113. {
  114.         //                        1km/h=100m/0.1h                   360s
  115.         //                        10km/h=100m/0.01h          36s
  116.         //                        100km/h=100m/0.001h  3.6s
  117.         if(Mode==0&&bike_set==0)
  118.         {
  119.                 //讀時間
  120.                         Ds1302_Read_Time();
  121.                         //顯示時間
  122.                         write_1602com(0x80);
  123.                         write_1602dat(0x30+time_buf1[1]/10);
  124.                         write_1602dat(0x30+time_buf1[1]%10);
  125.                         write_1602com(0x80+3);
  126.                         write_1602dat(0x30+time_buf1[2]/10);
  127.                         write_1602dat(0x30+time_buf1[2]%10);
  128.                         write_1602com(0x80+6);
  129.                         write_1602dat(0x30+time_buf1[3]/10);
  130.                         write_1602dat(0x30+time_buf1[3]%10);
  131.                         write_1602com(0x80+9);
  132.                         write_1602dat(0x30+time_buf1[4]/10);
  133.                         write_1602dat(0x30+time_buf1[4]%10);
  134.                         write_1602com(0x80+12);
  135.                         write_1602dat(0x30+time_buf1[5]/10);
  136.                         write_1602dat(0x30+time_buf1[5]%10);
  137.                         write_1602com(0x80+15);
  138.                         write_1602dat(time_buf1[7]-1);               

  139.                         if(before_sec!=time_buf1[6])
  140.                         {
  141.                                 before_sec=time_buf1[6];
  142.                                 write_1602com(0x80+11);
  143.                                 write_1602dat(':');
  144.                                 LED_SEC=1;
  145.                         }
  146.                         if(LED_SEC==0)
  147.                         {
  148.                                 write_1602com(0x80+11);
  149.                                 write_1602dat(' ');       
  150.                         }

  151.                         write_1602com(0x80+0x40);
  152.                         if(Mileage/1000000==0)
  153.                         write_1602dat(' ');
  154.                         else
  155.                         write_1602dat(0x30+Mileage/1000000);//數字+0x30得到該數字的LCD1602顯示碼
  156.                         if(Mileage%1000000/100000==0)
  157.                         write_1602dat(' ');
  158.                         else       
  159.                         write_1602dat(0x30+Mileage%1000000/100000);//數字+0x30得到該數字的LCD1602顯示碼
  160.                         write_1602dat(0x30+Mileage%1000000%100000/10000);//數字+0x30得到該數字的LCD1602顯示碼
  161.                         write_1602com(0x80+0x40+4);
  162.                         write_1602dat(0x30+Mileage%1000000%100000%10000/1000);//數字+30得到該數字的LCD1602顯示碼
  163.                         write_1602dat(0x30+Mileage%1000000%100000%10000%1000/100);//數字+30得到該數字的LCD1602顯示碼
  164.                         write_1602dat(0x30+Mileage%1000000%100000%10000%1000%100/10);//數字+30得到該數字的LCD1602顯示碼
  165.                         SETS();
  166.        
  167.                         write_1602com(0x80+0x40+10);
  168.                         write_1602dat(0x30+Velocity/10);
  169.                         write_1602dat(0x30+Velocity%10);//數字+30得到該數字的LCD1602顯示碼
  170.         }
  171.         else if(Mode!=0)
  172.         {
  173.                 switch(Mode)
  174.                 {
  175.                         case 1:       
  176.                                 write_1602com(0x80+0x40);//顯示固定符號寫入位置
  177.                                 for(a=0;a<16;a++)
  178.                                 {
  179.                                         write_1602dat(tab5[a]);//寫顯示固定符號
  180.                                 }
  181.                                 write_1602com(0x80+0x40+14);
  182.                                 write_1602dat(0x30+time_buf1[6]/10);
  183.                                 write_1602dat(0x30+time_buf1[6]%10);       
  184.                                 write_1602com(0x0F);         //打開閃爍
  185.                                 write_1602com(0x80+1);
  186.                                 break;                                                  
  187.                         case 2:
  188.                                 write_1602com(0x80+4);
  189.                                 break;
  190.                         case 3:
  191.                                 write_1602com(0x80+7);
  192.                                 break;
  193.                         case 4:
  194.                                 write_1602com(0x80+10);
  195.                                 break;
  196.                         case 5:
  197.                                 write_1602com(0x80+13);
  198.                                 break;
  199.                         case 6:
  200.                                 write_1602com(0x80+0x40+15);
  201.                                 break;
  202.                         case 7:
  203.                                 write_1602com(0x80+15);
  204.                                 break;
  205.                         case 8:
  206.                                 write_1602com(0x0c);
  207.                                 write_1602com(0x80);//顯示固定符號從第一行第1個位置之后開始顯示
  208.                                 for(a=0;a<16;a++)
  209.                                 {
  210.                                         write_1602dat(tab1[a]);//向液晶屏寫固定符號部分
  211.                                 }
  212.                                 write_1602com(0x80+0x40);//顯示固定符號寫入位置,從第2個位置后開始顯示
  213.                                 for(a=0;a<16;a++)
  214.                                 {
  215.                                         write_1602dat(tab2[a]);//寫顯示固定符號
  216.                                 }
  217.                                 break;
  218.                 }
  219.         }
  220.         else if(bike_set!=0)
  221.         {
  222.                 switch(bike_set)
  223.                 {
  224.                         case 1:       
  225.                                 write_1602com(0x80);//顯示固定符號寫入位置
  226.                                 for(a=0;a<16;a++)
  227.                                 {
  228.                                         write_1602dat(tab3[a]);//寫顯示固定符號
  229.                                 }
  230.                                 write_1602com(0x80+0x40);//顯示固定符號寫入位置
  231.                                 for(a=0;a<16;a++)
  232.                                 {
  233.                                         write_1602dat(tab4[a]);//寫顯示固定符號
  234.                                 }
  235.                                 write_1602com(0x80+12);
  236.                                 write_1602dat(0x30+RADIUS/10);                   //車輪半徑
  237.                                 write_1602dat(0x30+RADIUS%10);
  238.                                 write_1602com(0x80+0x40+10);
  239.                                 write_1602dat(0x30+SAFE_SPEED/10);                   //安全速度
  240.                                 write_1602dat(0x30+SAFE_SPEED%10);       
  241.                                 write_1602com(0x0F);         //打開閃爍
  242.                                 write_1602com(0x80+13);
  243.                                 break;                                                  
  244.                         case 2:
  245.                                 write_1602com(0x80+0x40+11);
  246.                                 break;
  247.                         case 3:
  248.                                 write_1602com(0x0c);
  249.                                 write_1602com(0x80);//顯示固定符號從第一行第1個位置之后開始顯示
  250.                                 for(a=0;a<16;a++)
  251.                                 {
  252.                                         write_1602dat(tab1[a]);//向液晶屏寫固定符號部分
  253.                                 }
  254.                                 write_1602com(0x80+0x40);//顯示固定符號寫入位置,從第2個位置后開始顯示
  255.                                 for(a=0;a<16;a++)
  256.                                 {
  257.                                         write_1602dat(tab2[a]);//寫顯示固定符號
  258.                                 }
  259.                                 break;
  260.                 }
  261.         }       
  262. }

  263. void KEY()
  264. {       
  265.         if(bike_set==0&&K1==0)
  266.         {
  267.                 delay(20);
  268.                 if(bike_set==0&&K1==0)
  269.                 {
  270.                         BEEP=0;
  271.                         delay(50);
  272.                         BEEP=1;
  273.                         Mode++;
  274.                         display();
  275.                         if(Mode>=8)
  276.                         {
  277.                                 Mode=0;
  278.                                 Ds1302_Write_Time();
  279.                         }
  280.                 }
  281.                 while(bike_set==0&&K1==0);
  282.         }
  283.         if(K4==0&&Mode==0)
  284.         {
  285.                 delay(20);
  286.                 if(K4==0&&Mode==0)
  287.                 {
  288.                         BEEP=0;
  289.                         delay(50);
  290.                         BEEP=1;
  291.                         bike_set++;
  292.                         display();
  293.                         if(bike_set>=3)
  294.                         {
  295.                                 bike_set=0;
  296.                                 SETS();
  297.                         }
  298.                 }
  299.                 while(Mode==0&&K4==0);
  300.         }

  301.         //+
  302.         if(K2==0&&(Mode!=0||bike_set!=0))
  303.         {
  304.                 delay(20);
  305.                 //調時
  306.                 if(K2==0&&(Mode!=0||bike_set!=0))
  307.                 {
  308.                         BEEP=0;
  309.                         delay(50);
  310.                         BEEP=1;       
  311.                         switch(Mode)
  312.                         {
  313.                                 case 1:
  314.                                         time_buf1[1]++;
  315.                                         if(time_buf1[1]>=100)
  316.                                                 time_buf1[1]=0;
  317.                                         write_1602com(0x80);
  318.                                         write_1602dat(0x30+time_buf1[1]/10);
  319.                                         write_1602dat(0x30+time_buf1[1]%10);
  320.                                         write_1602com(0x80+1);
  321.                                         break;
  322.                                 case 2:
  323.                                         time_buf1[2]++;
  324.                                         if(time_buf1[2]>=13)
  325.                                                 time_buf1[2]=1;
  326.                                         write_1602com(0x80+3);
  327.                                         write_1602dat(0x30+time_buf1[2]/10);
  328.                                         write_1602dat(0x30+time_buf1[2]%10);
  329.                                         write_1602com(0x80+4);
  330.                                         break;
  331.                                 case 3:
  332.                                         time_buf1[3]++;
  333.                                         if(time_buf1[3]>=YDay(time_buf1[1],time_buf1[2])+1)
  334.                                                 time_buf1[3]=1;
  335.                                         write_1602com(0x80+6);
  336.                                         write_1602dat(0x30+time_buf1[3]/10);
  337.                                         write_1602dat(0x30+time_buf1[3]%10);
  338.                                         write_1602com(0x80+7);
  339.                                         break;
  340.                                 case 4:
  341.                                         time_buf1[4]++;
  342.                                         if(time_buf1[4]>=24)
  343.                                                 time_buf1[4]=0;
  344.                                         write_1602com(0x80+9);
  345.                                         write_1602dat(0x30+time_buf1[4]/10);
  346.                                         write_1602dat(0x30+time_buf1[4]%10);
  347.                                         write_1602com(0x80+10);
  348.                                         break;
  349.                                 case 5:
  350.                                         time_buf1[5]++;
  351.                                         if(time_buf1[5]>=60)
  352.                                                 time_buf1[5]=0;
  353.                                         write_1602com(0x80+12);
  354.                                         write_1602dat(0x30+time_buf1[5]/10);
  355.                                         write_1602dat(0x30+time_buf1[5]%10);
  356.                                         write_1602com(0x80+13);
  357.                                         break;
  358.                                 case 6:
  359.                                         time_buf1[6]++;
  360.                                         if(time_buf1[6]>=60)
  361.                                                 time_buf1[6]=0;
  362.                                         write_1602com(0x80+0x40+14);
  363.                                         write_1602dat(0x30+time_buf1[6]/10);
  364.                                         write_1602dat(0x30+time_buf1[6]%10);
  365.                                         write_1602com(0x80+0x40+15);
  366.                                         break;
  367.                                 case 7:
  368.                                         time_buf1[7]++;
  369.                                         if(time_buf1[7]>=8)
  370.                                                 time_buf1[7]=1;
  371.                                         write_1602com(0x80+15);
  372.                                         write_1602dat(time_buf1[7]-1);
  373.                                         write_1602com(0x80+15);
  374.                                         break;
  375.                         }
  376.                         switch(bike_set)
  377.                         {
  378.                                 case 1:
  379.                                         RADIUS++;
  380.                                         if(RADIUS>=71)
  381.                                         RADIUS=0;
  382.                                         write_1602com(0x80+12);
  383.                                         write_1602dat(0x30+RADIUS/10);
  384.                                         write_1602dat(0x30+RADIUS%10);
  385.                                         write_1602com(0x80+13);
  386.                                         break;
  387.                                 case 2:
  388.                                         SAFE_SPEED++;
  389.                                         if(SAFE_SPEED>=100)
  390.                                         SAFE_SPEED=0;
  391.                                         write_1602com(0x80+0x40+10);
  392.                                         write_1602dat(0x30+SAFE_SPEED/10);
  393.                                         write_1602dat(0x30+SAFE_SPEED%10);
  394.                                         write_1602com(0x80+0x40+11);
  395.                                         break;
  396.                         }
  397.                 }
  398.                 while(K2==0);
  399.         }

  400.         //-
  401.         if(K3==0&&(Mode!=0||bike_set!=0))
  402.         {
  403.                 delay(20);
  404.                 //調時
  405.                 if(K3==0&&(Mode!=0||bike_set!=0))
  406.                 {
  407.                         BEEP=0;
  408.                         delay(50);
  409.                         BEEP=1;
  410.                         switch(Mode)
  411.                         {
  412.                                 case 1:
  413.                                         time_buf1[1]--;
  414.                                         if(time_buf1[1]<0)
  415.                                                 time_buf1[1]=99;
  416.                                         write_1602com(0x80);
  417.                                         write_1602dat(0x30+time_buf1[1]/10);
  418.                                         write_1602dat(0x30+time_buf1[1]%10);
  419.                                         write_1602com(0x80+1);
  420.                                         break;
  421.                                 case 2:
  422.                                         time_buf1[2]--;
  423.                                         if(time_buf1[2]<=0)
  424.                                                 time_buf1[2]=12;
  425.                                         write_1602com(0x80+3);
  426.                                         write_1602dat(0x30+time_buf1[2]/10);
  427.                                         write_1602dat(0x30+time_buf1[2]%10);
  428.                                         write_1602com(0x80+4);
  429.                                         break;
  430.                                 case 3:
  431.                                         time_buf1[3]--;
  432.                                         if(time_buf1[3]<=0)
  433.                                                 time_buf1[3]=YDay(time_buf1[1],time_buf1[2]);
  434.                                         write_1602com(0x80+6);
  435.                                         write_1602dat(0x30+time_buf1[3]/10);
  436.                                         write_1602dat(0x30+time_buf1[3]%10);
  437.                                         write_1602com(0x80+7);
  438.                                         break;
  439.                                 case 4:
  440.                                         time_buf1[4]--;
  441.                                         if(time_buf1[4]<0)
  442.                                                 time_buf1[4]=23;
  443.                                         write_1602com(0x80+9);
  444.                                         write_1602dat(0x30+time_buf1[4]/10);
  445.                                         write_1602dat(0x30+time_buf1[4]%10);
  446.                                         write_1602com(0x80+10);
  447.                                         break;
  448.                                 case 5:
  449.                                         time_buf1[5]--;
  450.                                         if(time_buf1[5]<0)
  451.                                                 time_buf1[5]=59;
  452.                                         write_1602com(0x80+12);
  453.                                         write_1602dat(0x30+time_buf1[5]/10);
  454.                                         write_1602dat(0x30+time_buf1[5]%10);
  455.                                         write_1602com(0x80+13);
  456.                                         break;
  457.                                 case 6:
  458.                                         time_buf1[6]--;
  459.                                         if(time_buf1[6]<0)
  460.                                                 time_buf1[6]=59;
  461.                                         write_1602com(0x80+0x40+14);
  462.                                         write_1602dat(0x30+time_buf1[6]/10);
  463.                                         write_1602dat(0x30+time_buf1[6]%10);
  464.                                         write_1602com(0x80+0x40+15);
  465.                                         break;
  466.                                 case 7:
  467.                                         time_buf1[7]--;
  468.                                         if(time_buf1[7]<1)
  469.                                                 time_buf1[7]=7;
  470.                                         write_1602com(0x80+15);
  471.                                         write_1602dat(time_buf1[7]-1);
  472.                                         write_1602com(0x80+15);
  473.                                         break;
  474.                         }
  475.                         switch(bike_set)
  476.                         {
  477.                                 case 1:
  478.                                         RADIUS--;
  479.                                         if(RADIUS<0)
  480.                                         RADIUS=70;
  481.                                         write_1602com(0x80+12);
  482.                                         write_1602dat(0x30+RADIUS/10);
  483.                                         write_1602dat(0x30+RADIUS%10);
  484.                                         write_1602com(0x80+13);
  485.                                         break;
  486.                                 case 2:
  487.                                         SAFE_SPEED--;
  488.                                         if(SAFE_SPEED<0)
  489.                                         SAFE_SPEED=99;
  490.                                         write_1602com(0x80+0x40+10);
  491.                                         write_1602dat(0x30+SAFE_SPEED/10);
  492.                                         write_1602dat(0x30+SAFE_SPEED%10);
  493.                                         write_1602com(0x80+0x40+11);
  494.                                         break;
  495.                         }
  496.                 }
  497.                 while(K3==0);
  498.         }       
  499.         if(K2==0&&K3==0&&Mode==0&bike_set==0)
  500.         {
  501.                 BEEP=0;
  502.                 delay(100);
  503.                 BEEP=1;
  504.                 delay(100);
  505.                 BEEP=0;
  506.                 delay(100);
  507.                 BEEP=1;
  508.                 delay(100);
  509.                 Mileage=0;
  510.                 SETS();
  511.                 while(K2==0&&K3==0);
  512.         }
  513. }
  514. void BJ_SAFE()
  515. {
  516.         if(Velocity>SAFE_SPEED)
  517.         {
  518.                 BEEP=0;
  519.         }
  520.         else
  521.         {
  522.                 BEEP=1;
  523.         }
  524. }

  525. void main()
  526. {
  527.         //初始化
  528.         Ds1302_Init();
  529.         lcd_init();
  530.         initeeprom();
  531.         //讀取初始參數
  532.         READS();
  533.         //定時器初始化
  534. //        InitTimer0();
  535.         init();
  536.         lcd_init();
  537.         before_sec=time_buf1[6];
  538.         while(1)
  539.         {
  540.                 if(Mode==0&&bike_set==0)
  541.                 {
  542.                         display();
  543.                         BJ_SAFE();
  544.                 }
  545.                 KEY();
  546.         }
  547. }

  548. void EXINT0() interrupt 0
  549. {
  550.         count++;
  551. }

  552. void time0() interrupt 1
  553. {
  554.         uchar m,n;
  555.         TH0=0x3c;
  556.         TL0=0xb0;         //50ms
  557.         m++;
  558.         if(LED_SEC==1)
  559.         {
  560.                 n++;
  561.                 if(n>=10)
  562.                 {
  563.                         n=0;
  564.                         LED_SEC=0;
  565.                 }
  566.         }
  567.        
  568.         if(m>=10)
  569.         {
  570.                 m=0;
  571.                 Mileage=Mileage+10*(Velocity/3.6)/2;                 //里程m=里程+速度km/h/3.6/2
  572.                 Velocity=count *2*3.14*RADIUS /100000*2*3600  /40;//將500ms的距離經過運算得到km/h,將速度/100,方便顯示
  573.                 count=0;       
  574.         }
  575. }

  576. //讀初值
  577. void READS()
  578. {
  579.         uchar Mileage_H,Mileage_M,Mileage_L;
  580.         delay(10);
  581.         RADIUS=read_add(0x01);
  582.         delay(10);
  583.         SAFE_SPEED=read_add(0x02);

  584.         delay(10);
  585.         Mileage_H=read_add(0x03);
  586.         delay(10);
  587.         Mileage_M=read_add(0x04);
  588.         delay(10);
  589.         Mileage_L=read_add(0x05);

  590.         Mileage=Mileage_H*100000+Mileage_M*1000+Mileage_L*10;
  591. }


  592. //寫初值
  593. void SETS()
  594. {
  595.         delay(10);
  596.         write_add(0x01,RADIUS);
  597.         delay(10);
  598.         write_add(0x02,SAFE_SPEED);

  599. /*        Mileage_H=Mileage/10000;                         //123.4560
  600.         Mileage_M=Mileage%10000/100;
  601.         Mileage_L=Mileage%10000%100; */
  602.         delay(10);
  603.         write_add(0x03,Mileage/100000);
  604.         delay(10);
  605.         write_add(0x04,Mileage%100000/1000);
  606.         delay(10);
  607.         write_add(0x05,Mileage%100000%1000/10);
  608. }
復制代碼
回復

使用道具 舉報

ID:103574 發表于 2016-9-8 16:12 | 顯示全部樓層
謝謝,我要做個實物出來
回復

使用道具 舉報

ID:139002 發表于 2016-9-10 10:15 | 顯示全部樓層
好厲害
回復

使用道具 舉報

ID:139200 發表于 2016-9-12 16:07 | 顯示全部樓層
十分感謝,拿來用了
回復

使用道具 舉報

ID:103574 發表于 2016-10-3 09:04 | 顯示全部樓層
正在做實物,不知能不能用
回復

使用道具 舉報

ID:165545 發表于 2017-3-2 00:15 | 顯示全部樓層
lemonack 發表于 2016-10-3 09:04
正在做實物,不知能不能用

朋友,這個你做出實物來了么?
回復

使用道具 舉報

ID:110866 發表于 2017-3-14 15:34 | 顯示全部樓層
非常不錯的設計
回復

使用道具 舉報

ID:190950 發表于 2017-4-18 19:57 | 顯示全部樓層
CYQ-1011 發表于 2017-4-18 19:31
大神好,我想問問這個速度和里程的代碼具體可以解釋一下嗎  沒看懂

主要是后面的  40   怎么來的
回復

使用道具 舉報

ID:202023 發表于 2017-5-18 00:13 | 顯示全部樓層
先看看,謝謝樓主分享
回復

使用道具 舉報

ID:202023 發表于 2017-5-18 00:18 | 顯示全部樓層
先看看,謝謝樓主分享
回復

使用道具 舉報

ID:203328 發表于 2017-5-22 14:23 | 顯示全部樓層
想對里程數清零怎么辦呢
回復

使用道具 舉報

ID:183382 發表于 2017-5-23 15:38 | 顯示全部樓層
CYQ-1011 發表于 2017-4-18 19:57
主要是后面的  40   怎么來的

同求 大神可以解釋一下嗎
回復

使用道具 舉報

ID:206157 發表于 2017-5-31 17:12 | 顯示全部樓層
哪位大神有這個運行狀態下的仿真圖,求幫助,要圖片,截圖就好,(那個液晶顯示器至少要有顯示數字,證明可行性。)
回復

使用道具 舉報

ID:247127 發表于 2017-11-9 18:38 | 顯示全部樓層
真好感覺還不錯
回復

使用道具 舉報

ID:247127 發表于 2017-11-9 18:43 | 顯示全部樓層
lemonack 發表于 2016-9-8 16:12
謝謝,我要做個實物出來

你好,可以請你幫忙把這個自行車里程器的仿真軟件發一下么?1165939860QQ.COM
回復

使用道具 舉報

ID:89286 發表于 2017-11-14 19:07 | 顯示全部樓層
thanks for sharing
回復

使用道具 舉報

ID:247968 發表于 2017-11-27 16:31 | 顯示全部樓層
如果做成實物的話,怎么添加信號源呢
回復

使用道具 舉報

ID:261593 發表于 2017-12-18 16:38 | 顯示全部樓層
剛好需要啊!
回復

使用道具 舉報

ID:86793 發表于 2018-3-5 17:29 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:288910 發表于 2018-3-7 23:08 | 顯示全部樓層
admin 發表于 2016-9-7 23:43
下面是主程序:

大神,請問子程序在哪里啊
回復

使用道具 舉報

ID:288910 發表于 2018-3-8 08:50 | 顯示全部樓層
YJ199585 發表于 2017-5-22 14:23
**** 作者被禁止或刪除 內容自動屏蔽 ****

請問你找到清零的方法了么?
回復

使用道具 舉報

ID:288910 發表于 2018-3-8 08:50 | 顯示全部樓層
請問如何里程如何清零
回復

使用道具 舉報

ID:288910 發表于 2018-3-8 12:46 | 顯示全部樓層
lemonack 發表于 2016-10-3 09:04
正在做實物,不知能不能用

請問你實物做出來了么,可以交流一下嗎
回復

使用道具 舉報

ID:288910 發表于 2018-3-8 12:48 | 顯示全部樓層
yilinghai 發表于 2017-11-10 16:43
親測能用,仿真圖如下

請問一下這個里程表如何清零啊,然后能做實物出來嗎
回復

使用道具 舉報

ID:288910 發表于 2018-3-8 12:48 | 顯示全部樓層


請問如何里程表如何清零,然后怎么做實物啊
回復

使用道具 舉報

ID:287665 發表于 2018-3-8 14:58 | 顯示全部樓層
太棒啦。學到很多,加油。
回復

使用道具 舉報

ID:186926 發表于 2018-3-13 17:44 | 顯示全部樓層

如果做成實物的話,怎么添加信號源呢  就是把這塊板子放去哪里才可以測速呢。。。
回復

使用道具 舉報

ID:316866 發表于 2018-5-7 11:00 | 顯示全部樓層
yilinghai 發表于 2017-11-10 16:43
親測能用,仿真圖如下

兄弟,把仿真圖發我下吧
回復

使用道具 舉報

ID:316866 發表于 2018-5-7 11:01 | 顯示全部樓層
yilinghai 發表于 2017-11-10 16:43
親測能用,仿真圖如下

仿真軟件發我下吧
回復

使用道具 舉報

ID:316866 發表于 2018-5-7 16:00 | 顯示全部樓層
百風丶 發表于 2017-3-2 00:15
**** 作者被禁止或刪除 內容自動屏蔽 ****

朋友,實物做出來沒,能用不
回復

使用道具 舉報

ID:316866 發表于 2018-5-7 16:01 | 顯示全部樓層
lemonack 發表于 2016-9-8 16:12
謝謝,我要做個實物出來

朋友,實物做出來了嗎
回復

使用道具 舉報

ID:314461 發表于 2018-5-14 12:11 | 顯示全部樓層
樓主棒棒噠,
回復

使用道具 舉報

ID:69408 發表于 2018-6-19 23:38 | 顯示全部樓層
樓主朋友你好,請問這句;Velocity=count *2*3.14*RADIUS /100000*2*3600  /40;后面的  40   是怎么來的啊???
回復

使用道具 舉報

ID:253767 發表于 2018-6-23 07:42 | 顯示全部樓層
謝謝,學習了
回復

使用道具 舉報

ID:266164 發表于 2018-6-23 17:57 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:104477 發表于 2018-6-28 05:03 來自手機 | 顯示全部樓層
騙幣的,1062三個使能引腳都沒定義,它知道干嘛呢
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美猛交| 午夜在线 | 久久免费视频网 | 亚洲日本中文字幕在线 | 日韩在线中文字幕 | 蜜桃在线视频 | 国产99久久精品一区二区永久免费 | 国产精品成人免费 | 国产精品一区在线 | 成人黄页在线观看 | 成人免费视频观看 | 久久精品| 精品毛片| 一级二级三级在线观看 | 欧美一级片在线观看 | 亚洲精品www久久久久久广东 | 在线永久看片免费的视频 | 国产农村一级国产农村 | 丁香综合| 超碰人人人 | 黄色a三级 | 国产一区二区 | 亚洲精品视频在线看 | 欧美一区二区在线播放 | 噜久寡妇噜噜久久寡妇 | 日韩中文字幕网 | 丁香六月伊人 | 久久国产成人 | 人人人艹 | 男女污污动态图 | 婷婷色在线播放 | 人人做人人澡人人爽欧美 | 日韩视频在线播放 | 亚洲国产精品视频一区 | 亚洲欧美中文日韩在线 | 7777在线视频 | 亚洲国产成人精品女人久久久 | 亚洲国产精品99久久久久久久久 | 久久精品二区亚洲w码 | 国产精品污www一区二区三区 | 日韩av成人|