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

QQ登錄

只需一步,快速開(kāi)始

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

計(jì)算器原理分析

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:101959 發(fā)表于 2016-5-16 10:28 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 zzmm5520 于 2016-5-16 10:32 編輯

胡老師,幫忙看看。那計(jì)算器,怎么數(shù)碼管不顯示。原理在附件


#include "STC89C5xRC.h"
#include<intrins.h>
#define uint8 unsigned char
#define uint unsigned int
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};

ulong dat;       //數(shù)據(jù)
ulong datA;      //過(guò)度數(shù)據(jù)
uchar addflag;   //加法標(biāo)志位
uchar subflag;   //減法標(biāo)志位
uchar mulflag;   //乘法標(biāo)志位
uchar divflag;   //除法標(biāo)志位
uchar overflow;  //溢出標(biāo)志位
uchar clrflag;   //數(shù)據(jù)處理標(biāo)志位
uchar illegal;   //除法的非法標(biāo)志位

uchar keynum;    //按鍵鍵值
uchar keycode;   //按鍵IO口狀態(tài)值   

uchar scanok;    //IO口掃描結(jié)束
uchar checkok;   //鍵值獲取結(jié)束


sbit DUAN       = P2^6;     //74HC573的LE端    LED的段選端
sbit WEI        = P2^7;     //74HC573的LE端    LED的位選端
sbit BUZZER     = P2^3;

void delay_ms(uint z)                      //1ms的延時(shí)函數(shù)   
{
        uchar x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}


void wei_1(uchar wei)
{
        P0=wei;
        WEI=1;
        WEI=0;
}

void duan_1(uchar duan)
{
        uint i;
        P0=table[duan];
            DUAN=1;
        DUAN=0;
        for(i=25;i>0;i--);

        P0=0;
            DUAN=1;
        DUAN=0;
    for(i=50;i>0;i--);       //以上4行是消隱,如果不加其他數(shù)碼
                                                        //        管會(huì)有暗亮非常難看
}

void leddisplay(uchar n,uchar value)
{
            wei_1(_crol_(0xfe,n));
        duan_1(value);
}

void  scankeyboard()                  //scankeyboard()函數(shù)(用于掃描鍵值)
{                                     //反轉(zhuǎn)法測(cè)鍵值。。。
        uchar a,b;
//                        P3=0xfe;
//                        keycode=P3;
//                        keycode=keycode&0xf0;
//                        while(keycode!=0xf0)
//                        {
//                                        delay_ms(5);
//                                        keycode=P3;
////                                        a=keycode;
////                                        P3 = 0xF0;
////                                        b = P3;
//                                        keycode=keycode&0xf0;
//                                        while(keycode!=0xf0)
//                                        {
//                                                keycode=P3;
//                                                 BUZZER = 0;
//                                                 delay_ms(500);
//                                               
//                                        while(keycode!=0xf0)
//                                                {
//                                                        keycode=P3;
//                                                        keycode=keycode&0xf0;
//                                                        P0=keycode;
//                                                        scanok=1;
//                                                        BUZZER = 1;
//                                                }
//                                        }
//                                }
//                        P3=0xfd;
//                        keycode=P3;
//                        keycode=keycode&0xf0;
//                        while(keycode!=0xf0)
//                        {
//                                        delay_ms(5);
//                                        keycode=P3;
////                                        a=keycode;
////                                        P3 = 0xF0;
////                                        b = P3;
//                                        keycode=keycode&0xf0;
//                                        while(keycode!=0xf0)
//                                        {
//                                                keycode=P3;
//                                                 BUZZER = 0;
//                                                 delay_ms(500);
//                                               
//                                        while(keycode!=0xf0)
//                                                {
//                                                        keycode=P3;
//                                                        keycode=keycode&0xf0;
//                                                        P0=keycode;
//                                                        scanok=1;
//                                                        BUZZER = 1;
//                                                }
//                                        }
//                                }
//                        P3=0xfb;
//                        keycode=P3;
//                        keycode=keycode&0xf0;
//                        while(keycode!=0xf0)
//                        {
//                                        delay_ms(5);
//                                        keycode=P3;
////                                        a=keycode;
////                                        P3 = 0xF0;
////                                        b = P3;
//                                        keycode=keycode&0xf0;
//                                        while(keycode!=0xf0)
//                                        {
//                                                keycode=P3;
//                                                 BUZZER = 0;
//                                                 delay_ms(500);
//                                               
//                                        while(keycode!=0xf0)
//                                                {
//                                                        keycode=P3;
//                                                        keycode=keycode&0xf0;
//                                                        P0=keycode;
//                                                        scanok=1;
//                                                        BUZZER = 1;
//                                                }
//                                        }
//                                }
//                        P3=0xf7;
//                        keycode=P3;
//                        keycode=keycode&0xf0;
//                        while(keycode!=0xf0)
//                        {
//                                        delay_ms(5);
//                                        keycode=P3;
////                                        a=keycode;
////                                        P3 = 0xF0;
////                                        b = P3;
//                                        keycode=keycode&0xf0;
//                                        while(keycode!=0xf0)
//                                        {
//                                                P0=keycode;
//                                                scanok=1;
//                                                 BUZZER = 0;
//                                                 delay_ms(500);
//                                               
//                                        while(keycode!=0xf0)
//                                                {
//                                                        keycode=P3;
//                                                        keycode=keycode&0xf0;
//                                                       
//                                                        BUZZER = 1;
//                                                }
//                                        }
//                                }
        P3=0xfe;                     
        keycode=P3;
                keycode=keycode&0xf0;
        if(keycode!=0xf0)
        {
            delay_ms(10);                 //按鍵閉合消抖。。
                a=keycode;
                P3=0xf0;
                b=P3;
                keycode=a|b;
                                 BUZZER = 0;
                                delay_ms(500);
                while(P3!=0xf0);
                delay_ms(10);//按鍵釋放消抖。。
                P0=keycode;
                scanok=1;//鍵值測(cè)完后。。scanok置1。。。
                                BUZZER = 1;
        }
}

void checkkeycode(void)      
{
        if(scanok)                                //如果鍵值測(cè)完后,則執(zhí)行以下。。。
        {
                scanok=0;                             //scanok清零。。為下次使用準(zhǔn)備
                switch(keycode)                       //用開(kāi)關(guān)語(yǔ)句查找鍵值對(duì)應(yīng)的邏輯功能...
                {
                        case 0xee: keynum=0  ;break;  //數(shù)字鍵
                        case 0xde: keynum=1  ;break;
                        case 0xbe: keynum=2  ;break;
                        case 0x7e: keynum=3  ;break;
                        case 0xeb: keynum=4  ;break;
                        case 0xdb: keynum=5  ;break;
                        case 0xbb: keynum=6  ;break;
                        case 0xe7: keynum=7  ;break;
                        case 0xd7: keynum=8  ;break;
                        case 0xb7: keynum=9  ;break;
                        case 0x77: keynum=10 ;break;   // +
                        case 0x7b: keynum=11 ;break;   // -
                        case 0x7d: keynum=12 ;break;   // *
                        case 0x7a: keynum=13 ;break;   // /
                        case 0xba: keynum=14 ;break;   // =
                        case 0xda: keynum=15 ;break;   //清零
                       
                        //0C=/
                        //123*
                        //456-
                        //789+
                }
                checkok=1;                         //查完后,checkok置1.
        }
}

