DISC 1:让LED灯闪烁
先祭上代码:
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@12.000MHz,延时函数
{
unsigned char i, j, k;
_nop_();//nop对应#include <INTRINS.H>
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main(){
while(1){
P2 = 0xFE;//1111 1110
Delay500ms();
P2 = 0xFF;//1111 1111
Delay500ms();
}
}
其中延时函数部分,生成的方法如下:打开烧写软件,点击“软件演示计算器”,如果根据我使用的单片机,系统频率和8051指令集应改为如图所示,定义时间自己设置,之后就会自动生成代码。
按照上一集讲的办法,进行烧录,LED的D1灯会出现一闪一灭的情况。
DISC2 :LED流水灯的实现
直接上代码,这个是第一种方法:
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main(){
while(1){
P2 = 0xFE;//1111 1110
Delay500ms();
P2 = 0xFD;//1111 1101
Delay500ms();
P2 = 0xFB;//1111 1011
Delay500ms();
P2 = 0xF7;//1111 0111
Delay500ms();
P2 = 0xEF;//1110 1111
Delay500ms();
P2 = 0xDF;//1101 1111
Delay500ms();
P2 = 0xBF;//1011 1111
Delay500ms();
P2 = 0x7F;//0111 1111
Delay500ms();
}
}
重点是第二种方法,这种方法其重点在于能够控制每个灯每次闪烁的间隔。其延时函数获取的方法与前边一致,只是在原延时函数的基础上,对其传入参数xms,并将原来函数体改装为如下所示:
#include <REGX52.H>
#include <INTRINS.H>
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main(){
while(1){
P2 = 0xFE;//1111 1110
Delay1ms(100);
P2 = 0xFD;//1111 1101
Delay1ms(100);
P2 = 0xFB;//1111 1011
Delay1ms(100);
P2 = 0xF7;//1111 0111
Delay1ms(100);
P2 = 0xEF;//1110 1111
Delay1ms(100);
P2 = 0xDF;//1101 1111
Delay1ms(100);
P2 = 0xBF;//1011 1111
Delay1ms(100);
P2 = 0x7F;//0111 1111
Delay1ms(100);
}
}
两种方法中的程序代码都会出现所有的LED灯依次亮的情况,只是第一次较慢第二次较快。
好了,本期就讲到这里,还是老规矩,如有疑问欢迎在平均区留言,咱们下集再见!!!