苏嵌学习日志7

学习日志

姓名:唐小玲 日期:2018.7.18

 

 

 

今日学习任务

 

  1. 数码管的基本原理
  2. 共阴和共阳数码管的区分
  3. 数码管是使用
  4. 锁存器的使用

 

日任务完成情况

 

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

  1. 数码管显示数字的程序编写
  2. 数码管静态显示与动态显示数字的程序编写
  3. 数码管与锁存器的联合使用

 

日开发中出现的问题汇总

 

个人单片机这一部分知识点学的不好,掌握程度不够,编写程序的时候有很多问题,需要重新多加练习编写代码。

 

日未解决问题

 

依旧不会独立编写难度稍高的代码。

 

 

日开发收获

 

1.七段数码管

共阳和共阴

2.全部数码管显示

#include<reg51.h>

 

sbit wei = P2^1;

//共阴数码管表

unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

int main()

{

//wei = 0;

P2 = 0x00;

P0 = table[0];

while(1);

return 0;

}

3.两个数码管显示

#include<reg51.h>

 

sbit wei = P2^1;

 

unsigned char code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

void delay()

{

int x = 100, i;

while(x--)

{

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

}

}

int main()

{

while(1)

{

P2 = 0xfe; //位选,亮第一个

P0 = table[0]; //段选

delay();

P2 = 0xfd;

P0 = table[1];

delay();

}

return 0;

}

4.数码管-锁存器

#include <reg51.h>

 

sbit duan = P2^6;

sbit wei = P2^7;

 

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

}

}

 

int main()

{

// wei = 1;  //打开位锁存器

// P0 = 0xfe;

// wei = 0; //关闭锁存器,P0值的改变不会影响位选值

//

// duan = 1;

// P0 = table[8];

// duan = 0;

 

int i;

while (1)

{

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

{

wei = 1;

P0 = ~(1 << i);

wei = 0;

duan = 1;

P0 = table[i];

duan = 0;

delay();

}

}

return 0;

}

5.数码段

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

}

}

 

int main()

{

int i, display_flag = 0;

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

break;

case 12:  //-

case 13:  //*

case 14:  // /

break;

}

if (1 == display_flag)

{

display(num1);

}

}

return 0;

}

 

 

自我评价

(是否按开发规范完成既定任务,需要改进的地方,与他人合作效果等)

一些简单的练习能够做出,但是有一些小知识点遗忘了,不够熟练,需要多多实践练习!

 

 

作业

1.制作简易计算器,利用数码管显示

#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, 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_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 == 0)

        {

            display(num2);                    

        }

 

        //显示加法的结果

        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;

}

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_36974603/article/details/81104337
今日推荐