three///////

今日学习任务

数码管的显示,计算器的设计 

今日任务完成情况

计算器较好的完成,但数字闪烁

今日开发中出现的问题汇总

如何进入与跳出循环,计算器各位的顺序问题

今日未解决问题

今日开发收获

学会了利用单片机,键盘,数码管设计计算器

自我评价   

遇到一些困难但基本完成任务

其他

#include <reg51.h>

int key = 0, num1 = 0, num2 = 0;

//共阴数码管表
unsigned char code table[] = {0x3f, 0x06 , 
        0x5b , 0x4f , 0x66 , 0x6d, 0x7d , 
        0x07 , 0x7f  , 0x6f };


void delay()
{
    int x=50, i;

    while (x--)
    {
        for (i = 0; i < 10; i++);
    }
}

void delay2()
{
    int x=60, i;

    while (x--)
    {
        for (i = 0; i < 25; i++);
    }
}


void KeyScan()
{
    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);
    }
}


void display(int n)
{

        P2 = ~(1);
        P0 = table[n / 100000];
        delay();

        P2 = ~(1<<1);
        P0 = table[(n % 100000)/10000];
        delay();

        P2 = ~(1<<2);
        P0 = table[(n % 10000)/1000];
        delay();

        P2 = ~(1<<3);
        P0 = table[(n % 1000)/100];
        delay();

        P2 = ~(1<<4);
        P0 = table[(n % 100)/10];
        delay2();


        P2 = ~(1<<5);
        P0 = table[n % 10];
        delay();
}

int main()
{
    int y, display_flag = 0, display_flag2 = 0;
    while (display_flag ==0)
    {
        key = 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;
                break;
            case 10:
                num1 = num1 * 10 + 0;
                break;
            case 11:  //+
                display_flag = 1;
                break;
            case 12:  //-
                display_flag = 2;
                break;
            case 13:  //*
                display_flag = 3;
                break;
            case 14:  // /
                display_flag = 4;
                break;
        }
            display(num1);
    }

    while (display_flag2 != 5)
    {
        key = 0;
        KeyScan();     //检测按键

        switch(key)
        {
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
                num2 = num2 * 10 + key;
                break;
            case 10:
                num2 = num2 * 10 + 0;
                break;
            case 15:  // =
                display_flag2 = 5;
                break;
        }
            display(num2);
    }

    switch(display_flag)
    {
      case 1 :
         y = num1 + num2;
         break;

      case 2 :
         y = num1 - num2;
         break;

      case 3 :
         y = num1 * num2;
         break;

      case 4 :
         y = num1 / num2;
         break;
    }

    while(1)
    {
       display(y);
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42646977/article/details/81099965