苏嵌实训

学习日志

苏嵌实训           姓名:傅圣泽        日期:2018.7.19

今日学习任务

编程实现一个计算器实现加减乘除功能

今日任务完成情况

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

按照老师要求完成任务,学习了定时器还有中断方面的知识。按任务完成了计算器程序的编写,但存在一些瑕疵。

今日中发现问题汇总

在键盘输入时,对于如何区分并记录第一次和第二次输入的数据有着不小困难。计算器输入时数码管无法显示输入值。

今日未解决问题

 

今日开发收获

在不断摸索与尝试中一步步的向前,尽管过程坎坷,但收获不小,对于c51单片机的实际应用能力有着较大的提升。同时也培养了耐心和细心。

自我评价

 

今天按照老师要求来完成任务。尽管过程有着不小挫折,在尝试与讨论中,最后基本实现的功能,但还有待加强基础知识以及实践能力。

 

作业

#include <reg51.h>

sbit wei = P2^1;

 

//共阴数码管表

unsigned char code table[] = {0x3f, 0x06 ,

0x5b , 0x4f , 0x66 , 0x6d, 0x7d ,

0x07 , 0x7f  , 0x6f };

 

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

 

void delay()

{

int x = 50, i;

 

while (x--)

{

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

}

}

 

 

void delay1()

{

int x = 100,i;

while(x--)

{

for(i = 0;i < 100;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)

{

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

}

else if (n >= 100 && n <= 999)

{

P2 = 0xfe;

P0 = table[n / 100];

delay();

P2 = ~(1 << 1);

P0 = table[(n % 100) / 10];

delay();

P2 = ~(1 << 2);

P0 = table[((n % 100) % 10)];

delay();

}

 

}

 

int main()

{

int i, display_flag = 0,display_flag1 = 0;

int display_flag2 = 0,display_flag3 = 0,display_flag4 = 0;

int flag1 = 0,flag2 = 0,flag3 = 0,flag4 = 0;

int j = 10000;

while (1)

{

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_flag1 = 1;

flag1 = 1;

break;

case 12:  //-

display_flag2 = 1;

flag2 = 1;

break;

case 13:  //*

display_flag3 = 1;

flag3 = 1;

break;

case 14:  ///

display_flag4 = 1;

flag4 = 1;

break;

case 15:  //=

display_flag = 1;

break;

}

 

if(display_flag == 0)

{

 display(num1);

}

 

if ((display_flag1 == 1)||(display_flag2 == 1)||(display_flag3 == 1)||(display_flag4 == 1))

{

display(num1);

delay1();

num2 = num1;

num1 = 0;

display_flag1 = 0;

display_flag2 = 0;

display_flag3 = 0;

display_flag4 = 0;

}

 

if((display_flag == 1)&&(flag1 == 1))

{

display(num1+num2);

}

 

if((display_flag == 1)&&(flag2 == 1))

{

display(num2-num1);

}

 

if((display_flag == 1)&&(flag3 == 1))

{

display(num1*num2);

}

 

if((display_flag == 1)&&(flag4 == 1))

{

display(num2/num1);

}

}

return 0;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值