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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機出租車計價器程序

[復制鏈接]
ID:1013951 發表于 2023-11-13 12:38 | 顯示全部樓層 |閱讀模式
在本次設計中電路鍵盤用到了P1口,其中P1.0口到P1.3口作為鍵盤的輸入,顯示電路用到了P0口和P2口,P2口為液晶的數據口,P3.7口作為AD的輸入端。

單片機源程序如下:
  1. #include <reg51.h>
  2. #include <LCD1602.h>
  3. #include "XPT2046.h"
  4. #define uchar unsigned char
  5. #define uint  unsigned int
  6. unsigned char Command,Speed;

  7. sbit key_start =P3^1;         //開始/結束計價
  8. sbit key_wait  =P3^0;         //等待
  9. sbit key_set   =P1^2;         //設置

  10. sbit key_dn    =P3^2;   //控制白天晚上
  11. sbit key_fuwei =P3^3;  //復位

  12. /************************——變量定義***********************/
  13. uint start_price=70;                //起步價88
  14. uint white_price=18;         //白天的單價   超過3公里每公里6元66
  15. uint black_price=20;        //夜晚的單價   超過3公里每公里8元88
  16. uint Wait_price=100;                //等待價錢100
  17. bit dnc=0;                   //白天晚上的轉換標志
  18. bit qiting;                 //起 停標志位   
  19. uint price1,price2;                           //總價錢、等待價錢
  20. uint   mil;                //里程數

  21. uint mil2;               

  22. uchar shi,fen,miao;
  23. uchar  moshi,moshi2,ms,set_f;                                //模式mos=0初始界面,=1改價頁面,=2等待頁面           
  24.                                 //set_f設置標志=1設置初始,=2設置等待價,=3設置晚上單價,=4設置白天單價


  25. void delay(uchar ms)        //延時函數
  26. {
  27.    uchar j;
  28.          while(ms--)
  29.          {
  30.           for(j=0;j<130;j++);
  31.          }
  32. }


  33. void key()        //按鍵函數
  34. {  
  35.                         if(key_dn==0)
  36.                                  {
  37.            delay(5);   //延時去抖
  38.                                          if(key_dn==0)
  39.                                           {
  40.              while(!key_dn);
  41.                                                  dnc=~dnc;                                                
  42.             }
  43.          }
  44.         if(key_start==0)
  45.                                  {
  46.            delay(5);
  47.                                          if(key_start==0)
  48.                                           {
  49.              while(!key_start);   //檢測按鍵是否松開
  50.                                                  qiting=~qiting;      //起 停 轉換
  51.                                                  if(qiting==0)         
  52.                                                    {
  53.                 moshi=0;
  54.                }
  55.          
  56.                                                         TR0=qiting;          //定時器0打開/關閉
  57.               set_f=0;                                                         
  58.             }
  59.          }
  60.                                  if(key_fuwei==0)          //復位
  61.                                  {
  62.            delay(5);
  63.                                          if(key_fuwei==0)
  64.                                           {
  65.              while(!key_fuwei);
  66.                                                  miao=0;fen=0;shi=0;
  67.                                                  price1=0;price2=0;        mil=0;moshi=0;
  68.             }
  69.          }
  70.                                 if(key_wait==0)
  71.                                 {
  72.                                  delay(5);
  73.                                  if(key_wait==0)
  74.                                  {
  75.                                   while(!key_wait);
  76.                                         miao=0;fen=0;shi=0;
  77.                                         moshi=2;
  78.                                  }
  79.                                 }        
  80.                                          
  81.                                 if(qiting==0)         //結束計價后才能設置
  82.                                 {                                       
  83.                                 if(key_set==0)
  84.                                  {
  85.            delay(5);
  86.                                          if(key_set==0)
  87.                                           {
  88.              while(!key_set);
  89.                                                  set_f++;
  90.                                                  moshi=1;
  91.              if(set_f==5){moshi=0;set_f=0;}                                                        
  92.             }
  93.          }
  94.         
  95.          
  96.          }
  97.                                }

  98. void xianshi()
  99.      {
  100.                          if(moshi!=moshi2)   
  101.                           {
  102.           lcd_wcmd(0x01);       //清顯示屏        
  103.                                         moshi2=moshi;
  104.         }                                 
  105.                          if(moshi==0)
  106.                          {        
  107.          lcd_wcmd(0x80);
  108.                          lcd_data('N');
  109.        lcd_data('J');        
  110.                          lcd_data(':');
  111.                          lcd_data(ASCII[black_price%1000/100]);
  112.                          lcd_data(ASCII[black_price%100/10]);
  113.                          lcd_data('.');
  114.                          lcd_data(ASCII[black_price%10]);

  115.                                  
  116. //       lcd_wcmd(0x80);
  117. //                         lcd_data('D');
  118. //       lcd_data('J');        
  119. //                         lcd_data(':');
  120. //                         lcd_data(ASCII[white_price%1000/100]);
  121. //                         lcd_data(ASCII[white_price%100/10]);
  122. //                         lcd_data('.');
  123. //                         lcd_data(ASCII[white_price%10]);
  124. //                         lcd_data('Y');
  125.                                  mil=XPT2046_ReadAD(XPT2046_XP);
  126.                          lcd_data('G');
  127.                          lcd_data(':');  
  128.                          lcd_data(ASCII[mil%1000/100]);
  129.                          lcd_data(ASCII[mil%100/10]);
  130.                          lcd_data('.');
  131.                          lcd_data(ASCII[mil%10]);
  132.                          lcd_data('K');
  133.                          lcd_data('M');         
  134.                          lcd_wcmd(0x80+0x40);
  135.                          lcd_data('D');
  136.        lcd_data('J');        
  137.                          lcd_data(':');
  138.                          lcd_data(ASCII[white_price%1000/100]);
  139.                          lcd_data(ASCII[white_price%100/10]);
  140.                          lcd_data('.');
  141.                          lcd_data(ASCII[white_price%10]);
  142.                          lcd_data('Y');
  143.                          lcd_data('Y');
  144.        lcd_data('Q');        
  145.                          lcd_data(':');
  146.                          lcd_data(ASCII[price1%1000/100]);
  147.                          lcd_data(ASCII[price1%100/10]);
  148.                          lcd_data('.');
  149.                          lcd_data(ASCII[price1%10]);
  150.                          lcd_data('O');
  151.                          lcd_data('Y');
  152.                          }
  153.                         if(moshi==1)       //改價頁面
  154.                          {                                 
  155.        lcd_wcmd(0x80);
  156.                          lcd_data('S');
  157.        lcd_data('J');        
  158.                          lcd_data(ASCII[start_price%1000/100]);
  159.                          lcd_data(ASCII[start_price%100/10]);
  160.                          lcd_data('.');
  161.                          lcd_data(ASCII[start_price%10]);
  162.                          lcd_data('Y');
  163.                          lcd_data(' ');  
  164.                          lcd_data('P');
  165.                          lcd_data('T');

  166.                          lcd_data(ASCII[Wait_price%1000/100]);
  167.                          lcd_data(ASCII[Wait_price%100/10]);
  168.                          lcd_data('.');
  169.                          lcd_data(ASCII[Wait_price%10]);
  170.                          lcd_data('Y');
  171.                           
  172.                          lcd_wcmd(0x80+0x40);
  173.                          lcd_data('N');
  174.        lcd_data('J');        
  175.                          lcd_data(ASCII[black_price%1000/100]);
  176.                          lcd_data(ASCII[black_price%100/10]);
  177.                          lcd_data('.');
  178.                          lcd_data(ASCII[black_price%10]);
  179.                          lcd_data('Y');
  180.        lcd_data(' ');        
  181.              lcd_data('D');
  182.        lcd_data('J');        
  183.                          lcd_data(ASCII[white_price%1000/100]);
  184.                          lcd_data(ASCII[white_price%100/10]);
  185.                          lcd_data('.');
  186.                          lcd_data(ASCII[white_price%10]);
  187.                          lcd_data('Y');
  188.                          }
  189.                          if(moshi==2)       //等待頁面
  190.                           {
  191.                                 
  192.         lcd_wcmd(0x80);
  193.                          lcd_data('W');
  194.        lcd_data('a');        
  195.                          lcd_data('i');
  196.                          lcd_data('t');        
  197.                          lcd_data(':');
  198.                          lcd_data(' ');
  199.                          lcd_data(' ');
  200.         
  201.                          lcd_data(ASCII[shi%100/10]);
  202.                          lcd_data(ASCII[shi%10]);
  203.                          lcd_data(':');
  204.                          lcd_data(ASCII[fen%100/10]);
  205.                          lcd_data(ASCII[fen%10]);
  206.                          lcd_data(':');
  207.                          lcd_data(ASCII[miao%100/10]);
  208.                          lcd_data(ASCII[miao%10]);
  209.                
  210.          
  211.                          lcd_wcmd(0x80+0x40);
  212.                          lcd_data('D');
  213.        lcd_data('D');        
  214.                          lcd_data('M');
  215.                          lcd_data(':');
  216. //                         lcd_data(ASCII[(white_price/2)%100/10]);
  217.                          lcd_data(ASCII[price2%1000/100]);
  218.                          lcd_data(ASCII[price2%100/10]);
  219.                          lcd_data('.');
  220.                          lcd_data(ASCII[price2%10]);
  221.                          //lcd_data(ASCII[(white_price/2)%10]);
  222.                          lcd_data(' ');
  223.                          lcd_data('Y');
  224.         }  
  225.      }
  226.                  
  227. void jiaqianjisuan()         //計算價錢
  228.       {
  229.                                 if(dnc==0)   //白天價錢
  230.                                 {        
  231.                                 if(mil>25)
  232.                                  {        
  233.           price1=(white_price*(((mil-25)/10)+1));
  234.                                   price1=price1+start_price+price2;        
  235.                                  }
  236.                                 else
  237.                                  price1=start_price+price2;        
  238.                          }        
  239.        else         //晚上價錢
  240.                          {
  241.          if(mil>25)
  242.                                  {        
  243.           price1=(black_price*(((mil-25)/10)+1));
  244.                                   price1=price1+start_price+price2;        
  245.                                  }
  246.                                 else
  247.                                  price1=start_price+price2;        
  248.        }        
  249.                         
  250.              }                 

  251. void T0_init()                   //定時器0初始化
  252.                   {
  253.                 EA=1;                  //開總中斷
  254.                 ET0=1;                 //定時器T0中斷允許         
  255.                 TMOD=0x01;             //使用定時器T0的模式1
  256.                                         TH0=(65536-50000)/256; //定時器T0的高8位賦初值
  257.                                         TL0=(65536-50000)%256; //定時器T0的低8位賦初值
  258.                                         TR0=0;                                         //關閉定時器0
  259.                                   EX0=1;                 //外部中斷0允許位
  260.                                   IT0=1;                 //下降沿觸發外部中斷
  261.       }
  262.                  
  263. void main()
  264. {
  265.         
  266.         lcd_init();           //LCD1602初始化
  267.         T0_init();           //定時器0初始化
  268. while(1)                                                         //死循環
  269.         {
  270.         
  271.                   jiaqianjisuan();
  272.                    key();                        //按鍵檢測處理
  273.             xianshi();
  274.                  
  275.   }
  276. }

  277. void timer0() interrupt 1                  //定時器0中斷函數
  278.    {
  279.      TH0=(65536-50000)/256;
  280.      TL0=(65536-50000)%256;                //定50ms
  281.      ms++;
  282.      if(ms>=20)
  283.            {
  284.             ms=0;
  285.             miao++;
  286.                   if(moshi==0)
  287.                   {
  288.             if(miao>=3)
  289.                    {
  290.         moshi=2;
  291.                                 miao=0;
  292.              }
  293.                    }
  294.             if(moshi==2)
  295.                          {
  296.          if(miao>=60)
  297.                                   {
  298.            miao=0;
  299.                                                 fen++;
  300.                                                 if(fen>=60)
  301.                                                 {
  302.               fen=0;
  303.                                                         shi++;
  304.             }
  305.                                                 if(moshi==2){if(fen>=1)price2=fen*50; }
  306.            }
  307.        }
  308.            }
  309.    }


  310. void inn0() interrupt 0         //外部中斷0中斷子函數           
  311.    {
  312.                 if(qiting==1)
  313.     {                        
  314.                 mil2++;
  315.                 if(moshi==2) moshi=0;
  316.                 if(moshi==0) miao=0;
  317.     if(mil2==10)        
  318.     {
  319.      mil2=0;                        
  320.      mil++;
  321.                 }
  322.           }
  323.    }