void datpros(void)//數(shù)據(jù)處理函數(shù)。。
{
        if(keynum==15)//如果是15  則認(rèn)為是清零的  進(jìn)行清零
        {
                dat=0;
        }
        else        //否則則認(rèn)為是數(shù)字鍵 進(jìn)行顯示 存貯 并運(yùn)算
        {
                if(clrflag)//清除標(biāo)志為1,則執(zhí)行以下。
                {        
                        dat=0;
                        clrflag=0;//為下次使用準(zhǔn)備。
                }
                dat=dat*10+(ulong)keynum;     //將每次按的數(shù)字合成一個(gè)整體。。比如按下"1","2","3"后就會(huì)把它合成"123"
                if(dat>1000000000) overflow=1; //如果輸入值大于65535(所用的為int型數(shù)據(jù),最大為65535)的話則溢出標(biāo)志置1,可供顯示程序查詢并顯示"EEEEEEE"
                if(divflag&&!dat) illegal=1;   //如果做除法時(shí)除了零,則非法標(biāo)志置1,供顯示程序查詢
        }
}

void add(void)//加法計(jì)算
{
        addflag++;                          //加法標(biāo)志置1。。。
        subflag=mulflag=divflag=0;          //將其它運(yùn)算標(biāo)志清零。。(一次只能作一種運(yùn)算)
        clrflag=1;                          //清零標(biāo)標(biāo)置1,(當(dāng)按下加號(hào)后,再按第二個(gè)加數(shù)時(shí),這時(shí)應(yīng)該顯示第二加數(shù)。。所以要清掉第一個(gè)加數(shù)。)
        if(addflag>1)                       //此處用于邊加。。
        {                                   //當(dāng)連續(xù)加的時(shí)候。。加號(hào)應(yīng)有等于的功能。。
                dat=dat+datA;                   //算出和
                datA=dat;                       //和保存,用于下一次連加。。
        }                                   //說(shuō)明:比如進(jìn)行"1+2+3"時(shí),當(dāng)按第二個(gè)加時(shí),應(yīng)該要顯示1+2的和。。
        else datA=dat;                      //如果不是連加,將輸入的第一個(gè)加數(shù)暫存。。(因?yàn)轱@示程序只顯示dat變量的值。)

}

void sub(void) //減法計(jì)算
{
        subflag++;
        addflag=mulflag=divflag=0;
        clrflag=1;
        if(subflag>1)                //連減。。
        {
                dat=datA-dat;
                datA=dat;
        }
        else datA=dat;
}

void mul(void)//乘法計(jì)算
{
        mulflag++;
        addflag=subflag=divflag=0;
        clrflag=1;
        if(mulflag>1)                //連乘
        {
                dat=datA*dat;
                datA=dat;
        }
        else datA=dat;

}

void div(void)        //除法計(jì)算
{
        divflag++;
        addflag=subflag=mulflag=0;
        clrflag=1;
        if(divflag>1)
        {
                dat=datA/dat;
                datA=dat;
        }
        else datA=dat;
}

void equ(void)          //等于計(jì)算
{
       
        if(addflag)                           //如果些時(shí)做加法運(yùn)算。。
        {
                dat=dat+datA;                     //計(jì)算各存入dat(顯示程序會(huì)將dat顯示的。。)
        }
                if(subflag)
        {
                dat=datA-dat;
        }
        if(mulflag)
        {
                dat=datA*dat;
        }
        if(divflag)
        {
                dat=datA/dat;
        }
        addflag=subflag=mulflag=divflag=0;    //運(yùn)算一次完成后將所有運(yùn)標(biāo)志清零。為下次運(yùn)算作準(zhǔn)備。。
}

