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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2014|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

關(guān)于單片機(jī)地鐵計(jì)價(jià)器C語言程序語句替換的小問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:655376 發(fā)表于 2019-12-18 11:24 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這是我的設(shè)計(jì)的要求,各位大佬看看能不能用其他的語句替換其中的一部分,但是功能不缺失,期待各位大佬指點(diǎn)
1、上電或按鍵復(fù)位后顯示器件自動(dòng)顯示0,進(jìn)入準(zhǔn)備階段。
2、共計(jì)兩條地鐵線A與B,每條線上有9個(gè)站點(diǎn),其中5號(hào)站點(diǎn)為兩條地鐵線公共站點(diǎn),任何跨線乘坐必須經(jīng)過5號(hào)站點(diǎn)換乘。
3、每3站計(jì)價(jià)2元,不足3站按2元計(jì)價(jià)。
4、通過鍵盤選擇乘坐起點(diǎn)和終點(diǎn),確認(rèn)及取消購(gòu)買。
5、在顯示器件上顯示起點(diǎn)及終點(diǎn)線路及編號(hào),以及總價(jià)。

單片機(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;


//毫秒延時(shí)
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è)置鍵動(dòng)作
                {
                        delay_ms(5);
                        if(K_S == 0)                        //延時(shí)確認(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)                                //延時(shí)確認(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ì)算票價(jià)
                                        }
                                        else                                                        //如果不是3的倍數(shù)
                                        {
                                                num = ((num/3)+1)*2;                //計(jì)算票價(jià)
                                        }
                                        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;                                //指向下個(gè)位置        
                                }
                                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)

這是我的電路原理圖

這是我的電路原理圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:235200 發(fā)表于 2019-12-18 16:38 | 只看該作者
可以采用循環(huán)語句和數(shù)組進(jìn)行替換,程序要簡(jiǎn)潔多了
回復(fù)

使用道具 舉報(bào)

板凳
ID:655376 發(fā)表于 2019-12-18 19:26 | 只看該作者
csmyldl 發(fā)表于 2019-12-18 16:38
可以采用循環(huán)語句和數(shù)組進(jìn)行替換,程序要簡(jiǎn)潔多了

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区不卡视频 | 毛片免费视频 | 亚洲图片视频一区 | 国产乱码精品1区2区3区 | 国产一级在线观看 | 黄色国产 | 狠狠草视频 | 欧美aaaaaaaa| 久久久久久免费毛片精品 | 日本一区二区三区在线观看 | 国产精品九九九 | 天天爽天天干 | 日韩在线视频观看 | 国产精品揄拍一区二区久久国内亚洲精 | 91视频一区二区 | 亚洲欧洲色视频 | 亚洲视频欧美视频 | 五月天婷婷久久 | 91麻豆精品一区二区三区 | 欧美1区| 亚洲精品视频在线观看视频 | 99精品电影 | 最新日韩在线视频 | 国产高清精品一区 | 日韩精品在线看 | 亚洲在线电影 | 久久久久国产成人精品亚洲午夜 | 久久男人 | 一级黄色片网址 | 免费看91 | 成人一区二区视频 | 欧美中文字幕一区二区 | 欧美三级三级三级爽爽爽 | 国产成人精品一区二区三区四区 | 欧美日韩黄 | 在线观看国产网站 | 韩国av影院| 欧美日日 | 国产精品免费一区二区三区 | 国产成人一区二 | 日韩中文字幕在线 |