SOGO論壇

標題: 8051 數字進位問題 [列印本頁]

作者: grass0423    時間: 2014-2-20 11:30:15     標題: 8051 數字進位問題

大家好!
我想請問我用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;
                }
}
}



附件: [電數圖] 螢幕快照 2014-02-20 上午11.30.47.jpg (2014-2-20 11:25:33, 122.08 KB) / 下載次數 3
https://oursogo.com/forum.php?mod=attachment&aid=NzY5MTMwMnw5MWZiNzU0MXwxNzMyNTE4Mzk5fDB8MA%3D%3D
作者: 乂羽人乂    時間: 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];   //顯示個位
                              
不知道這樣是否正確
錯了請不要責怪我





歡迎光臨 SOGO論壇 (https://oursogo.com/) Powered by OURSOGO.COM