点亮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毫秒
}
}
//人眼的视觉停留效果,使人误以为两个同时亮
手机扫一扫
移动阅读更方便
你可能感兴趣的文章