苏嵌实训

学习日志

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

今日学习任务

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

今日任务完成情况

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

复习与巩固了一些单片机知识,也学习到了一些新的东西。在不断尝试与摸索中,尽管困难重重,但在不断的实验下最终功能大体实现。

今日中发现问题汇总

在键盘输入时,对于如何区分并记录第一次和第二次输入的数据有着不小困难。

今日未解决问题

 

今日开发收获

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

自我评价

 

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

 

作业

#include <reg51.h>

 

sbit wei = P2^1;

 

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 < 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, xianshi = 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:  //=

xianshi = 1;

break;

}

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((xianshi == 1)&&(flag1 == 1))

{

display(num1+num2);

}

 

if((xianshi == 1)&&(flag2 == 1))

{

display(num2-num1);

}

 

if((xianshi == 1)&&(flag3 == 1))

{

display(num1*num2);

}

 

if((xianshi == 1)&&(flag4 == 1))

{

display(num2/num1);

}

}

return 0;

}

 

猜你喜欢

转载自blog.csdn.net/woshinibaba6/article/details/81103818