關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 出租車計價器設計與制作

        出租車計價器設計與制作

        作者: 時間:2011-06-04 來源:網絡 收藏

        中斷服務程序主要實現計時功能,當啟動鍵按下之后,定時器開始工作,用一個變量對定時器溢出中斷的次數進行計數,達到計時功能,該變量在每次脈沖到來時被清零(在主程序中清零),當脈沖長時間沒有來,則當該變量計數超過30秒時,總金額按照途中等待計費標準進行計價。中斷程序的流程圖如圖3-13所示。

        本文引用地址:http://www.104case.com/article/161997.htm

        圖3-13 的中斷服務程序流程圖

        (4)系統軟件調試方案、硬件調試方案及軟硬件聯合調試方案
        軟件調試方案:偉福軟件中,在“文件新建文件”中,新建C語言源程序文件,編寫相應的程序。在“文件新建項目”的菜單中,新建項目并將C語言源程序文件包括在項目文件中。
        在 “項目編譯”菜單中將C源文件編譯,檢查語法錯誤及邏輯錯誤。在編譯成功后,產生以 “*.hex”和“*.bin” 后綴的目標文件。
        硬件調試方案:在平臺中,將單片機的P1.0-P1.2分別與3個獨立式鍵盤通過插線連接起來,將P3.2與脈沖信號源連接起來。
        在偉福中將程序文件編譯成目標文件后,將下載線安裝在實驗平臺上,運行“MCU下載程序”,選擇相應的flash 數據文件,點擊“編程”按鈕,將程序文件下載到單片機的Flash中。
        然后,上電重新啟動單片機,檢查所編寫的程序是否達到題目的要求,是否全面完整地完成試題的內容。

        3.4.2 程序
        /*晶振:11.0592M T1-250微秒溢出中斷一次;P3.2(int0)-中斷100次,查詢IE0置位,
        P1^0為啟動鍵;P1^1為清除鍵;P1^2為白天/晚上的切換鍵
        變量的定義:
        key_val: 返回按鍵的值 255-無鍵
        T1_cnt: 定時器溢出數計數
        cnt_30: 30秒鐘的計時
        cnt_distance: 計算路程
        cnt_cost: 總金額
        state_val: 狀態:0-白天 1 夜晚
        cost_val[3]: 收費標準:白天單價cost_val[0]=1元/公里;晚上單價cost_val[1]=2元/公里;
        等待單價cost_val[2]=1元/30s
        led_seg_code:數碼管7段碼 */
        //-------------------
        #include reg51.h
        unsigned char data cnt_30,cnt_distance,cnt_cost;
        unsigned int data T1_cnt,D_cnt;
        unsigned char data key_val,key_val_old;
        unsigned char data state_val;
        char code cost_val[3]={1,2,1};
        char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
        //led_seg_code[0-9]代表0-9
        //-------延時-----------------
        void delay(unsigned int i)//延時
        { while(--i); }
        //-------初始化變量------------------
        void init_variant() //初始化一些變量的內容
        {unsigned char i;
        cnt_30=0; //30秒的計時
        D_cnt=0; //脈沖的個數
        cnt_distance=0; //距離的計數
        cnt_cost=0; //保存總價格
        }
        //-------掃描鍵盤-----------------
        unsigned char scan_key()
        { unsigned char i,k;
        i=P1;
        if (i==0xff)
        { k=255; } //無鍵按下
        else //有鍵按下
        { delay(10); //延時去抖動
        if(i!=P1)
        {k=255;}
        else
        { switch (i)
        { case 0xfe: k=0; break; //P1.0按下,啟動鍵
        case 0xfd: k=1; break; //P1.1按下,清除鍵
        case 0xfb: k=2; break; //P1.2按下,切換鍵



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 芮城县| 洪江市| 吕梁市| 兴国县| 滦南县| 措勤县| 南陵县| 米林县| 满城县| 翁牛特旗| 盘山县| 富锦市| 怀集县| 平南县| 夹江县| 礼泉县| 千阳县| 遵义县| 华容县| 济宁市| 肥西县| 长丰县| 乌拉特前旗| 安达市| 疏附县| 益阳市| 顺平县| 蕉岭县| 永和县| 清远市| 衡水市| 江油市| 根河市| 眉山市| 乌拉特后旗| 获嘉县| 山丹县| 凤山市| 华安县| 广东省| 廉江市|