SOGO論壇
  登入   註冊   找回密碼
查看: 1374|回覆: 1
列印 上一主題 下一主題

[問題求助] 8051 數字進位問題 [複製連結]

Rank: 2

狀態︰ 離線
跳轉到指定樓層
1
發表於 2014-2-20 11:30:15 |只看該作者 |倒序瀏覽
大家好!
我想請問我用4位共陽顯示器最左邊二位當(個位、捨位)來控制
但是在進位顯示方面一直沒有成功,二位數都一直顯示同一個字型碼,而且有些字型碼不完全
請幫我看一下         



#include<reg51.h>

#define uchar unsigned char
#define delay_ms
sbit led1 = P2^1;
sbit led2 = P2^0;
sbit led3 = P2^2;
sbit led4 = P2^3;

#define dig1 led1=0;led2=1;led3=1;led4=1;//點亮 拾位
#define dig2 led1=1;led2=0;led3=1;led4=1;//點亮 個位
#define dig3 led1=0;led2=1;led3=0;led4=1;//點亮 點數
#define dig4 led1=0;led2=1;led3=1;led4=0;//點亮 倍位
sbit OP=P3^0; //投幣
sbit ST=P3^1; //停止
sbit PA=P3^2; //退幣 馬達 開關
sbit PAM=P3^3; //退幣 馬達

#define show P0//定?P0口?所?示段?的控制
uchar number[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};//??0~9
uchar one;    //個位
uchar ten;    //拾位
uchar point;     //點數
uchar Double;    //倍位

void delay1ms(unsigned int time) {    //(????) ?? 1m
    unsigned int  i,j;
    for (i = time; i > 0; i--) {
        for (j = 112; j > 0; j--)
                {;}
    }
}
void T0_init(void) {
        TMOD=0x01;//??工作方式1
        TL0=0x66;//每6ms中?一次
        TH0=0xea;
        TF0=0;//中??志位清零
        ET0=1;//允?定?器0中?
        EA=1;//允??中?
        TR0=1;//??定?器
}

void main(void){ //主程式
uchar i,j,k,l;
T0_init();//定?器0初始化
i=0;//控制 個位 ??
j=0;//控制 拾位 ??
k=0;//控制 點數 ??
l=0;//控制 倍位 ??
one=number[0];   //上??三位??管都?示?0000
ten=number[0];
point=number[0];
Double=number[0];
while(1){      //無限循迴
        if(OP==0)//判?是否有按?被按下
        {
        delay1ms(120);
        if(OP==0){ //按下
                i++; //個位增加
                one=number; //顯示個位
                        if(i==10){     // 10進位
                                i=0; //個位再以10增加
                                j++; //捨位增加
                                one=number;   //顯示個位
                                ten=number[j];   //顯示捨位
                                }
                }
        }
} //循環結束
}//結束主程式

void time_display(void) interrupt 1 { //展示分數
        static uchar show_bit=1;
        TL0=0x66;//定?器?初始
        TH0=0xea;
        switch(show_bit){
                case 1:
                {
                dig1
                show=ten; //個位
                show_bit=2; //
                break;
                }
                case 2:
                {
                dig2
                show=one; //
                show_bit=1; //
                break;
                }
}
}

喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 4

狀態︰ 離線
2
發表於 2014-3-12 22:39:53 |只看該作者
首先,
我看到大大您說字型問題
   0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67
看看是否正確
        if(OP==0){ //按下
                one=number[i++]; //顯示個位
if(i==10){     // 10進位
                                i=0; //個位再以10增加
                                ten=number[j++];
                                one=number[i];   //顯示個位
                              
不知道這樣是否正確
錯了請不要責怪我
請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-11-22 20:18

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部