找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1322|回复: 0
收起左侧

51单片机计算器

[复制链接]
ID:887474 发表于 2021-3-2 15:41 | 显示全部楼层 |阅读模式
#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
u8 code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
u8 dis[8]={10,10,10,10,10,10,10,10};
sbit c0=P3^4;
sbit c1=P3^5;
sbit c2=P3^6;
sbit c3=P3^7;
u16 zt=0,bz,ajbz,axbz;
u32 bjs;
u32 js;
u32 sz;
u8 sx[8];
u16 zy;
void delay(u8 z)
{
        while(z--);
}
void display()
{
        u8 a=0;
        for(;a<8;a++)
        {
                P2=1<<a;
                P0=table[dis[a]];
                delay(50);
                P0=0xff;
        }
}
void qp()
{
        u8 a=0;
        for(;a<8;a++)
        {
                dis[a]=10;
        }
}
u8 ajjc()
{
        u8 a;
        for(a=0xff,P3=0xfe;P3!=0xef;P3=P3<<1|1)
        {
                a++;if(!c0)break;
                a++;if(!c1)break;
                a++;if(!c2)break;
                a++;if(!c3)break;
        }
        P3=0xf0;
        if(c0&c1&c2&c3)return 0xff;
        while(!(c0&c1&c2&c3));
        return a;
}
void ajpd()
{
        u8 a;
        a=ajjc();
        if(a<10)
        {
                        if(zt==0&&ajbz<8)
                        {
                                dis[ajbz]=a;
                                ajbz++;
                                bjs=bjs*10+a;
                        }
//                        if(zt==0)
//                        {
//                                bjs=bjs*10+a;
//                        }
                        else if(zt==1&&axbz<8)
                        {
                                dis[axbz]=a;
                                axbz++;
                                js=js*10+a;
                        }
//                        else if(zt==0)
//                        {
//                                js=js*10+a;               
//                        }
        }       
        else
        {
                switch(a)
                {
                        case 10:
                                qp();
                                zt=1;
                                bz=1;
                                break;
                        case 11:
                                qp();
                                zt=1;
                                bz=2;
                                break;
                        case 12:
                                qp();
                                zt=1;
                                bz=3;
                                break;
                        case 13:
                                qp();
                                zt=1;
                                bz=4;
                                break;
                        case 14:
                                qp();
                                if(zt==1&&bz==1)
                                {
                                        zt=2;
                                        sz=bjs+js;
                                }
                                else if(zt==1&&bz==2)
                                {
                                        zt=2;
                                        sz=bjs-js;
                                }
                                else if(zt==1&&bz==3)
                                {
                                        zt=2;
                                        sz=bjs*js;
                                }
                                else if(zt==1&&bz==4)
                                {
                                        zt=2;
                                        sz=bjs/js;
                                }
                                break;
                        case 15:
                                zt=0;
                                bjs=0;
                                js=0;
                                sz=0;
                                ajbz=axbz=0;
                                qp();
                                break;
                }
        }               
}
//void change(u8 c)
//{
//        u8 i;
//        if(c==0xff) return;
//        for(i=0;i<7;i++)
//        {
//                dis[i]=dis[i+1];
//        }
//        dis[7]=c;
//}
void xs()
{
        switch(zt)
        {
                case 0:
                        break;
                case 1:
//                        qp();
                        break;
                case 2:
//                        dis[0]=sz/10000000;
//                        dis[1]=(sz%10000000)/1000000;
//                        dis[2]=(sz%1000000)/100000;
//                        dis[3]=(sz%100000)/10000;
//                        dis[4]=(sz%10000)/1000;
//                        dis[5]=(sz%1000)/100;
//                        dis[6]=(sz%100)/10;
//                        dis[7]=sz%10;
                        if(sz<10)
                        {
                                dis[7]=sz;
                                dis[0]=dis[1]=dis[2]=dis[3]=dis[4]=dis[5]=dis[6]=10;
                        }
                        else if(sz<100)
                        {
                                dis[6]=sz/10;
                                dis[7]=sz%10;
                                dis[0]=dis[1]=dis[2]=dis[3]=dis[4]=dis[5]=10;
                        }
                        else if(sz<1000)
                        {
                                dis[0]=dis[1]=dis[2]=dis[3]=dis[4]=10;
                                dis[5]=sz/100;
                                dis[6]=sz%100/10;
                                dis[7]=sz%10;
                        }
                        else if(sz<10000)
                        {
                                dis[0]=dis[1]=dis[2]=dis[3]=10;
                                dis[4]=sz/1000;
                                dis[5]=sz%1000/100;
                                dis[6]=sz%100/10;
                                dis[7]=sz%10;
                        }
                        else if(sz<100000)
                        {
                                dis[0]=dis[1]=dis[2]=10;
                                dis[3]=sz/10000;
                                dis[4]=sz%10000/1000;
                                dis[5]=sz%1000/100;
                                dis[6]=sz%100/10;
                                dis[7]=sz%10;
                        }
                        else if(sz<1000000)
                        {
                                dis[0]=dis[1]=10;
                                dis[2]=sz/100000;
                                dis[3]=sz%100000/10000;
                                dis[4]=sz%10000/1000;
                                dis[5]=sz%1000/100;
                                dis[6]=sz%100/10;
                                dis[7]=sz%10;
                        }
                        else if(sz<10000000)
                        {
                                dis[0]=10;
                                dis[1]=sz/1000000;
                                dis[2]=sz%1000000/100000;
                                dis[3]=sz%100000/10000;
                                dis[4]=sz%10000/1000;
                                dis[5]=sz%1000/100;
                                dis[6]=sz%100/10;
                                dis[7]=sz%10;
                        }
                        else if(sz<100000000)
                        {
                                dis[0]=sz/10000000;
                                dis[1]=sz%10000000/1000000;
                                dis[2]=sz%1000000/100000;
                                dis[3]=sz%100000/10000;
                                dis[4]=sz%10000/1000;
                                dis[5]=sz%1000/100;
                                dis[6]=sz%100/10;
                                dis[7]=sz%10;
                        }
//                dis[6]=sz/10;
//                dis[7]=sz%10;
                        break;
        }
//        switch(zt)
//        {
//                case 0:
//                        change(bjs);
//               
//                        break;
//                case 1:
//                        dis[1]=0;
//                        break;
//                case 2:
//                        dis[2]=2;
//                        break;
//        }
}
// void init()
//{
//        TMOD=1;
//        TH0=(65536-1000)/256;
//        TL0=(65536-1000)%256;
//        TR0=1;
//        EA=ET0=1;
//}
void main()
{       
//        u8 i,z;
//        init();
        while(1)
        {       
                display();
                ajpd();       
                xs();
               
//        if(ajbz==0xff) return;
//        switch(zt)
//        {
//                case 0:
//                        for(i=0;i<7;i++)
//                        {
//                                dis[i]=dis[i+1];
//                        }
//                        dis[7]=ajbz;
//                        break;
//                case 1:
//                        for(z=0;z<7;z++)
//                        {
//                                dis[z]=dis[z+1];
//                        }
//                        dis[7]=ajbz;
//                        break;
//                case 2:
//                        dis[0]=sz/10000000;
//                        dis[1]=(sz%10000000)/1000000;
//                        dis[2]=(sz%1000000)/100000;
//                        dis[3]=(sz%100000)/10000;
//                        dis[4]=(sz%10000)/1000;
//                        dis[5]=(sz%1000)/100;
//                        dis[6]=(sz%100)/10;
//                        dis[7]=sz%10;
//                        break;
//        }
//                xs();+
        }
}
void shi()interrupt 1
{
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
//        change(ajjc());
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表