关于8051对LED控制的各种程序
本*也是前几天开始接触单片机,从最经典也是最实用的8051开始入手。看了几天书和资料,发现以前一直看的微机还有大一上时候在计算机学的一些东西还是挺有用的。大家都是看郭天祥的吧=。= 本*不是。我是在x宝上买的开发板讲课都是x宝店家独家镜头,可谓是高端大气上档次,低调奢华有内涵,简约时尚国际范,低端粗俗甩节操,土憋矫情无下限,狂拽酷帅吊炸天,冷艳高贵接地气,时尚动感小清新,可爱乡村非主流。好吧,废话不多,其实我也是看郭天祥的,哈工大毕竟不是盖的。ps:x宝老板是南邮的高材生。
本文引用地址:https://www.eepw.com.cn/article/270753.htm本*老老实实地把PPT最后的课后练习都做了遍,完全没有什么百度,那些弱爆了换句话说。
下面,本*就郭天祥课件里面课后练习的题目做出自己的独家见解-。-
题一:第一个发光管以间隔200ms闪烁。
卧槽-,- 这种题目小儿科。本*表示,写这类程序有两种方法,我还是喜欢直接对IO口总线定义。
#include
#include
sbit buzz=P3^4;
void delay()
unsigned int t=30000;
while (t--);
void main()
unsigned char temp;
temp=0xfe;
while(1)
P1=temp;
temp=_crol_(temp,1);
buzz=~buzz;
delay();
}
题三: 用8个发光管演示出8位二进制数累加过程。
#include
#include
void delay()
unsigned int a=30000;
while(a--);
void main() //灯亮为0,灭为1;
P1=0x00;
for(;P1<=0xfe;P1++)
delay();
}
题四:8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。
#include
#include
unsigned int temp;
void delay(unsigned int z)
unsigned int x;
unsigned char y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
void main()
unsigned int a,b,c;
while(1)
for(a=0;a<2;a++)
temp=0xfe;
while(b<=6)
P1=temp;
temp=_crol_(temp,1);
delay(500);
while(c<=6)
P1=temp;
temp=_cror_(temp,1);
delay(500);
P1=0xff;
for(a=0;a<5;a++)
P1=~P1;
delay(1000);
}
题五:间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
#include
#include
unsigned int temp;
void delay(unsigned int z)
unsigned char x;
unsigned char y;
for(x=z;x>0;x++)
for(y=100;y>0;y++);
void main()
unsigned int a;
while(1)
temp=0xfe;
while(a<=6)
P1=temp;
temp=_crol_(temp,1);
delay(30000);
temp=0xfc;
while(a<=5)
P1=temp;
temp=_crol_(temp,1);
delay(30000);
temp=0xf8;
while(a<=4)
P1=temp;
temp=_crol_(temp,1);
delay(30000);
temp=0xf0;
while(a<=3)
P1=temp;
temp=_crol_(temp,1);
delay(30000);
temp=0xe0;
while(a<=2)
P1=temp;
temp=_crol_(temp,1);
delay(30000);
temp=0xc0;
while(a<=1)
P1=temp;
temp=_crol_(temp,1);
delay(30000);
temp=0x80;
while(a<=0)
P1=temp;
temp=_crol_(temp,1);
delay(30000);
temp=0x00;
P1=temp;
delay(30000);
}
题六:间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。
#include
void delay()
unsigned int a=30000;
while(a--);
void main()
unsigned char a;
while(1)
for(a=0;a<3;a++)
P1=0x55;
delay();
P1=0xaa;
delay();
for(a=0;a<3;a++)
P1=0x7e;
delay();
P1=0xbd;
delay();
P1=0xdb;
delay();
P1=0xe7;
delay();
for(a=0;a<3;a++)
P1=0xe7;
delay();
P1=0xdb;
delay();
P1=0xbd;
delay();
P1=0x7e;
delay();
for(a=0;a<3;a++)
P1=0x00;
delay();
P1=~P1;
delay();
}
学习是一个不断积累的过程,郭天祥说十天可以学完,表示我做不到,不仅仅是学完8051,其实别的芯片程序大体还是通用的,我诶想想是这样的=。= 不管怎么说,c语言是基础,当然也有用汇编的,本*表示汇编看不懂。。。。
c语言相关文章:c语言教程
蜂鸣器相关文章:蜂鸣器原理
评论