2018.7.18

学习日志                     姓名:   徐雪         日期: 2017.07.18

 

今日学习任务

 用矩阵按键,完成计算器加减乘除功能,在数码管上显示数字。

 

日任务完成情况

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

 

今日任务已按计划完成。 编写了数码管显示0,8,0和1交替亮,6个LED顺次显示0到5,锁存器以及数码管锁存器等程序。

 

 

 

今日开发中遇到的问题汇总

  两位数字的计算器功能无法实现

日未解决问题

日开发收获

  1. 数码管(七段) 为a b c d e f g   h(小数点)  顺时针   8个LED灯
  2. 共阳:+连接在一起,接高电平  负极接地就可以亮

   共阴:指数码管各段的阴极接在一起;单片机的输出就必须接在各个阳极上。

 

 

 

 

自我评价

(是否规范完成指定任务,需要改进的地方,与他人合作等。)

 没有全部实现功能,只实现了一位数的计算。

            其他

                无  

 

 

 

 #include<reg51.h>

 

sbit wei=P2^1;  //共阴数码管表

int key=0,num1=0,num2=0,flag=0,flag1=0,flag2=0,s=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 <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);  //等待手松开

}

  }

  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();

P2=~(1<<1);

P0=table[n%10];

delay();

   }

        

  }

  int equal(int f)

{   

 

   switch(f)

   {

   case 1:  num2=num1+num2;break;

   case 2:   num2=num2-num1;break;

   case 3:    num2=num1*num2;break;

   case 4:   num2=num2/num1;break;

   }

 

return num2;

}

 

 

       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)

{s++;} break;

case 10: num1=num1*10+0;

if(num1/10==0)

{s++;}

break;

case 11:  flag=1;flag1=1;break; //+display_flag=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;

}

if(s==2)

{

   display(num1);

   s=1;

   }

}

return 0;

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

15195867336

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值