void display(void)
{
        uchar ge=0,shi=0,bai=0,qian=0,wan=0,shiwan=0,baiwan=0,qianwan=0;

        if(!overflow&&!illegal)
        {
                ge=dat%10;                     //將數(shù)據(jù)分開(kāi)然后分別顯示
                shi=dat%100/10;
                bai=dat%1000/100;
                qian=dat%10000/1000;
                wan=dat%100000/10000;
                shiwan=dat%1000000/100000;
                baiwan=dat%10000000/1000000;
                qianwan=dat%100000000/10000000;


                leddisplay(7,ge);
                if(shi|bai|qian|wan|shiwan|baiwan|qianwan)leddisplay(6,shi);
                if(bai|qian|wan|shiwan|baiwan|qianwan)leddisplay(5,bai);
                if(qian|wan|shiwan|baiwan|qianwan)leddisplay(4,qian);
                if(wan|shiwan|baiwan|qianwan)leddisplay(3,wan);
                if(shiwan|baiwan|qianwan)leddisplay(2,shiwan);
                if(baiwan|qianwan)leddisplay(1,baiwan);
                if(qianwan)leddisplay(0,qianwan);

                //P0=0xff;
        }
        //else P0=0x00;
}

void calculate_handle(void)//計(jì)算大函數(shù)。。
{
        if(checkok)//如果檢測(cè)鍵值完萬(wàn)。。則執(zhí)行以下。。
        {
                checkok=0;//檢測(cè)完標(biāo)志清零..
                switch (keynum)//如果是+,-,*,/,=則進(jìn)入相應(yīng)的函數(shù)。。
                {
                        case 10 : add(); break;    //如果是按了"+",則進(jìn)入加法函數(shù)。
                        case 11 : sub(); break;    //如果是按了"-",則進(jìn)入加法函數(shù)。
                        case 12 : mul(); break;    //如果是按了"*",則進(jìn)入加法函數(shù)。
                        case 13 : div(); break;    //如果是按了"/",則進(jìn)入加法函數(shù)。
                        case 14 : equ(); break;    //如果是按了"=",則進(jìn)入加法函數(shù)。
                        default : datpros();       //如果不是,計(jì)算符(即為數(shù)字),則進(jìn)入數(shù)據(jù)處理函數(shù)。
                }
        }
}

void main(void)
{

//                DUAN=1;
//                P0=0;
//                DUAN=0;
//                WEI=1;
//                P0=0xc0;
//                WEI=0;
        //P0=0xff;
        while(1)
        {
                scankeyboard();   
                checkkeycode();
                calculate_handle();
                display();

        }
}


DB-51 Ver2.1原理圖.pdf

