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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

AT89S52單片機實現簡易計算器(C語言程序)

[復制鏈接]
跳轉到指定樓層
樓主
ID:82781 發表于 2015-6-13 19:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 xuwei 于 2015-6-13 19:50 編輯

硬件要求,矩陣鍵盤(4*4)、數碼管、52單片機最小系統及其連接。
鄙人不才,這個是BATE1.0測試版。(無法計算小數、負數、爆表數)

#include<reg52.h>
#include<intrins.h>
//sbit led=P2^0;
sbit duan=P2^1;
sbit wei=P2^2;
unsigned char code duanma[]={
        0xc0,//0
        0xf9,//1
        0xa4,//2
        0xb0,//3
        0x99,//4
        0x92,//5
        0x82,//6
        0xf8,//7
        0x80,//8
        0x90,//9
};
unsigned char dqxs[8]={0xc0,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
unsigned char num1[8],num2[8],dq=1,ysf=0,zt=0;//num1是被操作數,num為原操作數,dq是當前操作數,ysf是運算符保存,zt按鍵狀態;
unsigned char error=0;
void xianshishu()
{
        char i;
        if(dq==1)
        {
                for(i=7;i>0;i--)
                {
                if(num1[ i])
                break;
                dqxs[ i]=0xff;
                }
                while(i>=0)
                {        
                        dqxs[ i]=duanma[num1[ i]];
                        i--;
                }
        }
        if(dq==2)
        {
                for(i=7;i>0;i--)
                {
                if(num2[ i])
                break;
                dqxs[ i]=0xff;
                }
                while(i>=0)
                {        
                        dqxs[ i]=duanma[num2[ i]];
                        i--;
                }
        }
}
void xieshu(unsigned char a)
{
        int i;
        if(dq==1)
        {for(i=7;i>0;i--)
        num1[ i]=num1[i-1];
        num1[0]=a;
        }
        else if(dq==2)
        {
        for(i=7;i>0;i--)
        num2[ i]=num2[i-1];
        num2[0]=a;
        }
        xianshishu();
}
void delay()
{
        unsigned char a=255;
        while(a--);
}
void display()
{
        unsigned char x=0x01,i;
        for(i=0;i<8;i++)
        {
                P0=x;
                wei=1;
                wei=0;
                P0=dqxs[ i];
                duan=1;
                delay();
                P0=0xff;
                duan=0;
                x=_crol_(x,1);

        }
}
void yunsuan()
{
        unsigned char fs=0x7f;
        int i;
        long int a=0,b=0;
        if(ysf==0)
        return;        
        for(i=7;i>=0;i--)
        {
                a=a*10+num1[ i];
                b=b*10+num2[ i];
        }
        switch(ysf)
        {
                case 1:a+=b;break;
                case 2:a-=b;break;
                case 3:a*=b;break;
                case 4:a/=b;break;
        }
        /*P0=0x00;
        wei=1;
        wei=0;
        led=1;
        for(i=0;i<8;i++)
        {
                P0=fs;
            delay();delay();delay();delay();delay();delay();delay();delay();delay();delay();delay();
                   fs=_cror_(fs,1);
        }
        P0=0xff;
        led=0;
        */
        if(a>=100000000||a<0)
        {
                dqxs[0]=0x84;
                for(i=1;i<8;i++)
                dqxs[ i]=0xff;
                error=1;
        }
        else
        {
                for(i=0;i<8;i++)
                {
                        num1[ i]=a%10;
                        a/=10;
                }
                dq=1;
                xianshishu();
        }
}
main()//主函數除了顯示啥都不用干,Jibs程序就是這么牛逼
{
        //led=0;
        EA=1;
        ET0=1;
        TMOD=0x02;
        TH0=0;
        TL0=0;
        TR0=1;
        while(1)
        display();
}
void t0() interrupt 1
{
        unsigned char h=0,l=0,i;
        P1=0x0f;
        if(zt)
        {
                if(P1==0x0f)
                zt=0;
                return;
        }
        else
        {
                if(P1!=0x0f)
                {
                        zt=1;
                        switch(P1)
                        {
                                case 0x0e:h=1;break;
                                case 0x0d:h=2;break;
                                case 0x0b:h=3;break;
                                case 0x07:h=4;break;                                
                        }
                        P1=0xf0;
                        switch(P1)
                        {
                                case 0xe0:l=1;break;
                                case 0xd0:l=2;break;
                                case 0xb0:l=3;break;
                                case 0x70:l=4;break;
                        }
                        if(h==1)
                        {
                                switch(l)
                                {
                                        case 1:if(error)break;xieshu(1);break;
                                        case 2:if(error)break;xieshu(2);break;
                                        case 3:if(error)break;xieshu(3);break;
                                        case 4:if(error)break;ysf=1;dq=2;for(i=0;i<8;i++)num2[ i]=0;break;
                                }
                        }
                        else if(h==2)
                        {
                                switch(l)
                                {
                                        case 1:if(error)break;xieshu(4);break;
                                        case 2:if(error)break;xieshu(5);break;
                                        case 3:if(error)break;xieshu(6);break;
                                        case 4:if(error)break;ysf=2;dq=2;for(i=0;i<8;i++)num2[ i]=0;break;
                                }
                        }
                        else if(h==3)
                        {
                                switch(l)
                                {
                                        case 1:if(error)break;xieshu(7);break;
                                        case 2:if(error)break;xieshu(8);break;
                                        case 3:if(error)break;xieshu(9);break;
                                        case 4:if(error)break;ysf=3;dq=2;for(i=0;i<8;i++)num2[ i]=0;break;
                                }
                        }
                        else if(h==4)
                        {
                                switch(l)
                                {
                                        case 1:ysf=0;dq=1;error=0;
                                                for(i=0;i<8;i++)
                                                {        num1[ i]=0;
                                                        num2[ i]=0;
                                                }
                                                xianshishu();
                                                        break;
                                        case 2:if(error)break;xieshu(0);break;
                                        case 3:if(error)break;yunsuan();break;
                                        case 4:if(error)break;ysf=4;dq=2;for(i=0;i<8;i++)num2[ i]=0;break;
                                }
                        }
                }
               
        }

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩国产一区 | 91精品欧美久久久久久久 | 91偷拍精品一区二区三区 | 日韩中文字幕在线视频 | 免费一区二区三区 | 国产午夜三级一区二区三 | 在线国产视频 | 欧美一级毛片免费观看 | 中文二区 | 国产一区久久久 | 99自拍视频 | 日本特黄a级高清免费大片 特黄色一级毛片 | www国产成人免费观看视频,深夜成人网 | 精品日韩 | 久久国产亚洲 | 黄色免费观看网站 | 亚洲福利 | 亚洲精品在线免费观看视频 | 国产精品色 | 欧美www在线观看 | 欧美一级黄色片在线观看 | 欧美久久久久久久久 | 国产婷婷色综合av蜜臀av | 男人阁久久 | 亚洲精品久久区二区三区蜜桃臀 | 97超级碰碰 | 日韩欧美一区二区三区 | 日韩成人中文字幕 | 亚洲二区在线 | 日本不卡免费新一二三区 | 国产精品一区二区三区免费观看 | 国外成人在线视频 | 日韩成人在线观看 | 欧美一级特黄aaa大片在线观看 | 国产欧美日韩精品在线观看 | 国产一级一级毛片 | 亚洲av一级毛片 | 亚洲精品一区中文字幕乱码 | 黄色在线观看网站 | 亚洲精品电影在线观看 | www午夜视频|