1.一个待解决问题: sbit led1 = P1^0;中,led1指的是第一个发光二极管,这是谁给它命名的?为什么单片机能找得到这个灯?2.三个知识点: 2.1 P1口可以接led灯;点亮二极管 led1 = 0;加的是低电平。 2.2 延时函数。i,j定义为unsigned int类型,j那一段代码不变为110,需要延时多少ms,xms的值就设为多少,比如要延时500ms,i=500。其中j=110,网上的说法是一个for循环语句执行110次的时间为1ms,这个只是近似值,与单片机晶振和指令周期有关。void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
2.3单片机_crol_函数。来自#include 文件库。aa = _crol_(aa,1);代表字符左移,用在小灯上可体现为——第一个小灯亮后,使用该函数,第一个小灯灭,第二个小灯亮。此外,第一个小灯是字符的低位。
3.led灯相关练习程序如下(网上下载的版本中有一些错误,自己编改正过来了):
点亮一个发光二极管
#include
sbit led1 = P1^0;
void main()
{
led1 = 0;
}
点亮P1口的若干二极管
#include
void main()
{
P1 = 0xaa;
whlie(1);
}
间隔1S亮灭闪动led灯
#include
sbit led1 = P1^0;
unsigned int i,j;
void main()
{
while(1)
{
led1 = 0;//light the led1
for(i=1000;i>0;i--)
for(j=110;j>0;j--)
led1 = 1;
for(i=1000;i>0;i--)
for(j=110;j>0;j--)
}
}
间隔500ms闪动led灯,并采用调用函数的形式调用延时函数
#include
sbit led1 = P1^0;
#define uint unsigned int
void delay();
void main()
{
while(1)
{
led1 = 0;//light the led1;
delay();
led1 = 1;
delay();
}
}
void delay()
{
uint i,j;
for(i = 500;i>0;i--)
for(j = 110;j>0;j--);
}
编写程序使得led灯以亮200ms灭800ms的方式闪动,并采用调用延时函数的方法
#include
#define uint unsigned int
sbit led1 = P1^0;
void delay(uint xms);
void main()
{
while(1)
{
led1 = 0;
delay(200);
led1 = 1;
delay(800);
}
}
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
利用C51自带库_crol_(),以间隔500ms,实现流水灯控制
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar = aa;
void delay();
void main()
{
aa = 0xfe;
whlie(1)
{
P1 = aa;
delay();
aa = _crol_(aa,1);
}
}
void delay()
{
uint i,j;
for(i=500;i>0;i--)
for(j=110;j>0;j--);
}