赞
踩
LED灯 0亮 1灭
注意注意注意
注意led灯的方向 他是有方向
的(哪一个口接电源,哪一个口接at89c51的引脚)可以记作三角边朝电源,三角尖朝单片机
led灯如何在KeilC51中使用
第一种:直接定义
(适用于led灯少的时候)
直接定义led灯所在的引脚、然后再主函数中直接使用
sbit led1 = P1^0;
sbit led2 = P1^1;
第二种:使用十六进制的方法
(适用于四个、八个、十六个led灯等)
以下图举例
数组法
由上图可知,从0口灯亮到7口亮的数组为
tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
循环法
由图可知,从低位到高位为左循环,由高位到低位为右循环
#include<intrins.h>//头文件
_crol_(P1,1);//向左循环一位
_cror_(P1,2);//向右循环两位
演示图
protues8.9 的图
所用的器件
1. 最小系统
at89c51
cap 30PF
cap-elec 22uF
res
crystal
2. led部分
led-yellow(别的颜色也可以)
res 分压(一定要设置成220,不然分压太大,led灯会没有显示)
KeilC51代码
#include<reg51.h> #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互换一次 } }
部分代码讲解
~(波浪符号)是取反的意思
led2=led1;
led1=~led1;
这段代码是让两个led灯的状态不同,当led2=0时,led1=1;led2=1时,led1=0;
也可以用:
while(1){ //一直循环,在后面会一直写到,大家可以记住
led2=0;
led1=1;
delay(200); //每200ms led1和led2互换一次
led2=1;
led1=0;
delay(200);
}
protues8.9 的图
演示图
代码
方法一:循环法
#include<reg51.h> #include<intrins.h>//循环的头文件记得写 #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); } }
代码讲解
第一部分:1 3 5 7 亮
P1=0xfe;
for(k=0;k<3;k++){
delay(500);
P1=_crol_(P1,2); //循环的方法关键
}
delay(500);
如图如代码,可知,当我们设置了初值=0xfe,然后就可以进行for循环了
第二部分:2 4 6 8 亮
P1=0xfd;
for(k=0;k<3;k++){
delay(500);
P1=_crol_(P1,2);
}
delay(500);
如上一个例子
方法二:数组法
#include<reg51.h> #include<intrins.h> #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); } } }
由于本人比较喜欢用循环的方法,所以以下就全都用循环的方法了
演示图
代码讲解
从下到上两遍,从下到上两遍就不进行详细讲解了
中间到两头两遍
uchar code ted[]={0xe7,0xdb,0xbd,0x7e};//看下图
for(m=2;m>0;m--){
for(i=0;i<4;i++){
P1=ted[i];
delay(200);
}
}
完整代码
#include<reg51.h> #include<intrins.h> #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); } } } }
演示图
代码
#include<reg51.h> #include<intrins.h> #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]; } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。