您的位置:首页 > 编程语言

郭天祥单片机编程100例程序及随笔1——LED灯编程

2018-03-12 11:13 253 查看
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 <intrins.h>文件库。aa = _crol_(aa,1);代表字符左移,用在小灯上可体现为——第一个小灯亮后,使用该函数,第一个小灯灭,第二个小灯亮。此外,第一个小灯是字符的低位。

3.led灯相关练习程序如下(网上下载的版本中有一些错误,自己编改正过来了):
    
点亮一个发光二极管
#include <reg52.h>
sbit led1 = P1^0;
void main()
{
led1 = 0;
}

点亮P1口的若干二极管
#include <reg52.h>
void main()
{
P1 = 0xaa;
whlie(1);
}

间隔1S亮灭闪动led灯
#include <reg52.h>
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 <reg52.h>
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 <reg52.h>
#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 <reg52.h>
#include <intrins.h>
#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--);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: