使用软件:keil5、 proteus8.6
1、点亮一排led灯
代码:
#include <reg51.h>
void main()
{
P2 = 0xff; //端口2灯全部亮
}
仿真:
2、让一排LED灯闪烁
代码:
#include <reg51.h>
void delay()
{
unsigned char i = 100;
unsigned char j = 100;
while (i--)
{
while (j--);
}
}
void main()
{
P2 = 0xff;
delay();
P2 = 0x0;
delay();
}
仿真:
3、延时函数中循环语句的不同写法
#include <reg51.h>
unsigned char i, j; //两种不同形式,实现一样的结果
//unsigned char i;
//unsigned char j;
void delay()
{
/*
while(i--) //下面为不同形式的写法,实现相同的结果
while(j--);
*/
/*
while(i--)
{
while(j--)
{
}
}
*/
/*
while(i--)
{
while(j--);
}
*/
for (i=200; i>0; i--) // “疑惑”:在i,j的赋值相同时,for循环写法小灯闪烁速度明显快于while循环写法
{
for (j=200; j>0; j--)
{
;
}
}
}
void main()
{
P2 = 0xff;
delay();
P2 = 0x0;
delay();
}
4、LED依次点亮(流水灯)
代码:
/**********************
功能:C语言移位运算符的方法实现流水灯
**********************/
#include <reg51.h>
void delay()
{
unsigned int i, j; //“疑问”:当i,j数值不变时,用整形延时比用字符型延时时间更长
for (i=0; i<300; i++)
{
for (j=0; j<300; j++);
}
}
void main()
{
unsigned char k;
while(1)
{
unsigned char temp = 0x01; //0x01对应P2口0000 0001,第一个灯亮
for (k=0; k<8; k++)
{
P2 = temp; //第一个灯亮
temp = temp << 1; //此时temp值为0x10,0000 0010
delay();
}
}
}
/*
void main()
{
unsigned char k;
unsigned char temp = 0x01;
while (1)
{
for (k=0; k<8; k++)
{
P2 = (temp << k); //向左移k位,temp的值不变,一直为0x01;是P2被赋的值在变
delay();
}
P2 = (temp<<k++);
if(8 == k) k = 0; //如果k等于8时,将k赋值0,以实现循环
delay();
}
}
*/
仿真:
5、跑马灯
程序:
/*****************
跑马灯程序
*****************/
#include <reg51.h>
void delay()
{
unsigned char i, j;
for(i=0; i<200; i++)
{
for(j=0; j<200; j++);
}
}
void main()
{
unsigned char i;
while(1)
{
unsigned char temp = 0x01;
for(i=0; i<8; i++)
{
P2 = ~temp; //~为按位取反 例如:~1000 = 0111
temp = temp << 1; //左移一位赋值给新的temp 。 temp <<= 1; 两种写法是一样的,写哪一种都可以。
delay();
}
}
}
仿真: