MCU 51-2 LED and Digital tube Test
阅读原文时间:2023年07月10日阅读:1

点亮LED实验:

#include
sbit LED1 = P1^;
sbit LED2 = P1^;
sbit LED8 = P1^;
void main()
{
LED1 = ;
LED2 = ;
LED8 = ;
while();
}

流水:

#include
#include
#define uchar unsigned char
#define uint unsigned int

//How to use the header file intrins.h
//_crol_ 字符循环左移
//_cror_ 字符循环右移
//_nop_ 空操作8051 NOP 指令
//LED = _crol_(LED,1)执行一次后的结果为0x1111 1101
sbit LED1 = P1^;
uchar i;
uchar temp;

void delay(uint z)
{
uint x,y;
for(x = z; x > ; x--)
for(y = ; y > ; y--);
}

void main()
{
temp = 0x7f;// 0111 1111
P1 = temp;
while()
{
for(i = ; i < ; i++)
{
temp = _cror_(temp,);//循环右移
P1 = temp;
delay();
}
}
}

数码管静态显示:

LED显示器工作方式:静态显示与动态显示

静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。

动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

数码管外部结构:

数码管内部结构:

74HC573真值表:

#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit we = P2^;//位选
sbit du = P2^;//段选

//共阴极
uchar code leddata[]={

            0x3F,  //"0"  
            0x06,  //"1"  
            0x5B,  //"2"  
            0x4F,  //"3"  
            0x66,  //"4"  
            0x6D,  //"5"  
            0x7D,  //"6"  
            0x07,  //"7"  
            0x7F,  //"8"  
            0x6F,  //"9"  
            0x77,  //"A"  
            0x7C,  //"B"  
            0x39,  //"C"  
            0x5E,  //"D"  
            0x79,  //"E"  
            0x71,  //"F"  
            0x76,  //"H"  
            0x38,  //"L"  
            0x37,  //"n"  
            0x3E,  //"u"  
            0x73,  //"P"  
            0x5C,  //"o"  
            0x40,  //"-"  
            0x00,  //熄灭  
            0x00  //自定义

                     };

void delay(uint z)
{
uint x,y;
for(x = z; x > ; x--)
for(y = ; y > ; y--);
}

void main()
{
//将要显示的数值锁存在锁存器中
du = ; //打开段选
P0 = leddata[];
du = ; //关闭段选
//delay(5);
//位选
we = ;//打开位选
P0 = ;//8位全部静态显示
we = ; //关闭位选
while();
}

uchar aa[5];
uchar code bb[5];
在以上语句中,数组aa[5]中的内容是存放在数据存储区(RAM)中的,在程序运行工程中各个数组元素的值可以被修改,掉电后aa[5]中的数据无法保存。
而数组bb[5]中的内容是存放在程序存储区(如flash)中的,只有在烧写程序时,才能改变bb[5]中的各元素的值,在程序运行工程中无法修改,并且掉电后bb[5]中的数据不消失。

数码管动态显示:

/*数码管循环显示0-9间隔500毫秒*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit we = P2^;
sbit du = P2^;

uchar code leddata[]={

            0x3F,  //"0"  
            0x06,  //"1"  
            0x5B,  //"2"  
            0x4F,  //"3"  
            0x66,  //"4"  
            0x6D,  //"5"  
            0x7D,  //"6"  
            0x07,  //"7"  
            0x7F,  //"8"  
            0x6F,  //"9"  
            0x77,  //"A"  
            0x7C,  //"B"  
            0x39,  //"C"  
            0x5E,  //"D"  
            0x79,  //"E"  
            0x71,  //"F"  
            0x76,  //"H"  
            0x38,  //"L"  
            0x37,  //"n"  
            0x3E,  //"u"  
            0x73,  //"P"  
            0x5C,  //"o"  
            0x40,  //"-"  
            0x00,  //熄灭  
            0x00  //自定义

                     };

void delay(uint z)
{
uint x,y;
for(x = z; x > ; x--)
for(y = ; y > ; y--);
}

void main()
{

    while()  
    {  
        we = ;//打开位选  
        P0 = 0xfe;//1111 1110 只选通第一位数码管  
        we = ;    //关闭位选

        du = ;    //打开段选  
        P0 = leddata\[\];  
        du = ;    //关闭段选  
        delay();//延时5毫秒

        we = ;    //打开位选  
        P0 = 0xfd;//1111 1101  只选通第二位数码管  
        we = ;    //关闭位选

        du = ;//打开段选  
        P0 = leddata\[\]; //显示2  
        du = ;    //关闭段选  
        delay();//延时5毫秒  
    }  

}
//人眼的视觉停留效果,使人误以为两个同时亮

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章