单片机————LED灯(Proteus和KeilC51)

单片机————LED灯(Proteus和KeilC51),第1张

单片机————LED灯(Proteus和KeilC51)

单片机————LED灯(Proteus和KeilC51)
  • LED灯的简单介绍
  • 练习
    • led灯两灯闪烁
    • 花样流水灯
      • 1357,2468轮流点亮
    • 从下到上两遍,从下到上两遍,中间到两头两遍
    • 两边到中间,中间到两边

LED灯的简单介绍

LED灯   0亮 1灭

注意注意注意
注意led灯的方向 他是有方向的(哪一个口接电源,哪一个口接at89c51的引脚)

led灯如何在KeilC51中使用

  • 第一种:直接定义

(适用于led灯少的时候)
直接定义led灯所在的引脚、然后再主函数中直接使用

	sbit led1 = P1^0; 
	sbit led2 = P1^1;
  • 第二种:使用十六进制的方法

(适用于四个、八个、十六个led灯等)
以下图举例

  1. 数组法

    由上图可知,从0口灯亮到7口亮的数组为

tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  1. 循环法

由图可知,从低位到高位为左循环,由高位到低位为右循环

#include//头文件

_crol_(P1,1);//向左循环一位
_cror_(P1,2);//向右循环两位

练习 led灯两灯闪烁
  1. 演示图

  2. protues8.9 的图

所用的器件
1. 最小系统	
	at89c51
	cap        30PF
	cap-elec   22uF
	res        
	crystal
2. led部分
	led-yellow(别的颜色也可以)
	res     分压(一定要设置成220,不然分压太大,led灯会没有显示)

  1. KeilC51代码
#include
#define uint unsigned int
#define uchar unsigned char
	
sbit led1 = P1^0;     //定义引脚
sbit led2 = P1^1;

void delay(uint xms){    //延时功能;当xms=1时,相当于1ms
	uint i,j;
	for(i=xms;i>0;i--)
		for(j=110;j>0;j--);
}

void main(){
	while(1){      //一直循环,在后面会一直写到,大家可以记住
		led2=led1;
		led1=~led1;
		delay(200);  //每200ms led1和led2互换一次
	}
}
花样流水灯

protues8.9 的图

1357,2468轮流点亮
  1. 演示图

  2. 代码
    方法一:循环法

#include
#include

#define uint unsigned int
#define uchar unsigned char

void delay(uint xms){
	uint i,j;
	for(i=xms;i>0;i--){
		for(j=110;j>0;j--);
	}
}
void main(){
	uint k,m;
	while(1){	
		P1=0xfe;
		for(k=0;k<3;k++){
			delay(500);
			P1=_crol_(P1,2);    //循环的方法关键
		}
		delay(500);
		
		P1=0xfd;
		for(k=0;k<3;k++){
			delay(500);
			P1=_crol_(P1,2);
		}
		delay(500);
	}
}	

方法二:数组法

#include
#include

#define uint unsigned int
#define uchar unsigned char

void delay(uint xms){
	uint i,j;
	for(i=xms;i>0;i--){
		for(j=110;j>0;j--);
	}
}

uchar code table1[]={0xfe,0xfb,0xef,0xbf};//数组方法的关键
uchar code table2[]={0xfd,0xf7,0xdf,0x7f};

void main(){
	uint k;
	while(1){
		for(k=0;k<4;k++){
			
			P1=table1[k];
			delay(500);
		}
		for(k=0;k<4;k++){
			P1=table2[k];
			delay(500);
		}
	}
}
从下到上两遍,从下到上两遍,中间到两头两遍

由于本人比较喜欢用循环的方法,所以以下就全都用循环的方法了

  1. 演示图

  2. 代码

#include
#include

#define uint unsigned int
#define uchar unsigned char

void delay(uint xms){
	uint i,j;
	for(i=xms;i>0;i--){
		for(j=110;j>0;j--);
	}
}
uchar code ted[]={0xe7,0xdb,0xbd,0x7e};
void main(){
	uint m,k,i;
	while(1){
		P1=0xfe;
		for(m=2;m>0;m--){
			for(k=0;k<8;k++){
				delay(200);
				P1=_crol_(P1,1);
			}
		}
		P1=0x7f;
		for(m=2;m>0;m--){
			for(k=0;k<8;k++){
				delay(200);
				P1=_cror_(P1,1);
			}
		}
		for(m=2;m>0;m--){
			for(i=0;i<4;i++){
				P1=ted[i];
				delay(200);
			}
		}
	}
}
两边到中间,中间到两边
  1. 演示图

  2. 代码

#include
#include

#define uint unsigned int
#define uchar unsigned char

void delay(uint xms){
	uint i,j;
	for(i=xms;i>0;i--){
		for(j=110;j>0;j--);
	}
}
uchar code ted1[]={0xbd,0xdb,0xe7};
uchar code ted2[]={0xdb,0xbd,0x7e};

void main(){
	

	
	//两边到中间,中间到两边
	uint i;
	while(1){
		P1=0x7e;
		for(i=0;i<3;i++){	
			delay(500);
			P1=ted1[i];
		}
		for(i=0;i<3;i++){
			delay(500);
			P1=ted2[i];
		}
	}	
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5690721.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存