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

標題: 單片機出租車計價器程序 [打印本頁]

作者: 千仞    時間: 2021-10-27 17:45
標題: 單片機出租車計價器程序

1. 用前4位數(shù)碼管實時顯示里程數(shù)(Z),單位為公里,最后一位為小數(shù)位;用后4位數(shù)碼管時時顯示金額數(shù)(J),單位為元,最后一位為小數(shù)位。
2. 規(guī)定出租車單程價格為2元/公里,往返則價格為1.5元/公里;單程/往返分別由“單程” 按鍵和“往返” 按鍵設(shè)定。
3. 車速<5公里/小時的時間累積為總等待時間T(分鐘),每5分鐘等待時間相當于里程數(shù)增加1公里。
4. 起步公里數(shù)為3公里,價格為8元;若實際運行大于3公里, 按“設(shè)計任務(wù)2”計算價格。
5. 必須充分利用比賽指定的硬件平臺上的資源進行設(shè)計。
6. 用單片機控制電機轉(zhuǎn)動,并用光電傳感器檢測轉(zhuǎn)盤轉(zhuǎn)動模擬車速,車速與轉(zhuǎn)盤轉(zhuǎn)速成正比。轉(zhuǎn)盤轉(zhuǎn)速為5轉(zhuǎn)/秒對應(yīng)車速為5公里/小時,轉(zhuǎn)盤轉(zhuǎn)速為50轉(zhuǎn)/秒對應(yīng)車速為50公里/小時,依此類推。
7. 要求公里數(shù)檢測誤差不超過±10%。
8. 到達目的地后,按“暫停” 鍵,計價器可暫停計價。
9. 按“清除” 鍵,計價器能將記錄數(shù)據(jù)(里程、等待時間與價格等)自動清0。
10.按“查詢”鍵,能自動顯示總等待時間T,再按下該鍵回到顯示里程數(shù)、金額狀態(tài)。
1.2系統(tǒng)工作原理及其組成
出租車計價是根據(jù)車所行駛的路程以及乘客乘車的方式綜合決定的。出租車行駛總路程可以通過車輪的周長乘車輪旋轉(zhuǎn)圈數(shù)得到。即可計算得到車輪旋轉(zhuǎn)幾周出租車能行駛一公里的路程。因此,使用槽型光耦的目的就是方便地計量車輪旋轉(zhuǎn)的圈數(shù)。可在車輪轉(zhuǎn)軸涂上白色條紋,其余部分涂成黑色,發(fā)光管照射轉(zhuǎn)軸。當轉(zhuǎn)軸轉(zhuǎn)動時,反光與不反光交替出現(xiàn),所以槽型光耦間斷地接收光的反射信號,輸出電脈沖。再經(jīng)過整形電路,輸出標準TTL信號。輸出的脈沖信號被接入到STC89C52單片機系統(tǒng)中,通過計算接收到的脈沖個數(shù),計算出當前所行駛的路程。同時,根據(jù)不同的收費標準,選擇相應(yīng)的起步價、單價等收費標準進行計算。HD 7279管理鍵盤和數(shù)碼顯示,通過鍵盤能夠?qū)崿F(xiàn)啟動、暫停、停止計價器、切換顯示當前的行駛里程和需支付的車費。
出租車計價器用于記錄里程、等待時間、是否往返、起步公里數(shù)與價格的關(guān)系,它能有效地避免司機與乘客間的矛盾,保障雙方的利益。
模擬出租車計價器能根據(jù)總里程數(shù)、總等待時間長短、是否往返、起步公里數(shù)的情況作出相應(yīng)報價等。當然實際的出租車計價器還具有能打印出車票等功能
1 單片機最小系統(tǒng)單元主控機系統(tǒng)采用了Atmel 公司生產(chǎn)的 STC89C52單片機,它含有256 字節(jié)數(shù)據(jù)存儲器,內(nèi)置8K 的電可擦除FLASH ROM,可重復(fù)編程,大小滿足主控機軟件系統(tǒng)設(shè)計,所以不必再擴展程序存儲器。復(fù)位電路和晶振電路是STC89C52 工作所需的最簡外圍電路。單片機最小系統(tǒng)電路圖如圖2.1所示。
主控機系統(tǒng)采用了Atmel 公司生產(chǎn)的 STC89C52單片機,它含有256 字節(jié)數(shù)據(jù)存儲器,內(nèi)置8K 的電可擦除FLASH ROM,可重復(fù)編程,大小滿足主控機軟件系統(tǒng)設(shè)計,所以不必再擴展程序存儲器。復(fù)位電路和晶振電路是STC89C52 工作所需的最簡外圍電路。單片機最小系統(tǒng)電路圖如圖2.1所示。
file:///C:/Users/WF/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif
圖2.1 單片機最小系統(tǒng)圖
STC89C52的復(fù)位端是一個史密特觸發(fā)輸入,高電平有效。RST端若由低電平上升到高電平并持續(xù)2個周期,系統(tǒng)將實現(xiàn)一次復(fù)位操作。在復(fù)位電路中,按一下復(fù)位開關(guān)就使在RST端出現(xiàn)一段時間的高電平,外接11.0592M 晶振和兩個30pF 電容組成系統(tǒng)的內(nèi)部時鐘電路
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*7279指令*/
#define com_read  0x15      //讀鍵盤數(shù)據(jù)指令
/*變量及I/O口定義 */                                               
sbit cs= P1^0;               //cs  連接于 P1.0,低電平有效
sbit clk=P1^1;               //clk 連接于 P1.1
sbit key=P1^3;               //dat 連接于 P1.2
sbit dat=P1^2;               //key 連接于 P1.3,低電平有效   
/*函數(shù)原型聲明 */
voidwrite7279(uchar,uchar);   //寫入到HD7279
uchar read7279(uchar);         //從HD7279讀出
void send_byte(uchar);        //發(fā)送一個字節(jié)
ucharreceive_byte(void);     //接收一個字節(jié)
void short_delay(void);       //延時約8us
void long_delay(void);        //延時約50us
void delay_10ms(uchartimes);  //延時約times*10ms
void delay_1ms(uchar times);  //延時約times*1ms
void Init_date();
ucharqianwei,baiwei,shiwei,gewei;
uint tt,aa,aaa,wait,dengdai,gongli,jiage,jg;
bit flag0,flag1,flag2,flag3;
uchar led[]={0x1c,0x1d,0x1e,0x1f,0x14,0x15,0x16,0x17,
                0x0c,0x0d,0x0e,0x0f,0x04,0x05,0x06,0x07};    //鍵值編碼s0-s15
