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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8502|回復: 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;
                                }
                        }
                }
               
        }

        
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九九九久久久 | 69国产精品 | 一个色综合网 | 婷婷国产 | 久久99深爱久久99精品 | 日韩性生活视频 | 国产在线视频一区二区 | 欧美91 | 国产精品第一区 | 精品第一页| 欧美综合久久 | 国产成人午夜 | 日韩欧美中文在线 | 天天精品 | 日本成人免费 | 亚洲第一毛片 | 深夜福利影院 | 亚洲福利视频一区 | 国产在线h | 国产免费一区二区三区最新不卡 | 黄色免费网站视频 | 国产午夜三级 | 欧美精品自拍 | 蜜桃视频一区二区 | 国产视频成人 | 欧美中文字幕在线观看 | 国产一级在线播放 | 成年免费视频黄网站在线观看 | 欧美精品二区三区四区免费看视频 | 在线观看的av网站 | 伊人操 | 日韩免费一区二区 | 91精品久久久久 | 国产精品一区二区三区四区 | 99精品视频在线 | 自拍偷拍第五页 | 精品乱子伦一区二区三区 | 夜夜夜夜操 | 狠狠操夜夜操 | 人人干人人艹 | av在线播放网站 |