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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8464|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美中文日韩在线v日本 | 成人在线观看免费 | 九九九色 | 欧美一区二区三区免费在线观看 | 999久久久久久久久 国产欧美在线观看 | 久久91av| 超碰免费在| 国产一区二区高清在线 | 国产a一区二区 | 黄页网址在线观看 | 在线观看成人 | xxx视频 | 亚洲一区二区三区四区五区午夜 | 少妇精品久久久久久久久久 | 久久亚洲一区 | 国产精品久久久久久久久免费高清 | 亚洲网站在线播放 | 午夜精品久久 | 亚洲一区二区在线播放 | 久久亚洲一区 | 午夜国产一级 | 成人av片在线观看 | 91久久久久久 | 久久久久国产精品一区二区 | 日本成人午夜影院 | av大片 | 日韩视频在线观看一区二区 | 99re在线 | 欧美综合一区 | 精品日韩一区二区 | 国产成人福利在线 | 成人国产在线视频 | 国产精品免费一区二区三区 | 精品久久久久久久久久久下田 | 久久精品av | 欧美日韩亚 | 人人干人人干人人 | 密室大逃脱第六季大神版在线观看 | 激情 婷婷 | 久久机热 | 国产午夜在线观看 |