/*發(fā)送字節(jié)函數(shù) 發(fā)送的字節(jié)為out_byte*/
void send_byte(ucharout_byte)
  {
      uchar i;
      cs=0;
      long_delay();
      for(i=0;i<8;i++)
         {
          if(out_byte&0x80)
              dat=1;
           else
              dat=0;
           clk=1;
           short_delay();
           clk=0;
           short_delay();
           out_byte=out_byte*2;   //左移一位
         }
      dat=0;
  }
/*接收字節(jié)函數(shù) 接收的字節(jié)in_byte*/
uchar receive_byte(void)
  {
    uchar i,in_byte;
    dat=1;                        
    long_delay();
    for(i=0;i<8;i++)
       {
         clk=1;
         short_delay();
         in_byte=in_byte*2;
         if(dat)
           in_byte=in_byte|0x01;
         clk=0;
         short_delay();
       }
    dat=0;   
    return(in_byte);
  }
/*發(fā)送帶數(shù)據(jù)指令函數(shù)*/
void write7279(ucharcommond,uchar date)
  {
    send_byte(commond);
    send_byte(date);
  }
/*讀指令函數(shù)*/
uchar read7279(ucharcommond)
  {
     send_byte(commond);
     return(receive_byte());
   }
/*短延時函數(shù)1*/
void short_delay(void)            //延時約8us
  {
    uchar i;
    for(i=0;i<2;i++);
  }
/*短延時函數(shù)2*/
void long_delay(void)             //延時約50us
  {
     uchar i;
     for(i=0;i<12;i++);
   }
void zting()                  //停止子程序
   {
       flag1=!flag1;
       if(flag1)  
       {
           EX0=0;       //關(guān)閉中斷  定時器
           TR0=0;
       }
       else
       {
           EX0=1;
           TR0=1;
       }
   }
