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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1869|回復: 2
打印 上一主題 下一主題
收起左側

51單片機計算器程序求注釋

[復制鏈接]
跳轉到指定樓層
樓主
ID:951513 發表于 2021-7-10 14:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>
#include <intrins.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit DU=P2^6;
sbit WE=P2^7;
uchar code SMGduan[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
uchar code LED[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

int num;
int n1=0,n2=0;//數據傳遞的中間變量
uchar flag;//運算符號標志位
uchar F,T;//輸入負數的標志位
uchar j=0;//計算器開關標志位
uchar A=0;//儲存結果數組變量
uchar C=0;//讀取結果數組變量
int tabel5[20]={0};//計算器計算結果儲存數組
void delay(uint z)//延時函數
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=114;y>0;y--);
}

void display(int i)//顯示函數
{
        if(i>=0)
        {
                if(i<10)
                {
                        P0=0XFF;//數碼管清零,避免程序執行時混亂
                        WE=1;//打開位選
                        P0=0XFE;//點亮第二位數碼管
                        WE=0;關閉位選
                        DU=1;打開段選
                        P0=SMGduan[ i];//從P0口輸出數字i的段碼
                        DU=0;//關閉段選
                        delay(8);//去抖動
                }
                if(i>=10&&i<99)
                {
                        P0=0XFF;
                        WE=1;
                        P0=0XFE;
                        WE=0;
                        DU=1;
                        P0=SMGduan[i/10];
                        DU=0;
                        delay(8);
                        P0=0XFF;
                        WE=1;
                        P0=0XFd;
                        WE=0;
                        DU=1;
                        P0=SMGduan[i%10];
                        DU=0;
                        delay(8);
                }
                if(i>=100&&i<999)
                {
                        P0=0XFF;
                        WE=1;
                        P0=0XFE;
                        WE=0;
                        DU=1;
                        P0=SMGduan[i/100];
                        DU=0;
                        delay(8);
                        P0=0XFF;
                        WE=1;
                        P0=0XFd;
                        WE=0;
                        DU=1;
                        P0=SMGduan[i%100/10];
                        DU=0;
                        delay(8);
                        P0=0XFF;
                        WE=1;
                        P0=0XFb;
                        WE=0;
                        DU=1;
                        P0=SMGduan[i%10];
                        DU=0;
                        delay(8);
                }
        }
        else
        {
                i=-i;
                if(i<9)
                {
                        P0=0XFF;
                        WE=1;
                        P0=0XFE;
                        WE=0;
                        DU=1;
                        P0=0x40;
                        DU=0;
                        delay(8);
                        P0=0XFF;
                        WE=1;
                        P0=0XFd;
                        WE=0;
                        DU=1;
                        P0=SMGduan[ i];
                        DU=0;
                        delay(8);
                }
                if(i>=10&&i<99)
                {
                        P0=0XFF;
                        WE=1;
                        P0=0XFe;
                        WE=0;
                        DU=1;
                        P0=0x40;
                        DU=0;
                        delay(8);
                        P0=0XFF;
                        WE=1;
                        P0=0XFd;
                        WE=0;
                        DU=1;
                        P0=SMGduan[i/10];
                        DU=0;
                        delay(8);
                        P0=0XFF;
                        WE=1;
                        P0=0XFb;
                        WE=0;
                        DU=1;
                        P0=SMGduan[i%10];
                        DU=0;
                        delay(8);
                }
                if(i>=100&&i<999)
                {
                        P0=0XFF;
                        WE=1;
                        P0=0XFe;
                        WE=0;
                        DU=1;
                        P0=0x40;
                        DU=0;
                        delay(8);
                        P0=0XFF;
                        WE=1;
                        P0=0XFd;
                        WE=0;
                        DU=1;
                        P0=SMGduan[i/100];
                        DU=0;
                        delay(8);
                        P0=0XFF;
                        WE=1;
                        P0=0XFb;
                        WE=0;
                        DU=1;
                        P0=SMGduan[i%100/10];
                        DU=0;
                        delay(8);
                        P0=0XFF;
                        WE=1;
                        P0=0XF7;
                        WE=0;
                        DU=1;
                        P0=SMGduan[i%10];
                        DU=0;
                        delay(8);
                }
        }
}
//也可以用中斷來實現