復制代碼

原理圖: 無
仿真: 無
代碼: 程序.7z (728.2 KB, 下載次數: 4)

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美黄色绿像 | 亚洲精彩免费视频 | 91精品国产欧美一区二区成人 | 九九九久久国产免费 | 一级毛片视频免费观看 | 久久伊 | 中文字幕av亚洲精品一部二部 | 欧美一区二区三区大片 | 精品粉嫩aⅴ一区二区三区四区 | 亚洲精品免费视频 | 亚洲综合国产精品 | 欧美日在线 | 盗摄精品av一区二区三区 | 一级黄大片 | 在线一区二区国产 | 国产成人小视频 | 日本黄色大片免费 | 精品日韩在线 | 久久国产电影 | 久久精品中文 | 精品国产一区二区三区性色av | 成人午夜视频在线观看 | 国产精品1区2区 | 免费视频一区二区 | 精品国产乱码一区二区三区a | 午夜精品久久久久久久久久久久久 | 一区二区三区视频在线免费观看 | 97久久精品午夜一区二区 | 成人欧美一区二区三区黑人孕妇 | 国产小u女发育末成年 | 中文字幕免费中文 | 欧美自拍另类 | 国产精品69毛片高清亚洲 | 亚洲一区二区视频在线观看 | 亚洲精品免费视频 | 免费观看一级黄色录像 | 精品国产乱码久久久久久久久 | 精品无码三级在线观看视频 | 久久久久久久久久久福利观看 | 国产一区二区欧美 | 亚洲综合视频 |