找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1506|回复: 0
打印 上一主题 下一主题
收起左侧

单片机数码管显示的简易计算器 按下键后数码管没反应 求帮助

[复制链接]
跳转到指定楼层
楼主
ID:470938 发表于 2019-2-15 18:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么这个用数码管显示的简易计算器程序无法显示,按下键后数码管没反应,按等号直接显示235
求各位大佬救急
/*
    1 2 3 *
    4 5 6 /
    7 8 9 无
    + 0 - =  
*/
#include<reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit LS1=P2^2;
sbit LS2=P2^3;
sbit LS3=P2^4;
uint key,flag=0,x1=0,y1=0,x=10,a=0,b=0,fuhao=0,answer=0,m_1=0,m_2=0,m_3=0,m_4=0;

char led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };

void delay_ms(uint time)
{
        int i,j;
        for(i=0;i<100;i++)
        {
                for(j=0;j<time;j++);
        }
}

void output(uint answer,uint a//显示函数
{
        if(answer>=0&&answer<=9)
                        {
                                LS1=0;
                                LS2=0;
                                LS3=0;
                                while(1)
                                {
                                        P0=led[answer];
                                        if(a==1)
                                                break;
                                }
                        }                 
                        if(answer>=10&&answer<=99)
                        {
                                m_1=answer%10;
                                m_2=answer/10;
                                while(1)
                                {
                                        LS1=0;LS2=0;LS3=0;
                                        P0=led[m_1];
                                        delay_ms(1);
                                        LS2=0;
                                        P0=led[m_2];
                                        delay_ms(1);
                                        if(a==1)
                                                break;
                                }
                        }
                           if(answer>=100&&answer<=999)
                        {
                                m_1=answer%10;
                                m_3=answer/100;
                                m_2=(answer-m_3*100)/10;
                                while(1)
                                {
                                        LS1=0;LS2=0;LS3=0;
                                        P0=led[m_1];
                                        delay_ms(1);
                                        LS1=1;LS2=0;LS3=0;
                                        P0=led[m_2];
                                        delay_ms(1);
                                        LS1=0;LS2=1;LS3=0;
                                        P0=led[m_3];
                                        delay_ms(1);
                                        if(a==1)
                                                break;
                                }
                        }
                        if(answer>=1000&&answer<=9999)
                        {
                                m_1=answer%10;
                                m_2=(answer/100)%10;
                                m_4=answer/1000;
                                m_3=(answer-m_4*1000)/100;
                                while(1)
                                {
                                        LS1=0;LS2=0;LS3=0;
                                        P0=led[m_1];
                                        delay_ms(1);
                                        LS1=1;LS2=0;LS3=0;
                                        P0=led[m_2];
                                        delay_ms(1);
                                        LS1=0;LS2=1;LS3=0;
                                        P0=led[m_3];
                                        delay_ms(1);
                                        LS1=1;LS2=1;LS3=0;
                                        P0=led[m_4];
                                        delay_ms(1);
                                        if(a==1)
                                                break;
                                }
                        }
}

void computer()
{
        P1=0xf0;
        if(P1!=0xf0)
        {
                delay_ms(100);
                a=P1;
        }
        P1=0x0f;
        if(P1!=0x0f)
        {
                b=P1;
                key=a|b;
        }
        switch(key)
        {
                case 0x77:x=1;flag=0;break;
                case 0x7b:x=2;flag=0;break;
                case 0x7d:x=3;flag=0;break;
                case 0xb7:x=4;flag=0;break;
                case 0xbb:x=5;flag=0;break;
                case 0xbd:x=6;flag=0;break;
                case 0xd7:x=7;flag=0;break;
                   case 0xdb:x=8;flag=0;break;
                case 0xdd:x=9;flag=0;break;
                case 0xeb:x=0;flag=0;break;
                case 0xe7:fuhao=1;break;// +
                case 0xed:fuhao=2;break;// -
                case 0xbe:fuhao=3;break;// *
                case 0xde:fuhao=4;break;// /
                case 0xee:
                                 
                                  if(fuhao==1)
                                  {
                                          answer=a+b;
                                        output(answer,0);        
                                  }
                                  if(fuhao==2)
                                  {
                                          answer=a-b;
                                        output(answer,0);        
                                  }
                                  if(fuhao==3)
                                  {
                                          answer=a*b;
                                        output(answer,0);        
                                  }
                                  if(fuhao==4)
                                  {
                                          answer=a/b;
                                        output(answer,0);        
                                  }
                              break;// =
        }//扫描出键的值        
        if(x>=0&&x<=9)
        {
                if(flag==0)         //没有按下符号键
                {
                        a=a*10+x;        
                        output(a,1);
                }
                else
                {
                        b=b*10+x;
                        output(b,1);
                }                        
        }
        else
        {
                flag=1;
        }
}


void main()
{
        while(1)
        {
                computer();
        }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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