概述
单片机————LED灯(Proteus和KeilC51)
- LED灯的简单介绍
- 练习
- led灯两灯闪烁
- 8盏花样流水灯
- 1357,2468轮流点亮
- 从下到上两遍,从下到上两遍,中间到两头两遍
- 两边到中间,中间到两边
LED灯的简单介绍
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);//向右循环两位
练习
led灯两灯闪烁
-
演示图
-
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); }
8盏花样流水灯
protues8.9 的图
1357,2468轮流点亮
-
演示图
-
代码
方法一:循环法#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]; } } }
最后
以上就是开心大门为你收集整理的单片机———LED灯(Proteus和KeilC51)LED灯的简单介绍练习的全部内容,希望文章能够帮你解决单片机———LED灯(Proteus和KeilC51)LED灯的简单介绍练习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复