欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 關(guān)于單片機(jī)地鐵計(jì)價器C語言程序語句替換的小問題 [打印本頁]

作者: 南風(fēng)啊    時間: 2019-12-18 11:24
標(biāo)題: 關(guān)于單片機(jī)地鐵計(jì)價器C語言程序語句替換的小問題
這是我的設(shè)計(jì)的要求,各位大佬看看能不能用其他的語句替換其中的一部分,但是功能不缺失,期待各位大佬指點(diǎn)
1、上電或按鍵復(fù)位后顯示器件自動顯示0,進(jìn)入準(zhǔn)備階段。
2、共計(jì)兩條地鐵線A與B,每條線上有9個站點(diǎn),其中5號站點(diǎn)為兩條地鐵線公共站點(diǎn),任何跨線乘坐必須經(jīng)過5號站點(diǎn)換乘。
3、每3站計(jì)價2元,不足3站按2元計(jì)價。
4、通過鍵盤選擇乘坐起點(diǎn)和終點(diǎn),確認(rèn)及取消購買。
5、在顯示器件上顯示起點(diǎn)及終點(diǎn)線路及編號,以及總價。

單片機(jī)源程序如下:
#include <reg51.h>
#include <stdlib.h>
#include <intrins.h>

#define LEDPORT P0                //LCD數(shù)據(jù)口

//共陽數(shù)字編碼  
unsigned char ca_table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
unsigned char disbuff[6];                //顯示字符

sbit K_S = P1^0;                //設(shè)置鍵
sbit K_M = P1^1;                //位選建
sbit K_Z = P1^2;                //增加鍵
sbit K_J = P1^3;                //減小鍵

sbit CC1 = P2^7;                //數(shù)碼管位選
sbit CC2 = P2^6;
sbit CC3 = P2^5;
sbit CC4 = P2^4;
sbit CC5 = P2^3;
sbit CC6 = P2^2;
sbit CC7 = P2^1;
sbit CC8 = P2^0;


//毫秒延時
void delay_ms(unsigned char ms)
{        
        unsigned char number,value;
        for(number=0;number<ms;number++)
        {        
                value=148;
                while(value--);
        }
}

//顯示函數(shù)
void display(void)
{
        CC1 = 1;                                                //顯示第一位數(shù)碼管
        LEDPORT = ca_table[disbuff[0]];
        delay_ms(5);
        CC1 = 0;

        CC2 = 1;                                                //第二位
        LEDPORT = ca_table[disbuff[1]];
        delay_ms(5);
        CC2 = 0;
        
        CC3 = 1;                                                //第三位
        LEDPORT = ca_table[disbuff[2]];
        delay_ms(5);
        CC3 = 0;
        
        CC4 = 1;                                                //第四位
        LEDPORT = ca_table[disbuff[3]];
        delay_ms(5);
        CC4 = 0;
        
        CC7 = 1;                                                //第七位
        LEDPORT = ca_table[disbuff[4]];
        delay_ms(5);
        CC7 = 0;
        
        CC8 = 1;                                                 //第八位
        LEDPORT = ca_table[disbuff[5]];
        delay_ms(5);
        CC8 = 0;               
}



