第九天实训

今日学习任务

1.讲解昨天的按键输入十进制数,用LED灯显示

2.数码管共阴共阳的区别

3.通过锁存器控制数码管

今日任务完成情况

 

(详细说明本日任务是否按计划完成,开发的代码量)

1.用数码管显示一个0到9得数

2.将0到5显示在6个数码管上

3.配合锁存器使用数码管

今日开发中出现的问题汇总 基础还是比较薄弱

今日未解决问题

用数码管实现简单的加减乘除问题
今日开发收获

通过今天的学习,了解数码管有共阴共阳两种接法,明白了七段数码管先进行位选,在进行段选。学会了数码管的基本操作。还结合键盘进行制作一个简单的计算器。

自我评价

(是否按开发规范完成

既定任务,需要改进的地方,与他人合作效果等)

程序编写的程序还是有些问题
其他

#include<reg51.h>

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
 
int key=0, num1=0, num2=0,flag=0,flag1=0,flag2=0,s=0;

void delay(int x)

{

       int i;

       while(x--)

       {

          for(i=0;i<15;i++);

    }

}
 
void KeyScan()
{
       key=0;
    P1=0xf0;

    if(P1!=0Xf0)
    {
       switch(P1)
           {

          case 0xe0:key+=0;break;

          case 0xd0:key+=1;break;

           case 0xb0:key+=2;break;

          case 0x70:key+=3;break;

           }

       P1=0x0f;

       switch(P1)

       {
          case 0x0e:key+=1;break;

           case 0x0d:key+=5;break;

          case 0x0b:key+=9;break;

          case 0x07:key+=13;break;
       }
       while(P1!=0x0f);//等待手松开
     }
}
 
int equal(int f)
{
    switch(f)
    {

       case 1:

           num2=num2+num1;break;

       case 2:

           num2=num2-num1;break;

       case 3:

           num2=num1*num2;break;

       case 4:

           num2=num2/num1;break;
    }

    return num2;
}   

void display(int n)
{
    if(n>=0&&n<=9)
    {

    P2=0xfe;

    P0=table[n];

    } 

else if(n>=10&&n<=99)
{
    
      P2=0xfe;

      P0=table[n/10];

      delay(50);

      P2=~(1<<1);

      P0=table[n%10];

      delay(50);

}

}

int main()
{
     while(1)
      {
      flag=0;

      KeyScan();
 
  switch(key)

          {

    case 1:

    case 2:

    case 3:

    case 4:

    case 5:

    case 6:

    case 7:

    case 8:

    case 9:

    num1=num1*10+key;

if(num1/10==0||flag2!=0)

            {

   s++;

            }  

    break;

    case 10:

    num1=num1*10+0;

if(num1/10==0||flag2!=0)

            {
               s++;
            }

            break;

            case 11:flag=1;flag1=1;break;    //+
            case 12:flag=2;flag1=2;break;    //-
            case 13:flag=3;flag1=3;break;       //*
            case 14:flag=4;flag1=4;break;       // /
            case 15:  // =
            s=0;
            num1=equal(flag1);
            flag=5;      
            break;
        }

        if(0!=flag)

        {

        display(num1);

        num2=num1;

        num1=0;

        flag2++;

        }
        if(s==2)
        { 
        display(num1);
        s=1;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42653222/article/details/81106318