78.8 KB, 下載次數(shù): 10

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:101959 發(fā)表于 2016-5-16 10:32 | 只看該作者
#include "STC89C5xRC.h" #include<intrins.h> #define uint8 unsigned char #define uint unsigned int #define uchar unsigned char #define uint unsigned int #define ulong unsigned long  uchar code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0};  ulong dat;       //數(shù)據(jù) ulong datA;      //過(guò)度數(shù)據(jù) uchar addflag;   //加法標(biāo)志位 uchar subflag;   //減法標(biāo)志位 uchar mulflag;   //乘法標(biāo)志位 uchar divflag;   //除法標(biāo)志位 uchar overflow;  //溢出標(biāo)志位 uchar clrflag;   //數(shù)據(jù)處理標(biāo)志位 uchar illegal;   //除法的非法標(biāo)志位  uchar keynum;    //按鍵鍵值 uchar keycode;   //按鍵IO口狀態(tài)值     uchar scanok;    //IO口掃描結(jié)束 uchar checkok;   //鍵值獲取結(jié)束   sbit DUAN       = P2^6;     //74HC573的LE端    LED的段選端 sbit WEI        = P2^7;     //74HC573的LE端    LED的位選端 sbit BUZZER     = P2^3;   void delay_ms(uint z)                      //1ms的延時(shí)函數(shù)     {         uchar x,y;         for(x=z;x>0;x--)         for(y=110;y>0;y--); }   void wei_1(uchar wei) {         P0=wei;         WEI=1;         WEI=0; }  void duan_1(uchar duan) {         uint i;         P0=table[duan];             DUAN=1;         DUAN=0;         for(i=25;i>0;i--);          P0=0;             DUAN=1;         DUAN=0;      for(i=50;i>0;i--);       //以上4行是消隱,如果不加其他數(shù)碼                                                         //        管會(huì)有暗亮非常難看 }  void leddisplay(uchar n,uchar value) {             wei_1(_crol_(0xfe,n));         duan_1(value);  }  void  scankeyboard()                  //scankeyboard()函數(shù)(用于掃描鍵值) {                                     //反轉(zhuǎn)法測(cè)鍵值。。。         uchar a,b; //                        P3=0xfe; //                        keycode=P3; //                        keycode=keycode&0xf0; //                        while(keycode!=0xf0) //                        { //                                        delay_ms(5); //                                        keycode=P3; ////                                        a=keycode; ////                                        P3 = 0xF0; ////                                        b = P3;  //                                        keycode=keycode&0xf0; //                                        while(keycode!=0xf0) //                                        { //                                                keycode=P3; //                                                 BUZZER = 0; //                                                 delay_ms(500); //                                                 //                                        while(keycode!=0xf0) //                                                { //                                                        keycode=P3; //                                                        keycode=keycode&0xf0; //                                                        P0=keycode; //                                                        scanok=1; //                                                        BUZZER = 1; //                                                } //                                        } //                                } //                        P3=0xfd; //                        keycode=P3; //                        keycode=keycode&0xf0; //                        while(keycode!=0xf0) //                        { //                                        delay_ms(5); //                                        keycode=P3; ////                                        a=keycode; ////                                        P3 = 0xF0; ////                                        b = P3;  //                                        keycode=keycode&0xf0; //                                        while(keycode!=0xf0) //                                        { //                                                keycode=P3; //                                                 BUZZER = 0; //                                                 delay_ms(500); //                                                 //                                        while(keycode!=0xf0) //                                                { //                                                        keycode=P3; //                                                        keycode=keycode&0xf0; //                                                        P0=keycode; //                                                        scanok=1; //                                                        BUZZER = 1; //                                                } //                                        } //                                } //                        P3=0xfb; //                        keycode=P3; //                        keycode=keycode&0xf0; //                        while(keycode!=0xf0) //                        { //                                        delay_ms(5); //                                        keycode=P3; ////                                        a=keycode; ////                                        P3 = 0xF0; ////                                        b = P3;  //                                        keycode=keycode&0xf0; //                                        while(keycode!=0xf0) //                                        { //                                                keycode=P3; //                                                 BUZZER = 0; //                                                 delay_ms(500); //                                                 //                                        while(keycode!=0xf0) //                                                { //                                                        keycode=P3; //                                                        keycode=keycode&0xf0; //                                                        P0=keycode; //                                                        scanok=1; //                                                        BUZZER = 1; //                                                } //                                        } //                                } //                        P3=0xf7; //                        keycode=P3; //                        keycode=keycode&0xf0; //                        while(keycode!=0xf0) //                        { //                                        delay_ms(5); //                                        keycode=P3; ////                                        a=keycode; ////                                        P3 = 0xF0; ////                                        b = P3;  //                                        keycode=keycode&0xf0; //                                        while(keycode!=0xf0) //                                        { //                                                P0=keycode; //                                                scanok=1; //                                                 BUZZER = 0; //                                                 delay_ms(500); //                                                 //                                        while(keycode!=0xf0) //                                                { //                                                        keycode=P3; //                                                        keycode=keycode&0xf0; //                                                         //                                                        BUZZER = 1; //                                                } //                                        } //                                }         P3=0xfe;                              keycode=P3;                 keycode=keycode&0xf0;         if(keycode!=0xf0)         {             delay_ms(10);                 //按鍵閉合消抖。。                 a=keycode;                 P3=0xf0;                 b=P3;                 keycode=a|b;                                  BUZZER = 0;                                 delay_ms(500);                 while(P3!=0xf0);                 delay_ms(10);//按鍵釋放消抖。。                 P0=keycode;                 scanok=1;//鍵值測(cè)完后。。scanok置1。。。                                 BUZZER = 1;         } }  void checkkeycode(void)        {         if(scanok)                                //如果鍵值測(cè)完后,則執(zhí)行以下。。。         {                 scanok=0;                             //scanok清零。。為下次使用準(zhǔn)備                 switch(keycode)                       //用開(kāi)關(guān)語(yǔ)句查找鍵值對(duì)應(yīng)的邏輯功能...                 {                         case 0xee: keynum=0  ;break;  //數(shù)字鍵                         case 0xde: keynum=1  ;break;                         case 0xbe: keynum=2  ;break;                         case 0x7e: keynum=3  ;break;                         case 0xeb: keynum=4  ;break;                         case 0xdb: keynum=5  ;break;                         case 0xbb: keynum=6  ;break;                         case 0xe7: keynum=7  ;break;                         case 0xd7: keynum=8  ;break;                         case 0xb7: keynum=9  ;break;                         case 0x77: keynum=10 ;break;   // +                         case 0x7b: keynum=11 ;break;   // -                         case 0x7d: keynum=12 ;break;   // *                         case 0x7a: keynum=13 ;break;   // /                         case 0xba: keynum=14 ;break;   // =                         case 0xda: keynum=15 ;break;   //清零                                                  //0C=/                         //123*                         //456-                         //789+                 }                 checkok=1;                         //查完后,checkok置1.         } }  void datpros(void)//數(shù)據(jù)處理函數(shù)。。 {         if(keynum==15)//如果是15  則認(rèn)為是清零的  進(jìn)行清零         {                 dat=0;         }         else        //否則則認(rèn)為是數(shù)字鍵 進(jìn)行顯示 存貯 并運(yùn)算         {                 if(clrflag)//清除標(biāo)志為1,則執(zhí)行以下。                 {                                 dat=0;                         clrflag=0;//為下次使用準(zhǔn)備。                 }                 dat=dat*10+(ulong)keynum;     //將每次按的數(shù)字合成一個(gè)整體。。比如按下"1","2","3"后就會(huì)把它合成"123"                 if(dat>1000000000) overflow=1; //如果輸入值大于65535(所用的為int型數(shù)據(jù),最大為65535)的話則溢出標(biāo)志置1,可供顯示程序查詢并顯示"EEEEEEE"                 if(divflag&&!dat) illegal=1;   //如果做除法時(shí)除了零,則非法標(biāo)志置1,供顯示程序查詢         } }  void add(void)//加法計(jì)算 {         addflag++;                          //加法標(biāo)志置1。。。         subflag=mulflag=divflag=0;          //將其它運(yùn)算標(biāo)志清零。。(一次只能作一種運(yùn)算)         clrflag=1;                          //清零標(biāo)標(biāo)置1,(當(dāng)按下加號(hào)后,再按第二個(gè)加數(shù)時(shí),這時(shí)應(yīng)該顯示第二加數(shù)。。所以要清掉第一個(gè)加數(shù)。)         if(addflag>1)                       //此處用于邊加。。         {                                   //當(dāng)連續(xù)加的時(shí)候。。加號(hào)應(yīng)有等于的功能。。                 dat=dat+datA;                   //算出和                 datA=dat;                       //和保存,用于下一次連加。。         }                                   //說(shuō)明:比如進(jìn)行"1+2+3"時(shí),當(dāng)按第二個(gè)加時(shí),應(yīng)該要顯示1+2的和。。         else datA=dat;                      //如果不是連加,將輸入的第一個(gè)加數(shù)暫存。。(因?yàn)轱@示程序只顯示dat變量的值。)  }  void sub(void) //減法計(jì)算 {         subflag++;         addflag=mulflag=divflag=0;         clrflag=1;         if(subflag>1)                //連減。。         {                 dat=datA-dat;                 datA=dat;         }         else datA=dat; }  void mul(void)//乘法計(jì)算 {         mulflag++;         addflag=subflag=divflag=0;         clrflag=1;         if(mulflag>1)                //連乘         {                 dat=datA*dat;                 datA=dat;         }         else datA=dat;  }  void div(void)        //除法計(jì)算 {         divflag++;         addflag=subflag=mulflag=0;         clrflag=1;         if(divflag>1)         {                 dat=datA/dat;                 datA=dat;         }         else datA=dat; }  void equ(void)          //等于計(jì)算 {                  if(addflag)                           //如果些時(shí)做加法運(yùn)算。。         {                 dat=dat+datA;                     //計(jì)算各存入dat(顯示程序會(huì)將dat顯示的。。)         }                 if(subflag)         {                 dat=datA-dat;         }         if(mulflag)         {                 dat=datA*dat;         }         if(divflag)         {                 dat=datA/dat;         }         addflag=subflag=mulflag=divflag=0;    //運(yùn)算一次完成后將所有運(yùn)標(biāo)志清零。為下次運(yùn)算作準(zhǔn)備。。 }  void display(void) {         uchar ge=0,shi=0,bai=0,qian=0,wan=0,shiwan=0,baiwan=0,qianwan=0;                  if(!overflow&&!illegal)         {                  ge=dat%10;                     //將數(shù)據(jù)分開(kāi)然后分別顯示                 shi=dat%100/10;                 bai=dat%1000/100;                 qian=dat%10000/1000;                 wan=dat%100000/10000;                 shiwan=dat%1000000/100000;                 baiwan=dat%10000000/1000000;                 qianwan=dat%100000000/10000000;                                                   leddisplay(7,ge);                 if(shi|bai|qian|wan|shiwan|baiwan|qianwan)leddisplay(6,shi);                 if(bai|qian|wan|shiwan|baiwan|qianwan)leddisplay(5,bai);                 if(qian|wan|shiwan|baiwan|qianwan)leddisplay(4,qian);                 if(wan|shiwan|baiwan|qianwan)leddisplay(3,wan);                 if(shiwan|baiwan|qianwan)leddisplay(2,shiwan);                 if(baiwan|qianwan)leddisplay(1,baiwan);                 if(qianwan)leddisplay(0,qianwan);                                  //P0=0xff;         }         //else P0=0x00;  }   void calculate_handle(void)//計(jì)算大函數(shù)。。 {         if(checkok)//如果檢測(cè)鍵值完萬(wàn)。。則執(zhí)行以下。。         {                 checkok=0;//檢測(cè)完標(biāo)志清零..                 switch (keynum)//如果是+,-,*,/,=則進(jìn)入相應(yīng)的函數(shù)。。                 {                         case 10 : add(); break;    //如果是按了"+",則進(jìn)入加法函數(shù)。                         case 11 : sub(); break;    //如果是按了"-",則進(jìn)入加法函數(shù)。                         case 12 : mul(); break;    //如果是按了"*",則進(jìn)入加法函數(shù)。                         case 13 : div(); break;    //如果是按了"/",則進(jìn)入加法函數(shù)。                         case 14 : equ(); break;    //如果是按了"=",則進(jìn)入加法函數(shù)。                         default : datpros();       //如果不是,計(jì)算符(即為數(shù)字),則進(jìn)入數(shù)據(jù)處理函數(shù)。                 }         } }  void main(void) {  //                DUAN=1; //                P0=0; //                DUAN=0; //                WEI=1; //                P0=0xc0; //                WEI=0;         //P0=0xff;         while(1)         {                 scankeyboard();                     checkkeycode();                 calculate_handle();                 display();                  } }
回復(fù)

使用道具 舉報(bào)

板凳
ID:101959 發(fā)表于 2016-5-16 10:45 | 只看該作者
求老師 同學(xué)們幫忙看看,就是數(shù)碼管沒(méi)有顯示。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表