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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4749|回復: 0
收起左側

stm32出租車計價器設計源碼與文檔資料分享

[復制鏈接]
ID:265754 發表于 2018-12-31 19:36 | 顯示全部樓層 |閱讀模式
     (1)能顯示里程,單位為公里,最后一位為小數位。
        2)能顯示金額數,單位為元,最后一位為小數位。
        3)可設定單程價格和往返價格,單程價格為2/公里,往返價格為1.5/公里。
        4)車速<5公里/小時的時間累積為總等待時間,每5分鐘等待時間相當于里程數增加1公里。
        5)起步公里數為3公里,價格為5元,若實際距離大于3公里,按規則3計算價格。
        6)按暫停鍵,計價器可暫停計價,按查詢鍵,可顯示總等待時間。

1 液晶尺寸是3.2寸,控制器是 ILI9341
2 SD卡4位模式DMA ,支持長文件名及中文文件名

制作出來的stm32出租車計價器實物圖如下:
IMG20130602002.jpg IMG20130602001.jpg

stm32
單片機出租車計價器源程序如下:
  1. /******************** CHD1807 Team **************************
  2. * 文件名  :main.c
  3. * 描述    :LCD顯示實驗,可中英混合顯示,可顯示BMP格式的圖片,可截圖,
  4. *           截圖保存在MicroSD卡中,文件名存為myScreen.bmp,
  5. *           需顯示的BMP圖片和字庫存放在MicroSD卡中。         
  6. * 實驗平臺:CHD1807-STM32開發板
  7. * 庫版本  :ST3.5.0
  8. **********************************************************************************/
  9. /* Includes ------------------------------------------------------------------*/

  10. #include "stm32f10x.h"
  11. #include "SysTick.h"
  12. #include "usart1.h"        
  13. #include "lcd.h"
  14. //#include "sd_fs_app.h"
  15. //#include "Sd_bmp.h"
  16. #include "adc.h"
  17. #include "exti.h"
  18. #include "led.h"
  19. #include "pwm_output.h"
  20. #include "SPI_NRF.h"
  21. #include "Time_test.h"
  22. //#include"ds18b20.h"

  23. int num=0,i=0,j=0,k=0,h,time=0,q=4,flag=0;
  24. u8 status;                 //用于判斷接收/發送狀態
  25. u8 rxbuf[4]={0,0,0,0};         //接收緩沖
  26. float distance=0,all_distance=0,danjia=0,all_money=0;
  27. float speed=10;
  28. int all_distance_a[2]={0,0};
  29. int all_money_a[2]={0,0};
  30. int danjia_a[2]={0,0};
  31. int s_a=0,t_a=0;;

  32. float R=6.5;

  33. int d1=0,d2=0,d3=0,d4=0;
  34. int m1=0,m2=0,m3=0,m4=0;

  35. u8 ReadValue;

  36. //////////////////////////////////////////////////////////////////////////////////////////////////////////
  37. void delay1()
  38. {int j,h;
  39. for(j=0;j<1000;j++)
  40. for(h=0;h<1000;h++);
  41. }

  42. /////////////////////////////////////////////////////////////////////////////////////////////////////////

  43. void NRF_control(void)
  44. {
  45.                           /*等待接收數據*/
  46.          
  47.         status = NRF_Rx_Dat(rxbuf);         /*判斷接收狀態*/

  48.          i=rxbuf[1];

  49.          if(i==1)  { LED_B14(ON); LED_B15(OFF); LED_D12(OFF);  LED_A8(OFF);  LED_C6(OFF);  LED_C7(OFF);                             
  50.                                            TIM_SetCompare3(TIM3,550);       TIM_SetCompare4(TIM3,450);
  51.                                            TIM_SetCompare3(TIM4,1000);      TIM_SetCompare4(TIM4,1000);                       }

  52.          if(i==2)  { LED_B14(OFF); LED_B15(ON); LED_D12(OFF);  LED_A8(OFF);  LED_C6(OFF);  LED_C7(OFF);                           
  53.                                            TIM_SetCompare3(TIM3,1000);      TIM_SetCompare4(TIM3,1000);
  54.                                            TIM_SetCompare3(TIM4,550);       TIM_SetCompare4(TIM4,500);                       }

  55.          if(i==3)  { LED_B14(OFF); LED_B15(OFF); LED_D12(ON);  LED_A8(OFF);  LED_C6(OFF);  LED_C7(OFF);                             
  56.                                            TIM_SetCompare3(TIM3,1000);      TIM_SetCompare4(TIM3,1000);
  57.                                            TIM_SetCompare3(TIM4,1000);      TIM_SetCompare4(TIM4,1000);                      }

  58.          if(i==4)  { LED_B14(OFF); LED_B15(OFF); LED_D12(OFF);  LED_A8(ON);  LED_C6(OFF);  LED_C7(OFF);                           
  59.                                            TIM_SetCompare3(TIM3,600);       TIM_SetCompare4(TIM3,350);
  60.                                            TIM_SetCompare3(TIM4,1000);      TIM_SetCompare4(TIM4,1000);                     }

  61.          if(i==5)  { LED_B14(OFF); LED_B15(OFF); LED_D12(OFF);  LED_A8(OFF);  LED_C6(ON);  LED_C7(OFF);                             
  62.                                            TIM_SetCompare3(TIM3,350);       TIM_SetCompare4(TIM3,600);
  63.                                            TIM_SetCompare3(TIM4,1000);      TIM_SetCompare4(TIM4,1000);                     }
  64.          
  65.         
  66. }

  67. ////////////////////////////////////////////////////////////////////////////////////////////////////

  68. void calculate(void)
  69. {

  70. //        temperature=(int)DS18B20_Get_Temp();

  71.    
  72.   
  73.    distance = k*2*3.14*R/1000;

  74.    speed = distance*100*10;

  75.    

  76.    all_distance = all_distance+distance;

  77.    if(all_distance<30)        all_money=50;

  78.    else  all_money = (all_distance-30)*danjia + 50;

  79.    all_distance_a[0]=(int)all_distance%10;         all_distance_a[1]=(int)all_distance/10;

  80.    all_money_a[0]=(int)all_money%10;               all_money_a[1]=(int)all_money/10;

  81.    danjia_a[1]=danjia*10;

  82.    danjia_a[0]=(int)danjia_a[1]%10;                                 danjia_a[1]=(int)danjia_a[1]/10;

  83.    if((all_distance/100)>=1)         d1=1;
  84.    if((all_distance/1000)>=1)    d2=1;
  85.    if((all_distance/10000)>=1)   d3=1;

  86.    if((all_money/100)>=1)             m1=1;
  87.    if((all_money/1000)>=1)       m2=1;
  88.    if((all_money/10000)>=1)             m3=1;

  89.    
  90.    if(speed<2) s_a++;

  91.    else s_a=s_a;

  92.    if(s_a>200)
  93.    {
  94.        s_a=0;

  95.            t_a++;

  96.            all_distance = all_distance+10;
  97.    }



  98.   
  99.    

  100.    k=0;

  101.    distance=0;

  102.    



  103. }

  104. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  105. int main(void)
  106. {
  107.    /* USART1 config */
  108.         USART1_Config();

  109.         SysTick_Init();

  110.         LCD_Init();                        //液晶屏初始化
  111.         
  112.         Adc_Init();                                                
  113. //    sd_fs_init();

  114.         EXTI_PC2_Config();  //外部中斷測速初始化

  115.         LED_GPIO_Config();        //行駛指示燈初始化

  116.         TIM3_PWM_Init();        //pwm初始化

  117.         SPI_NRF_Init();                //無線通信初始化

  118.         NRF_RX_Mode();                 //接收模式

  119. //        temperature = DS18B20_Init();

  120.         TIM2_NVIC_Configuration();        //定時器初始化
  121.         TIM2_Configuration();

  122.                 START_TIME;         //TIM2 開始計時

  123.         
  124.    

  125. //        LCD_Num_6x12_O(100, 200, 520, 8000);                           //在指定坐標處懸浮顯示6*12大小的數字  

  126. //  LCD_Str_CH(100,20,"出租車計價器",0x0333,GRED);
  127. //        LCD_Str_CH(60,60,"單價",0x0333,0x0ff);
  128. ///        LCD_Str_CH(60,100,"行駛距離",0x0333,0x00ff);
  129. //        LCD_Str_CH(60,140,"總金額",0x0333,0x00ff);
  130. //        LCD_Str_CH(60,180,"車內溫度",0x0333,0x00ff);

  131.         LCD_Str_O(140, 20, "Taxi meter", GRED);
  132.         LCD_Str_O(60, 60, "price", GBLUE);                   LCD_Str_O(220, 60, "yuan/mi", GBLUE);
  133.         LCD_Str_O(60, 100, "distance", GBLUE);           LCD_Str_O(220, 100, "mi", GBLUE);
  134.         LCD_Str_O(60, 140, "money", GBLUE);                   LCD_Str_O(220, 140, "yuan", GBLUE);
  135.         LCD_Str_O(60, 180, "WaitTime",GBLUE);           LCD_Str_O(220, 180, "miao", GBLUE);

  136.         
  137.         


  138.     acc_z();
  139.         LCD_Line(20,50, 300, 50);           //----------
  140.         LCD_Line(20,90, 300, 90);
  141.         LCD_Line(20,130, 300, 130);
  142.         LCD_Line(20,170, 300, 170);
  143.         LCD_Line(20,210, 300, 210);           //----------

  144.         LCD_Line(20,50, 20, 210);
  145.         LCD_Line(300,50, 300, 210);

  146.         LCD_Num_6x12_O(180, 65, danjia_a[1], BLACK);  LCD_Point(187,74);        LCD_Num_6x12_O(189, 65, danjia_a[0], BLACK);
  147.         
  148.         LCD_Num_6x12_O(180, 105, all_distance_a[1], BLACK);  LCD_Point(187+(d1+d2+d3)*6,114);        LCD_Num_6x12_O(189+(d1+d2+d3)*6, 105, all_distance_a[0], BLACK);
  149.         LCD_Num_6x12_O(180, 145, all_money_a[1], BLACK);  LCD_Point(187+(m1+m2+m3)*6,154);        LCD_Num_6x12_O(189+(m1+m2+m3)*6, 145, all_money_a[0], BLACK);
  150.         LCD_Num_6x12_O(180, 185, t_a*2, BLACK);

  151.         
  152.         
  153.         

  154.          
  155.   while (1)
  156.   {
  157.          
  158.            t:if(flag==0)  goto t;

  159.            if(q>3)
  160.    {  q=0;
  161.         LCD_Rectangle(180,50,40,150,0x00ff);
  162.    }

  163.    // calculate();
  164.    // q++;

  165.   // NRF_control();

  166.                  q++;
  167.                    acc_z();
  168.         LCD_Line(20,50, 300, 50);           //----------
  169.         LCD_Line(20,90, 300, 90);
  170.         LCD_Line(20,130, 300, 130);
  171.         LCD_Line(20,170, 300, 170);
  172.         LCD_Line(20,210, 300, 210);           //----------

  173.         LCD_Line(20,50, 20, 210);
  174.         LCD_Line(300,50, 300, 210);

  175.         
  176.         
  177.         LCD_Num_6x12_O(180, 65, danjia_a[1], BLACK);  LCD_Point(187,74);        LCD_Num_6x12_O(189, 65, danjia_a[0], BLACK);
  178.         LCD_Num_6x12_O(180, 105, all_distance_a[1], BLACK);  LCD_Point(187+(d1+d2+d3)*6,114);        LCD_Num_6x12_O(189+(d1+d2+d3)*6, 105, all_distance_a[0], BLACK);
  179.         LCD_Num_6x12_O(180, 145, all_money_a[1], BLACK);  LCD_Point(187+(m1+m2+m3)*6,154);        LCD_Num_6x12_O(189+(m1+m2+m3)*6, 145, all_money_a[0], BLACK);
  180.         LCD_Num_6x12_O(180, 185, t_a*2, BLACK);

  181.         

  182.                  NRF_control();        
  183.         
  184.             
  185.         
  186.   }
  187. }

  188. ////////////////////////////////////////////////////////////////////////////////////////////////////////

  189.    void TIM2_IRQHandler(void)
  190. {
  191.         if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
  192.         {        
  193.                 TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);

  194.                 ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10);

  195.             if(ReadValue==1)         GPIO_SetBits(GPIOB, GPIO_Pin_11);

  196.            else GPIO_ResetBits(GPIOB, GPIO_Pin_11);

  197.            time++;
  198.            num++;

  199.            if(time>10)

  200.          {  time=0;
  201.          
  202.               calculate();        
  203.           }

  204.           if(num>0&&num<500)   GPIO_SetBits(GPIOC,GPIO_Pin_7);

  205.            if(num>500&&num<1000)         GPIO_ResetBits(GPIOC,GPIO_Pin_7);
  206.            
  207.            if(num>1000)        num=0;
  208.          
  209.            
  210.                  
  211. /*                   acc_z();
  212.         LCD_Line(20,50, 300, 50);           //----------
  213.         LCD_Line(20,90, 300, 90);
  214.         LCD_Line(20,130, 300, 130);
  215.         LCD_Line(20,170, 300, 170);
  216.         LCD_Line(20,210, 300, 210);           //----------

  217.         LCD_Line(20,50, 20, 210);
  218.         LCD_Line(300,50, 300, 210);

  219.         
  220.         
  221.         LCD_Num_6x12_O(180, 65, danjia, BLACK);
  222.         LCD_Num_6x12_O(180, 105,all_distance, BLACK);
  223.         LCD_Num_6x12_O(180, 145,all_money, BLACK);
  224.         LCD_Num_6x12_O(180, 185, 24, BLACK);

  225.         if(q>10)
  226.    {  q=0;
  227.         LCD_Rectangle(180,50,50,150,0x00ff);
  228.    }
  229.                   
  230.            */
  231.         
  232.         }
  233.         
  234.                                  
  235. }

  236. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


  237. void EXTI2_IRQHandler(void)
  238. {
  239.          
  240.         if(EXTI_GetITStatus(EXTI_Line2) != RESET) //確保是否產生了EXTI Line中斷
  241.         {
  242.         
  243.                 k++;
  244.                

  245.                 EXTI_ClearITPendingBit(EXTI_Line2);     //清除中斷標志位
  246.         }  

  247. }


  248. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


  249. void EXTI3_IRQHandler(void)
  250. {
  251.         if(EXTI_GetITStatus(EXTI_Line3) != RESET) //確保是否產生了EXTI Line中斷
  252.         {
  253.                    flag=1;
  254.                  danjia=2;
  255.                
  256.         
  257.                 EXTI_ClearITPendingBit(EXTI_Line3);     //清除中斷標志位
  258.         }  



  259. }


  260. void EXTI4_IRQHandler(void)
  261. {
  262.          
  263.         if(EXTI_GetITStatus(EXTI_Line4) != RESET) //確保是否產生了EXTI Line中斷
  264.         {
  265.            flag=1;
  266.            danjia=1.5;
  267.            

  268.                 EXTI_ClearITPendingBit(EXTI_Line4);     //清除中斷標志位
  269.         }  

  270. }



  271.   
  272.         
  273.         
  274.          
  275. /******************* CHD1807 Team *****END OF FILE************/
