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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3090|回復: 5
打印 上一主題 下一主題
收起左側

89C52單片機出租車計費系統Proteus仿真程序

[復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 crow23 于 2021-6-27 08:48 編輯

P32腳接入外部脈沖,運用外部脈沖輸入模擬車輪,計算里程,低于10HZ進入等待計費。

使用了DS1302可以設置時間,單價分不同時段,帶停車等待計價功能。計算價錢方式以下

在6:00---23:00期間,起步費6元,可運營3公里,超過3公里后每公里3.00元。

在23:00---到次日6:00期間,起步費6元,可運營3公里,超過3公里后每公里4.00元。


出租車平時每等候10秒按0.1元計算。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


原理圖:


pcb:


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<type.h>
  3. #include<intrins.h>
  4. #include<lcddisp.h>
  5. #include<ds1302.h>

  6. uchar code univalent[2] = {2,4};                                        //???????,[0]-???????,[1]-???????
  7. uchar code time_pos[7] = {4,-1,7,10,4,7,10};        //????????????
  8. uchar code money_pos[4] = {4,7,4,7};                //????????????????
  9. bit config_ok = 0;                                                      //0-?????,1-????
  10. bit state = 0;                                                                                //?????????,0-??(???),1-??(???)
  11. bit pause = 0;                                                                                //???????,0-????,1-????
  12. uint pulse_count = 0;                                                                   //?????
  13. uint pulse_count_tmp = 0;
  14. uint time_count = -300;                                                                //?????????,????,5???,10s-1km-1.5?
  15. uint mileage_count_new = 0,mileage_count_old = 0;        //???????,??????????,???km,1km-3?,
  16. uchar idata time[7] = {0x12,0x5,0x12,0x22,0x0,0x0,0x0};                //???????
  17. uint money[2]={5,0};                            //???????,[0]-???,[1]-???
  18. uchar first_3_km = 0;
  19. unsigned long money_temp=600;
  20. uint idata DayMoney=180,NightMoney=200,WaitMoney=150;


  21. void INT0_init(void);
  22. void INT1_init(void);
  23. void Delay(uint);
  24. void System_init(void);
  25. void Time_Show(uchar time_data[7]);
  26. void Run_Show_Time(uchar time_data[7]);
  27. void Money_Show(uint money[2]);
  28. void Show_Wait_Time(uint);
  29. void Show_Mileage(void);
  30. void Run_BackGround(void);                                                        //?????,??LCD??????

  31. void Run_BackGround(void)
  32. {
  33.         WriteChar('/', 3,0);
  34.         WriteChar(':',10,0);
  35.         WriteChar(':',13,0);
  36.         WriteChar('.',3,1);
  37.         WriteChar('Y',6,1);
  38. }

  39. void Show_Mileage(void)
  40. {
  41.         WriteDecimal(pulse_count / 200,0,12,1);
  42.         WriteInt(pulse_count % 200 / 10,0,0,13,1);

  43.         WriteChar('.',12,1);
  44.         WriteString("km",14,1);
  45. }

  46. void Show_Wait_Time(uint time_count)
  47. {
  48.         WriteChar('s',15,1);
  49.         WriteChar(' ', 10,1);

  50.         WriteInt(time_count,1,4,11,1);
  51. }

  52. void Money_Show(uint money[2])
  53. {
  54.         WriteDecimal(money[0],0,3,1);
  55.         WriteDecimal(money[1],1,3,1);
  56. }

  57. void Run_Show_Time(uchar time_data[7])
  58. {
  59.         WriteInt(BcdToInt(time_data[2]),1,2, 1,0);
  60.         WriteInt(BcdToInt(time_data[3]),1,2, 4,0);
  61.         WriteInt(BcdToInt(time_data[4]),1,2, 8,0);
  62.         WriteInt(BcdToInt(time_data[5]),1,2,11,0);
  63.         WriteInt(BcdToInt(time_data[6]),1,2,14,0);
  64. }

  65. void Time_Show(uchar time_data[7])
  66. {
  67.         WriteChar('/',6,0);
  68.         WriteChar('/',9,0);
  69.         WriteChar(':',6,1);
  70.         WriteChar(':',9,1);        
  71.         
  72.         WriteInt(BcdToInt(time_data[0]),1,2, 4,0);
  73.         WriteInt(BcdToInt(time_data[2]),1,2, 7,0);
  74.         WriteInt(BcdToInt(time_data[3]),1,2,10,0);
  75.         WriteInt(BcdToInt(time_data[4]),1,2, 4,1);
  76.         WriteInt(BcdToInt(time_data[5]),1,2, 7,1);
  77.         WriteInt(BcdToInt(time_data[6]),1,2,10,1);
  78. }

  79. void System_init(void)
  80. {
  81.         RstLcd();
  82.         ClrLcd();
  83.         P1 = 0x00;
  84.   
  85.         config_ok = 0;
  86.         Time_Show(time);
  87.         LcdPos(5,0);
  88.         SetCur(3);
  89.         INT1_init();
  90.         while(config_ok == 0);                                                        //??????????
  91.         ClrLcd();
  92.         SetCur(1);
  93.         WriteString("Set time OK...",0,0);
  94.         Delay(60000);
  95.         ClrLcd();
  96.         Run_BackGround();
  97.         P1= 0xff;
  98.         //money[0]=6;money[1]=0;
  99.         if((time[4]>6)&&(time[4]<23))        ///////////////////
  100.         {
  101.                 money[0]=5;
  102.                 money[1]=0;
  103.                 money_temp=600;
  104.         }
  105.         else
  106.         {
  107.                 money[0]=5;
  108.                 money[1]=0;
  109.                 money_temp=600;
  110.         }
  111.         Money_Show(money);
  112.         //P2=P2|0x0f;
  113. }

  114. void Delay(uint dtime)
  115. {
  116.         uint temp;
  117.         for(temp=0;temp<dtime;temp++);
  118. }

  119. void INT0_init(void)
  120. {
  121.         EA = 0;
  122.         IT0 = 1;
  123.         EX0 = 1;
  124.         EA = 1;
  125. }
  126. void INT1_init(void)
  127. {
  128.         EA = 0;
  129.         IT1 = 1;
  130.         EX1 = 1;
  131.         EA = 1;
  132. }

  133. void main()
  134. {         
  135.         uchar time_tmp[7],i;        

  136.         System_init();
  137.         DS1302_GetData(time);
  138.         pulse_count_tmp = pulse_count;
  139.         mileage_count_new = mileage_count_old = 0;

  140.         Money_Show(money);
  141.         Run_Show_Time(time);
  142.         Show_Mileage();

  143.         while(1)
  144.         {
  145.                 if(config_ok == 0)                                                        //????????
  146.                         System_init();
  147.                 DS1302_GetData(time_tmp);
  148.                
  149.                 if(!(P1 & 0x04))
  150.                 {
  151.                         P1 &= 0xfe;
  152.                         P1 |= 0x02;
  153.                         pause = 0;
  154.                         if(time[6] != time_tmp[6])
  155.                         {
  156.                                 Run_Show_Time(time_tmp);
  157.                                 for(i = 0;i < 7;i++)
  158.                                         time[i] = time_tmp[i];
  159.                         }
  160.                         first_3_km = 0;
  161.                
  162.                         mileage_count_new = mileage_count_old = 0;
  163.                         WriteString("  ",0,1);
  164.                         WriteString("  ",9,1);
  165.                         //money_temp=600;
  166.                         time_count = 0;
  167.                         //WriteDecimal(6,0,3,1);
  168.                         //money[0]=6;        money[1]=0;
  169.                         if((time[4]>6)&&(time[4]<23))        ///////////////////
  170.                         {
  171.                                 money[0]=5;
  172.                                 money[1]=0;
  173.                                 money_temp=600;
  174.                         }
  175.                         else
  176.                         {
  177.                                 money[0]=5;
  178.                                 money[1]=0;
  179.                                 money_temp=600;
  180.                         }
  181.                         DayMoney=180;NightMoney=200;
  182.                         //WriteDecimal(0,1,3,1);//
  183.                         Money_Show(money);
  184.                         pulse_count = 0;
  185.                         Show_Mileage();
  186.                         time_count = 0;
  187.                 }
  188.                 else if(pause == 0)
  189.                 {
  190.                         INT0_init();
  191.                         if(time[6] != time_tmp[6])
  192.                         {
  193.                                 Run_Show_Time(time_tmp);
  194.                                 for(i = 0;i < 7;i++)
  195.                                         time[i] = time_tmp[i];
  196.                                 
  197.                                 if(pulse_count - pulse_count_tmp < 10)            //?????????(??),????,?????????????10,?????
  198.                                 {
  199.                                         state = 1;
  200.                                         P1 &= 0xfe;
  201.                                         P1 |= 0x02;        
  202.                                         time_count ++;                                                          //?????1
  203.                                         if(        time_count>0)
  204.                                         {
  205.                                         if((time_tmp[4]>6)&&(time_tmp[4]<23))        ///////////////////
  206.                                         {
  207.                                                 WaitMoney=150;
  208.                                         }
  209.                                         else WaitMoney=150;
  210.                                         if(time_count % 10 == 0 && first_3_km > 2)//????,10s???1.5?
  211.                                         {
  212.                                                         money_temp+=WaitMoney;
  213.                                                         money[0]=money_temp/100;
  214.                                                         money[1] = money_temp%100;
  215.                                                 Money_Show(money);
  216.                                         }
  217.                                         else if(time_count % 10 == 0 && first_3_km <= 2)
  218.                                                 first_3_km ++;
  219.                                         else;
  220.                                         }                                
  221.                                         else
  222.                         money[0]=money_temp/100;
  223.                                         money[1] = money_temp%100;
  224.                                         mileage_count_old = mileage_count_new;        
  225.                                         Show_Wait_Time(time_count);
  226.                                 }
  227.                                 else                                                                                   //?????????(???)
  228.                                 {
  229.                                         state = 0;
  230.                                         P1 &= 0xfd;
  231.                                         P1 |= 0x01;        
  232.                                         //time_count = 0;                                                         //?????,??????0
  233.                                 }
  234.                                 pulse_count_tmp = pulse_count;
  235.                         }
  236.                         if(state == 0)
  237.                         {
  238.                                 mileage_count_new = pulse_count / 200;
  239.                                 if(mileage_count_new>10)
  240.                                 {
  241.                                         DayMoney=300;
  242.                                         NightMoney=400;
  243.                                 }
  244.                                 if(mileage_count_new != mileage_count_old && first_3_km > 2)
  245.                                 {
  246.                                         Show_Mileage();
  247.                                         for(i = mileage_count_old;i < mileage_count_new;i++)
  248.                                         {
  249.                                                 
  250.                                                 if((time_tmp[4]>6)&&(time_tmp[4]<23))        ///////////////////
  251.                                                 {
  252.                      money_temp+=DayMoney;
  253.                                                         money[0]=money_temp/100;
  254.                                                         money[1] = money_temp%100;
  255.                                                         Money_Show(money);
  256.                                                 }
  257.                                                 
  258.         {
  259. ……………………

  260. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

仿真工程與hex下載: 仿真.rar (23.33 KB, 下載次數: 46)
源代碼(剛剛忘記發了。。。)已補全: 源代碼.zip (98.89 KB, 下載次數: 37)
有問題聯系我


51hei.png (2.82 KB, 下載次數: 121)

51hei.png

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:102963 發表于 2021-6-27 08:37 | 只看該作者
源代碼不全,得壓縮整個工程上傳。
回復

使用道具 舉報

板凳
ID:927515 發表于 2021-6-28 22:44 | 只看該作者
songxia8013 發表于 2021-6-27 08:37
源代碼不全,得壓縮整個工程上傳。

我重新上傳了
回復

使用道具 舉報

地板
ID:328014 發表于 2021-6-28 23:22 | 只看該作者
工程可以自己建立,樓主不必這么麻煩,如果連工程都不會建立,估計也不會來這個論壇學習電子技術了
回復

使用道具 舉報

5#
ID:946558 發表于 2021-6-29 10:17 | 只看該作者
能用ad實現嗎
回復

使用道具 舉報

6#
ID:927515 發表于 2021-7-20 09:52 | 只看該作者
51hei團團 發表于 2021-6-28 23:22
工程可以自己建立,樓主不必這么麻煩,如果連工程都不會建立,估計也不會來這個論壇學習電子技術了

還不是為了多回收一點黑幣
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美jizzhd精品欧美巨大免费 | 欧美视频二区 | 精品日韩一区二区 | 亚洲男人天堂 | 亚洲成人毛片 | 欧美一区二区三区在线播放 | 国产日韩一区二区三免费高清 | 夜夜草 | 免费成人高清在线视频 | 日韩资源 | 2021天天干夜夜爽 | 国产一区二区三区在线免费观看 | 国产欧美精品 | 久久1区| www.精品国产 | 亚洲精品高清视频 | 欧美精品中文字幕久久二区 | 免费国产一区二区视频 | 中文字幕一区二区三区在线观看 | 国产精品久久久久久婷婷天堂 | 国产片侵犯亲女视频播放 | 一区二区三区四区免费视频 | 观看av| 超碰人人人人 | 国产一级在线观看 | 99精品欧美一区二区蜜桃免费 | 中午字幕在线观看 | 午夜极品 | 精品久久久久久 | 91精品在线播放 | 欧美在线一区二区三区四区 | 精品久久久久久久人人人人传媒 | h视频在线免费 | 国产视频一区在线 | 婷婷综合久久 | 亚洲三级在线 | 偷拍自拍网址 | 一区二区三区免费 | 亚洲91视频 | 在线男人天堂 | 一区二区三区久久 |