单片机实验5

1、实验内容一
1.1、问题一:
单个共阳数码管如图5-1所示,用8位杜邦线将并行口P1与J6相连,在数码管上循环显示0~9。每个数字显示1S。


这里写图片描述
图5-1(a)

这里写图片描述
图5-1(b)

共阳极数码管显示0-9段码表如图5-2所示:
这里写图片描述
图5-2

1.2、问题一的代码:

#include <reg51.h>
#include <absacc.h>
void delay();
int i = 0;
int code TAB[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void main()
{

    while (1)
    {
        P1 = TAB[i];
         for(;i < 10;i++)
         {
                P1 = TAB[i];
                delay();
         }
        i = 0;

    }
}

void delay() 
{   
    int x,y;
    for(x=200;x>0;x--)
    for(y=625;y>0;y--);
}

1.3、问题一的结果和现象:
数码管上循环显示0~9,每个数字显示1S。
2、实验内容二
2.1、问题二:
编程使八位数字01234567在八位共阴极数码管(原理图如图所示5-3)上同时显示,步骤如下:
(1) P0口输出位码01111111B,即先选通最左一个数码管,后P0口再输出“0”对应的段码,延时1S;然后P0口控制选通下一个数码管,即位码为10111111B,输出“1”对应的段码,延时1S;依次选通,最右一个数码管的位码为11111110B。程序运行时看到8个数码管一个一个显示不同的数字。
(2) 将延时时间缩短,看到数字变化的速度加快,当延时足够小时,就会看到8个数码管同时显示不同的数字。(分别取1S,100ms,10ms)。

图5-3
2.2、问题二的代码:

#include <reg51.h>
#include <absacc.h>
void delay();
int i = 0;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
int code TAB[16] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F
,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
int code TAB1[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main()
{

    while (1)
    {
        for (i = 0;i < 8;i++)
        {
            P1 = TAB1[i];
            P2_2 = 1;
            P2_2 = 0;
            P1 = TAB[i+num];
            P2_3 = 1;
            P2_3 = 0;
            delay();
        } 
    }
}

void delay() 
{   
    int y;
    for(y=300;y>0;y--);
}

2.3、问题二的实验结果和现象:
当延时时间为1s时,可以明显看出每个数码管的间隔;当延时时间为100ms以及10ms左右时时,可以看到效果好了很多;当时间为4ms时,可看到一直常亮的8个数码管,从左至右依次是0~8;当延时时间小于1ms时,每个数码管出现了重叠,在本次显示还未完成,出现了下一个,
3、实验内容三
3.1、问题三:
编程实现数字0123456789abcdef依次在八位共阴极数码管上左移显示,显示到89abcdef后重新回到012345678。
3.2、问题三的代码:

#include <reg51.h>
#include <absacc.h>
void delay();
int i ,a;
sbit P2_2 = P2^2;
sbit P2_3 = P2^3;
int code TAB[16] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,
0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
int code TAB1[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main()
{

    while (1)
    {
        int num = 0;
        for (num = 0; num < 9;num++)
        {
            a = 20; 
            while(a--)
            {
                 for (i = 0;i < 8;i++)
                {
                    P1 = TAB1[i];
                    P2_2 = 1;
                    P2_2 = 0;
                    P1 = TAB[i+num];
                    P2_3 = 1;
                    P2_3 = 0;
                    delay();
                }  
            }
        }
    }
}

void delay() 
{   
    int y;
    for(y=300;y>0;y--);
}

3.3、问题三的实验结果和现象:
数字0123456789abcdef依次在八位共阴极数码管上左移显示,显示到89abcdef后重新回到012345678,每次显示大约0.5ms。

猜你喜欢

转载自blog.csdn.net/chao_shine/article/details/78879393