void main(void)
{
        unsigned char wei = 0;                        //數(shù)碼管位指針
        unsigned char cnt = 0;                        //計(jì)數(shù)值
        unsigned char num = 0;                        //起點(diǎn)和終點(diǎn)之間的站數(shù)
        unsigned char flag = 0;                        //運(yùn)行標(biāo)志
        unsigned char datbuff[4];                //選擇結(jié)果
        P2 = 0X00;

        while(1)
        {
                display();                                        //顯示
                if(K_S == 0)                                //設(shè)置鍵動作
                {
                        delay_ms(5);
                        if(K_S == 0)                        //延時確認(rèn)
                        {
                                flag = 1;                                        //設(shè)置標(biāo)志,進(jìn)入
                                datbuff[0] = 10;                        //A
                                datbuff[1] = 1;                                //1
                                datbuff[2] = 10;                        //A
                                datbuff[3] = 1;                                //1
                                disbuff[0] = datbuff[0];        //顯示初始狀態(tài)
                                disbuff[1] = datbuff[1];
                                disbuff[2] = datbuff[2];
                                disbuff[3] = datbuff[3];
                                disbuff[4] = 0;
                                disbuff[5] = 0;        
                        }
                        while(K_S == 0)                                        //等待按鍵釋放
                        {
                                display();
                        }
                }
                while(flag == 1)                                        //進(jìn)入選擇模式
                {
                        display();                                                //顯示
                        cnt++;                                                        //計(jì)數(shù)值遞增
                        if(cnt == 20)                                        //計(jì)數(shù)值達(dá)到20
                        {
                                disbuff[wei] = 16;                        //當(dāng)前選中數(shù)碼管消隱
                        }
                        else if(cnt == 40)                                //計(jì)數(shù)值達(dá)到40
                        {
                                disbuff[wei] = datbuff[wei];//顯示字符
                                cnt = 0;                                        //計(jì)數(shù)值清零
                        }
                        if(K_S == 0)                                        //設(shè)置鍵按下
                        {
                                delay_ms(5);
                                if(K_S == 0)                                //延時確認(rèn)
                                {
                                        flag = 0;                                //清除標(biāo)志,退出選擇模式
                                        wei = 0;
                                        if(datbuff[0] == datbuff[2])        //如果選擇的是同一條線路
                                        {
                                                num = (unsigned char)abs(datbuff[1]-datbuff[3]);        //計(jì)算站數(shù)
                                        }
                                        else                                                        //如果需要換乘
                                        {
                                                num = (unsigned char)abs(datbuff[1]-5);                                //計(jì)算一條線路的站數(shù)        
                                                num += (unsigned char)abs(datbuff[3]-5);                        //計(jì)算另一條線路的站數(shù)
                                        }
                                        if((num%3)==0)                                        //如果站數(shù)是3的倍數(shù)
                                        {
                                                num = (num/3)*2;                        //計(jì)算票價
                                        }
                                        else                                                        //如果不是3的倍數(shù)
                                        {
                                                num = ((num/3)+1)*2;                //計(jì)算票價
                                        }
                                        disbuff[0] = datbuff[0];                //刷新顯示內(nèi)容
                                        disbuff[1] = datbuff[1];
                                        disbuff[2] = datbuff[2];
                                        disbuff[3] = datbuff[3];
                                        disbuff[4] = num/10;
                                        disbuff[5] = num%10;        
                                }
                                while(K_S == 0)                                                //等待按鍵釋放
                                {
                                        display();
                                }
                        }
                        if(K_M == 0)                                                        //位選鍵按下
                        {
                                delay_ms(5);
                                if(K_M == 0)
                                {
                                        disbuff[wei] = datbuff[wei];        //之前指向的位保持顯示狀態(tài)
                                        wei = (wei+1)%4;                                //指向下個位置        
                                }
                                while(K_M == 0)                                                //等待按鍵釋放
                                {
                                        display();
                                }
                        }
                        if(K_Z == 0)                                                        //增加鍵按下
                        {
                                delay_ms(5);
                                if(K_Z == 0)
                                {
                                        switch(wei)                                                //根據(jù)位指針判斷
                                        {
                                                case 0: if(datbuff[0] == 10)                        //第一位數(shù)碼管在A,B之間切換
                                                                        datbuff[0] = 11;
                                                                else if(datbuff[0] == 11)
                                                                        datbuff[0] = 10;
                                                                break;
                                                case 1: datbuff[1]++;                                        //第二位數(shù)碼管數(shù)字遞增
                                                                if(datbuff[1]==10)                                //達(dá)到10后回到1
                                                                        datbuff[1]=1;
                                                                break;
                                                case 2: if(datbuff[2] == 10)                        //第三位數(shù)碼管在A,B之間切換
                                                                        datbuff[2] = 11;
                                                                else if(datbuff[2] == 11)
                                                                        datbuff[2] = 10;
                                                                break;
                                                case 3: datbuff[3]++;                                        //第四位數(shù)碼管數(shù)字遞增
                                                                if(datbuff[3]==10)
                                                                        datbuff[3]=1;
                                                                break;
                                        }        
                                }
                                while(K_Z == 0)                                //等待按鍵釋放
                                {
                                        display();
                                }
                        }
                        if(K_J == 0)                                        //減小鍵按下
                        {
                                delay_ms(5);
                                if(K_J == 0)
                                {
                                        switch(wei)                                //根據(jù)位指針判斷
                                        {
                                                case 0: if(datbuff[0] == 10)                        //第一位A,B切換
                                                                        datbuff[0] = 11;
                                                                else if(datbuff[0] == 11)
                                                                        datbuff[0] = 10;
                                                                break;
                                                case 1: datbuff[1]--;                                        //第二位遞減
                                                                if(datbuff[1]==0)                                //到0之后回到9
                                                                        datbuff[1]=9;
                                                                break;

                                                case 2: if(datbuff[2] == 10)                        //第三位A,B切換
                                                                        datbuff[2] = 11;
                                                                else if(datbuff[2] == 11)
                                                                        datbuff[2] = 10;
                                                                break;
                                                case 3: datbuff[3]--;                                        //第四位遞減
                                                                if(datbuff[3]==0)
                                                                        datbuff[3]=9;
                                                                break;
                                        }        
                                }
                                while(K_J == 0)                                        //等待按鍵釋放
                                {
                                        display();
                                }
                        }        
                }                                
        }
}

1.png (131.21 KB, 下載次數(shù): 19)

這是我的電路原理圖

這是我的電路原理圖

作者: csmyldl    時間: 2019-12-18 16:38
可以采用循環(huán)語句和數(shù)組進(jìn)行替換,程序要簡潔多了
作者: 南風(fēng)啊    時間: 2019-12-18 19:26
csmyldl 發(fā)表于 2019-12-18 16:38
可以采用循環(huán)語句和數(shù)組進(jìn)行替換,程序要簡潔多了

首先謝謝大佬給的思路,不過這個東西我也是今年剛學(xué)




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1