復制代碼

所有資料51hei提供下載:

程序.7z

663.47 KB, 下載次數: 84, 下載積分: 黑幣 -5

出租車計價器設計.doc

6.15 MB, 下載次數: 87, 下載積分: 黑幣 -5

ILI9341_DS_V1[1].09_20110315.pdf

3.41 MB, 下載次數: 23, 下載積分: 黑幣 -5

Outline- BL32007V2.pdf

214.24 KB, 下載次數: 16, 下載積分: 黑幣 -5

觸摸控制器tsc2046.pdf

790.92 KB, 下載次數: 16, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产久| 91国语清晰打电话对白 | 久久久久久九九九九九九 | 在线一区视频 | 中文字幕第十页 | 精品亚洲永久免费精品 | 福利网站在线观看 | 国产乱码精品一区二区三区忘忧草 | 亚洲欧美一区二区三区视频 | 91久久精品国产91久久 | 日本午夜免费福利视频 | 在线视频成人 | 国产一区 | 精品国产青草久久久久福利 | 91精品久久久久久久久 | 日韩欧美三区 | 久久久资源 | 亚洲成人免费视频 | 国产一区欧美 | 18成人在线观看 | 久久久久久999 | 天天拍天天操 | 亚洲视频在线看 | 成人在线看片 | 久久久精品视 | 亚洲一区二区视频在线播放 | 影音先锋中文字幕在线观看 | 亚洲一区二区三区在线播放 | 91精品国产91久久久久久三级 | 久久久久国产一区二区三区不卡 | 国产免费看 | 羞羞的视频免费在线观看 | caoporon| 欧美极品一区二区 | 看特级黄色片 | 亚洲国产精品99久久久久久久久 | 欧美爱爱视频 | 欧美成人猛片aaaaaaa | 中国三级黄色录像 | 黄色片在线观看网址 | 最新av在线播放 |