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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3117|回復(fù): 5
收起左側(cè)

89C52單片機(jī)出租車計(jì)費(fèi)系統(tǒng)Proteus仿真程序

[復(fù)制鏈接]
ID:927515 發(fā)表于 2021-6-26 14:18 | 顯示全部樓層 |閱讀模式
本帖最后由 crow23 于 2021-6-27 08:48 編輯

P32腳接入外部脈沖,運(yùn)用外部脈沖輸入模擬車輪,計(jì)算里程,低于10HZ進(jìn)入等待計(jì)費(fèi)。

使用了DS1302可以設(shè)置時(shí)間,單價(jià)分不同時(shí)段,帶停車等待計(jì)價(jià)功能。計(jì)算價(jià)錢方式以下

在6:00---23:00期間,起步費(fèi)6元,可運(yùn)營3公里,超過3公里后每公里3.00元。

在23:00---到次日6:00期間,起步費(fèi)6元,可運(yùn)營3公里,超過3公里后每公里4.00元。


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

原理圖:
下載y.png

pcb:
下載.ppng.png

單片機(jī)源程序如下:
  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黑下載附件…………
復(fù)制代碼

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


51hei.png

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:102963 發(fā)表于 2021-6-27 08:37 | 顯示全部樓層
源代碼不全,得壓縮整個(gè)工程上傳。
回復(fù)

使用道具 舉報(bào)

ID:927515 發(fā)表于 2021-6-28 22:44 | 顯示全部樓層
songxia8013 發(fā)表于 2021-6-27 08:37
源代碼不全,得壓縮整個(gè)工程上傳。

我重新上傳了
回復(fù)

使用道具 舉報(bào)

ID:328014 發(fā)表于 2021-6-28 23:22 | 顯示全部樓層
工程可以自己建立,樓主不必這么麻煩,如果連工程都不會建立,估計(jì)也不會來這個(gè)論壇學(xué)習(xí)電子技術(shù)了
回復(fù)

使用道具 舉報(bào)

ID:946558 發(fā)表于 2021-6-29 10:17 | 顯示全部樓層
能用ad實(shí)現(xiàn)嗎
回復(fù)

使用道具 舉報(bào)

ID:927515 發(fā)表于 2021-7-20 09:52 | 顯示全部樓層
51hei團(tuán)團(tuán) 發(fā)表于 2021-6-28 23:22
工程可以自己建立,樓主不必這么麻煩,如果連工程都不會建立,估計(jì)也不會來這個(gè)論壇學(xué)習(xí)電子技術(shù)了

還不是為了多回收一點(diǎn)黑幣
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 蜜桃精品视频在线 | 日本理论片好看理论片 | 在线播放国产一区二区三区 | 亚洲国产欧美国产综合一区 | 欧美成人精品一区二区男人看 | 亚洲国产一区在线 | 亚洲一区精品在线 | 中文字幕第一页在线 | 亚洲高清在线播放 | 伦理午夜电影免费观看 | www.久久| 亚洲一区二区视频在线观看 | 午夜激情在线视频 | 久久久www成人免费精品张筱雨 | 欧美在线视频免费 | 亚洲精品在线看 | 国产精品一区二区精品 | 国产色 | 成人av网站在线观看 | 精品欧美乱码久久久久久1区2区 | 亚洲午夜一区二区 | 欧美亚洲视频 | 亚欧午夜 | 欧美成人二区 | 欧美日韩在线一区二区三区 | 狠狠干在线 | 久久九九99 | 日韩欧美中文 | 欧美高清免费 | 日韩免费视频 | h片在线看 | 色吊丝2288sds中文字幕 | 国产欧美日韩精品在线观看 | 国产xxxx搡xxxxx搡麻豆 | 97精品超碰一区二区三区 | 国产欧美一区二区三区久久人妖 | 欧美日韩精品免费 | 精品1区| 草比av | 区一区二在线观看 | 久久综合九色综合欧美狠狠 |