- LED灯的简单介绍
- 练习
- led灯两灯闪烁
- 花样流水灯
- 1357,2468轮流点亮
- 从下到上两遍,从下到上两遍,中间到两头两遍
- 两边到中间,中间到两边
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练习 led灯两灯闪烁//头文件 _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花样流水灯#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 的图
-
演示图
-
代码
方法一:循环法
#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); } } }
由于本人比较喜欢用循环的方法,所以以下就全都用循环的方法了
-
演示图
-
代码
#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); } } } }
-
演示图
-
代码
#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]; } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)