找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1967|回复: 6
收起左侧

【我写了一个计算器的程序,但是似乎有点问题】

[复制链接]
ID:64402 发表于 2014-7-26 09:48 | 显示全部楼层 |阅读模式
求指导
回复

使用道具 举报

ID:64402 发表于 2014-7-26 09:48 | 显示全部楼层
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define duan   P0        //段选
#define wei    P2        //位选
#define key P1        //矩阵键盘
unsigned char n;
unsigned char s;
unsigned char shu;
unsigned char b;

void dispiay();//函数显示函数
void delayms(uint);//延时程序
char key_shu; //按键值
unsigned char code w[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选函数
unsigned char code d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar keydown()//定义按键值
{                                                                     
            unsigned char a=0;
               key=0xfe;
                if(key!=0xfe)
                {
                        switch(key)
                        {
                                case(0xee):        key_shu=1;break;
                                case(0xde):        key_shu=2;break;
                                case(0xbe): key_shu=3;break;
                                case(0x7e):        key_shu=10;break;
                        }
                 }
                       
                        key=0xfd;
                if(key!=0xfd)
                {
                        switch(key)
                        {
                                case(0xed):        key_shu=4;break;
                                case(0xdd):        key_shu=5;break;       
                                case(0xbd): key_shu=6;break;
                                case(0x7d):        key_shu=11;break;
                        }
                }
                   key=0xfb;
                if(key!=0xdf)
                {
                       
                        switch(key)
                        {
                                case(0xeb):        key_shu=7;break;
                                case(0xdb):        key_shu=8;break;       
                                case(0xbb): key_shu=9;break;
                                case(0x7b):        key_shu=12;break;
                        }
                }
                        key=0xf7;
                 if(key!=0xf7)
                 {
                        switch(key)
                        {
                                case(0xe7):        key_shu=0;break;
                                case(0xd7):        key_shu=15;break;       
                                case(0xb7): key_shu=13;break;
                                case(0x77):        key_shu=14;break;
                        }
                         
                 }
                        while((a<50) && (key!=0xf0))         //检测按键松手检测
                        {
                                delayms(1);
                                a++;
                        }
        return key_shu;
        }

void display()
{        
        while(1)
  {
        unsigned long int baiwan,qianwan,shiwan,wan,qian,bai,shi,ge;
       
       
        //keydown();
        //if(key_shu==1)
          //shu=987;
   //else
         //duan=0x00;
        //shu=key_shu;
       
   

        //shu=12345678;
     wei=w[7];
         duan=0x00;
     qianwan=shu/10000000;
         duan=d[qianwan];
         delayms(1);

         duan=0x00;
         wei=w[6];
         shu=shu%10000000;
         baiwan=shu/1000000;
         duan=d[baiwan];
         delayms(1);

         duan=0x00;
         wei=w[5];
         shu=shu%1000000;
         shiwan=shu/100000;
         duan=d[shiwan];
         delayms(1);

         duan=0x00;
         wei=w[4];
         shu=shu%100000;
         wan=shu/10000;
         duan=d[wan];
         delayms(1);

         duan=0x00;
         wei=w[3];
         shu=shu%10000;
         qian=shu/1000;
         duan=d[qian];
         delayms(1);

         duan=0x00;
         wei=w[2];
         shu=shu%1000;
         bai=shu/100;
         duan=d[bai];
         delayms(1);

         duan=0x00;
         wei=w[1];
         shu=shu%100;
         shi=shu/10;
         duan=d[shi];
         delayms(1);

            duan=0x00;
         wei=w[0];
         ge=shu%10;
         duan=d[ge];
         delayms(1);
                
        }
   }
void main()
{         
   n=0;

   while(1)
   {
      keydown();
          display();
          //shu=12345678;
   if((key_shu>=0)&&(key_shu<=9))
    { //n++;
         if(n==1)
         shu=key_shu;
         else if(n==2)
         shu=shu*10+key_shu;
         else if(n==3)
         shu=shu*100+key_shu;
         else if(n==4)
         shu=shu*1000+key_shu;
         else if(n==5)
         shu=shu*10000+key_shu;
         else if(n==6)
         shu=shu*100000+key_shu;
         else if(n==7)
         shu=shu*1000000+key_shu;
         else if(n==8)
         shu=shu*10000000+key_shu;

         key_shu=0;
         }
        if(key_shu==14)
        {b=shu;
         shu=0;
         n=0;
         }

         if(key_shu==10)
        {s=b+shu;
              }
     display();

        }

       
}


      
void delayms(uint xms)
  {
    uint i,j;
        for(i=xms;i>0;i--)
           for(j=110;j>0;j--);}
回复

使用道具 举报

ID:64402 发表于 2014-7-26 09:48 | 显示全部楼层
求大神帮忙修改一下
回复

使用道具 举报

ID:64402 发表于 2014-7-26 10:44 | 显示全部楼层
明白 发表于 2014-7-26 10:12
提问题,不明确。什么是“似乎有点问题”,究竟是有问题还是没有?
如果有问题,必须说出是什么样子,又要 ...

有问题,就是它的那个按键可以显示,但是不能进行运算,8个数码管只有一个数码管的数字会随着按键值的改变,只能显示各位,如果进行多位运算就不行
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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