uchar   read_key_code(void)  //讀鍵值
{
    uchar i_code;
    if(!key)
    {
       i_code=read7279(0x15);
       while(!key);       //消除鍵盤抖動
       return i_code;        //讀鍵盤值  
    }
    else
       return 0xff;         //無鍵盤按下
}
uchar read_key_number(void)   //讀鍵盤號
{
    uchar l_o;
    uchar i;
    l_o=read_key_code();
    if(l_o!=0xff)          //判斷是否有鍵盤按下
    {
    for(i=0;i!=l_o;i++);
    return i;
    }
    else return 0xff;
}
void keyscan()
{
    uchar k_p;
    k_p=read_key_number();            //讀鍵值號 選擇相應(yīng)的操作
    switch(k_p)
    {
       case 12: flag0=!flag0;break; //顯示金額 公里 等待時間T 脈沖數(shù)   
       case 13: Init_date();break; //數(shù)據(jù)初始化函數(shù)
       case 14: zting();break;     //暫停
       case 15: flag2=1;break;       //單程
       case 11: flag2=0;break;       //往返
       default :break;
    }
}
void jisuan()     //計算數(shù)據(jù)處理
{
    if(0<=aaa<=180)           
    {
       gongli=aaa/6+dengdai/3000;
       jiage=60;       //60角
    }
    if(!flag2) jg=20;  //單程價格
    jg=15;          //往返價格
    if(aaa>180)
    {      
       gongli=aaa/6+dengdai/3000;
       jiage=jg*(gongli-30)/10+60;
    }
   
    wait=dengdai/100;
}
void fenli(uint temp,uchardd,uchar ee,uchar ff,uchar gg)    //數(shù)據(jù)的分離處理
{
    if(temp>=9999) temp=9999;
    qianwei=temp/1000;
    baiwei=temp/100%10;
    shiwei=temp%100/10|0x80;
    gewei=temp%10;
    write7279(dd,qianwei);
    write7279(ee,baiwei);
    write7279(ff,shiwei);
    write7279(gg,gewei);
}
void display()      //7279顯示程序
{
    if(flag0)
    {
       write7279(0x98,0xff);
       fenli(wait,0x87,0x86,0x85,0x84);
       fenli(aaa,0x83,0x82,0x81,0x80);    //顯示脈沖數(shù)
    }
    else
    {
           write7279(0x98,0xff);
           fenli(gongli,0x87,0x86,0x85,0x84);
           fenli(jiage,0x83,0x82,0x81,0x80);
           
    }}
void Init_date()              //數(shù)據(jù)初始化
{               
           
           aaa=0;
           tt=0;
           wait=0;
           dengdai=0;
           gongli=0;
           jiage=0;
           flag0=0;
           flag1=0;
           flag2=0;
           flag3=0;
}
void init()                           //定時器初始化  
{
    TMOD=0x01;
    TH0=(65536-10000)/256;
    TL0=(65536-10000)%256;
    IE=0x83;
    IT0=1;   //外部邊沿觸發(fā)方式
    TR0=1;
}
void main()                 //主程序
{
    Init_date();       //調(diào)用數(shù)據(jù)初始數(shù)據(jù)
    init();               //定時器初始化
    send_byte(0xa4);  //初始化7279
    while(1)
    {
       keyscan();     //鍵盤掃描
       jisuan();      //數(shù)據(jù)處理
       display();      //顯示
    }
}
/**********中斷***********/
void zd() interrupt 0        //中斷0
{
    aa++;
    if(flag3)     aaa++;      //進入中途等待計價
}
/*********定時器********/
void time0() interrupt 1   //定時0
{
    TH0=(65536-10000)/256;      //10ms
    TL0=(65536-10000)%256;
    tt++;
    if(tt>=100)          //1s采樣
    {
       tt=0;
       aa=aa/5;     //速度(n*圈/s)
       if(aa<=5)    flag3=0;
       else            flag3=1;
       aa=0;
    }
    if(!flag3)
    {   dengdai++;
    }
}





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美一区二区三区免费在线观看 | h漫在线观看| 人操人免费视频 | 亚洲大片在线观看 | 欧美在线激情 | 一区二区三区免费网站 | 日本一区二区视频 | 亚洲啪啪一区 | 亚洲一区二区中文字幕 | 中文字幕一区二区三区日韩精品 | 精品国产一区二区国模嫣然 | 男女啪啪网址 | 国产一区二区三区免费视频 | 365夜爽爽欧美性午夜免费视频 | 免费黄色的网站 | 日韩淫片免费看 | 最新超碰| 欧美黑人狂野猛交老妇 | 四虎成人av| 亚洲午夜精品一区二区三区 | 国产乱码精品一品二品 | 91社区在线观看高清 | 欧美影院久久 | 色久五月 | 亚洲性人人天天夜夜摸 | 日韩高清中文字幕 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 6080yy精品一区二区三区 | www.成人.com| 少妇一级淫片免费放播放 | www.伊人.com| 中文字幕在线精品 | 久久这里只有精品首页 | 伊人久久精品一区二区三区 | 国产精品成人久久久久 | 精品三级在线观看 | 99精品欧美一区二区三区综合在线 | 欧美 日韩 在线播放 | 黄色大片毛片 | 久久久久国 | 国产精品久久久久久久久大全 |