//矩陣鍵盤的掃描
void keyscan()
{
        uchar temp;
        P3=0XFF;
        P3=0XFE;
        temp=P3&0XF0;
        if(temp!=0xf0)
        {
                delay(20);
                P3=0XFE;
                temp=P3&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xee:
                                                        delay(20);
                                                
                                                        if(T==0)
                                                        {
                                                                n1=10*n1+7;num=n1;F=1;i++;break;
                                                        }
                                                        if(T==1)
                                                        {
                                                                n1=10*n1-7;num=n1;F=1;i++;break;
                                                        }        
                                case 0xde:         
                                                        delay(20);
                                                
                                                        if(T==0)
                                                        {
                                                                n1=10*n1+8;num=n1;F=1;i++;break;
                                                        }
                                                        if(T==1)
                                                        {
                                                                n1=10*n1-8;num=n1;F=1;i++;break;
                                                        }
                                case 0xbe:         
                                                        delay(20);
                                                
                                                        if(T==0)
                                                        {
                                                                n1=10*n1+9;num=n1;F=1;i++;break;
                                                        }
                                                        if(T==1)
                                                        {
                                                                n1=10*n1-9;num=n1;F=1;i++;break;
                                                        }
                                case 0x7e:
                                                        delay(20);
                                                
                                                        n2=n1;
                                                        n1=0;
                                                        flag=1;
                                                        WE=1;
                                                        P0=0XFF;
                                                        WE=0;
                                                        T=0;
                                                        F=0;
                                                        i++;
                                                        break;
                        }//+
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;
                        }
                        P3=0XFF;
                }
        }
        P3=0XFF;
        P3=0XFD;
        temp=P3&0xf0;
        if(temp!=0xf0)
        {
                delay(20);
                P3=0XFD;
                temp=P3&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xed:        
                                                        delay(20);
                                                
                                                        if(T==0)
                                                        {
                                                                n1=10*n1+4;num=n1;F=1;i++;break;
                                                        }
                                                        if(T==1)
                                                        {
                                                                n1=10*n1-4;num=n1;F=1;i++;break;
                                                        }
                                case 0xdd:         
                                                        delay(10);
                                                
                                                        if(T==0)
                                                        {
                                                                n1=10*n1+5;num=n1;F=1;i++;break;
                                                        }
                                                        if(T==1)
                                                        {
                                                                n1=10*n1-5;num=n1;F=1;i++;break;
                                                        }
                                case 0xbd:         
                                                        delay(20);
                                                        
                                                        if(T==0)
                                                        {
                                                                n1=10*n1+6;num=n1;F=1;i++;break;
                                                        }
                                                        if(T==1)
                                                        {
                                                                n1=10*n1-6;num=n1;F=1;i++;break;
                                                        }
                                case 0x7d:
                                                        delay(20);
                                                        
                                                    if(F==1)
                                                   {
                                                                n2=n1;
                                                                n1=0;
                                                                flag=2;
                                                                WE=1;
                                                                P0=0XFF;
                                                                WE=0;
                                                                T=0;
                                                                F=0;
                                                                i++;
                                                                break;
                                                        }//-
                                                        if(F==0)
                                                        {
                                                                T=1;
                                                                break;
                                                        }//負號                                       
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;
                        }
                        P3=0XFF;
                }
        }
        P3=0XFF;
        P3=0XFB;
        temp=P3&0xf0;
        if(temp!=0xf0)
        {
                delay(20);
                P3=0XFB;
                temp=P3&0XF0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xeb:
                                                        delay(20);
                                                
                                                        if(T==0)
                                                        {
                                                                n1=10*n1+1;num=n1;F=1;i++;break;
                                                        }
                                                        if(T==1)
                                                        {
                                                                n1=10*n1-1;num=n1;F=1;i++;break;
                                                        }
                                case 0xdb:
                                                        delay(20);
                                                
                                                        if(T==0)
                                                        {
                                                                n1=10*n1+2;num=n1;F=1;i++;break;
                                                        }
                                                        if(T==1)
                                                        {
                                                                n1=10*n1-2;num=n1;F=1;i++;break;
                                                        }
                                case 0xbb:         
                                                        delay(20);
                                                
                                                        if(T==0)
                                                        {
                                                                n1=10*n1+3;num=n1;F=1;i++;break;
                                                        }
                                                        if(T==1)
                                                        {
                                                                n1=10*n1-3;num=n1;F=1;i++;break;
                                                        }
                                case 0x7b:
                                                        delay(20);
                                                
                                                        n2=n1;
                                                        n1=0;
                                                        flag=3;
                                                        WE=1;
                                                        P0=0XFF;
                                                        WE=0;
                                                        T=0;
                                                        F=0;
                                                        i++;
                                                        break;
                        }//  X
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;
                        }
                        P3=0XFF;
                }
        }
        P3=0XFF;
        P3=0XF7;
        temp=P3&0xf0;
        if(temp!=0xf0)
        {
                delay(20);
                P3=0XF7;
                temp=P3&0xf7;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xe7:         
                                                        delay(20);
                                                
                                                        i++;
                                                        n1=n1/10;
                                                        num=n1;
                                                        break;
                                case 0xd7:         
                                                        delay(20);
                                                
                                                        if(T==0)
                                                        {
                                                                n1=10*n1;num=n1;F=1;i++;break;
                                                        }
                                                        if(T==1)                                       
                                                        {
                                                                n1=10*n1;num=n1;F=1;i++;break;
                                                        }
                                case 0xb7:
                                                        delay(20);
                                                
                                                        if(flag==1) num=n2+n1;        
                                                           if(flag==2) num=n2-n1;
                                                           if(flag==3) num=n2*n1;
                                                           if(flag==4) num=n2/n1;
                                                          n1=0;
                                                           WE=1;
                                                           P0=0XFF;
                                                          WE=0;
                                                           F=0;//一次計算完成后重置標志位
                                                           i++;
                                                           break;//=
                                case 0x77:
                                                        delay(20);
                                                
                                                        n2=n1;
                                                        n1=0;
                                                        flag=4;
                                                        WE=1;
                                                        P0=0XFF;
                                                        WE=0;
                                                        T=0;
                                                        F=0;
                                                        i++;
                                                        break;//÷
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;
                        }
                        P3=0XFF;
                }
        }
        P3=0XFF;
        if(P3==0XFB)
        {
                delay(20);
                if(P3==0XFB)
                {
                        tabel5[A]=num;
                        C=A;//將數組變量賦給讀取數組的變量
                        A++;
                        n1=0;
                        num=0;
                        if(A>9)
                        {
                                for(A=9;A>-1;A--)
                                {
                                        tabel5[A]=0;
                                }
                                A=0;
                        }//存滿后自動清零
                        while(P3==0XFB);
                }
        }
        if(P3==0XF7)
        {
                delay(20);
                if(P3==0XF7)
                {
                        num=tabel5[C];
                        C--;
                        while(P3==0XF7);
                }
        }                                
}
void keyscan1()//部分獨立鍵盤判斷
{
        if(P3==0XFE)
        {
                delay(10);
                if(P3==0XFE)
                {
                        j=1;
                        WE=1;
                        P0=0xFF;
                        WE=0;
                        num=0;
                        n1=0;
               
                        delay(20);
               
                        P1=0XFF;
                        while(P3==0XFE);
                }
        }
        P3=0XFF;
        if(P3==0XFD)
        {
                delay(20);
                if(P3==0XFD)
                {
                        j=0;
               
                        delay(20);
               
                        while(P3==0XFD);
                }
        }
}
void main()
{
        while(1)
        {
                if(j==1)
                {
                        keyscan1();
                }
                if(j==0)
                {        
                        keyscan();
                        display(num);
                        P1=LED[ i];
                        if(i>7)
                        {
                                i=0;
                        }
                        keyscan1();
                }
        }
}

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

使用道具 舉報

沙發
ID:584814 發表于 2021-7-12 08:08 | 只看該作者
原理上這個得找原作者,或者懸賞
回復

使用道具 舉報

板凳
ID:798631 發表于 2021-7-12 08:35 | 只看該作者
我一直認為看別人的程序不如自己編  尤其是應用程序
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级www片免费观看 | 亚洲成人三级 | 亚洲成av人片在线观看无码 | 一级黄色夫妻生活 | 逼逼视频 | 99久久久无码国产精品 | 日韩免费视频一区二区 | 成人一区av偷拍 | 高清亚洲 | 天天操天天拍 | 国产精品国产a级 | 四季久久免费一区二区三区四区 | 国产成人精品一区二区三区四区 | 伊人网91 | 一级毛片在线看 | 国产在线观| 国产精品永久免费观看 | a久久| 特级黄一级播放 | 国产区精品 | 亚洲人成网站777色婷婷 | 黄一区二区三区 | 日本不卡一区二区三区在线观看 | 一区二区三区免费 | 日本三级电影在线观看视频 | 欧美精品在线观看 | 二区久久 | 亚洲免费一| 亚洲精品久久久久久久久久久 | 日韩国产在线 | 综合色导航 | 亚洲不卡在线观看 | 亚洲精品久久久久久国产精华液 | a久久| 国产精品毛片久久久久久 | 99精品网站 | 精品久久一区 | 国产欧美视频一区 | 成人h视频 | 日韩中文一区 | 亚洲福利一区 |