流水等的实现需要先实现灯光的闪烁
代码语言:javascript复制#include
#define uint unsigned int
sbit p1=P1^0;
void delay1s();
main()
{
while(1)
{
p1=0;//打开第一个发光二极管
delay1s();//延迟一秒
p1=1;//关闭第一个发光二级管
delay1s();
}
}
void delay1s()
{
uint i,j;
for(i=500;i>0;i--)
for(j=110;j>0;j--);
}
因此需要延时函数
如下,灯亮200ms,暗800ms,时间在delayms中自己
代码语言:javascript复制#include
#define uint unsigned int
sbit p1=P1^0;
void delayms(uint);
void main()
{
while(1)
{
p1=0;
delayms(200);
p1=1;
delayms(800);
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //延时xms毫秒
for(j=110;j>0;j--);
}
用C51实现流水灯的操作需要用到移位操作
也就是C语言中的左移,右移运算符<<,>>,
该运算符是直接对二进制起作用的
最高位补0,其他位0变1,1变0
但是在C51中,可以直接用“_crol_”函数实现
C51左移程序
代码语言:javascript复制#include
#define uint unsigned int
uchar a;
main()
{
a=0xaa;
while(1)
{
a=a<<1;//右移变">>"
}
}
最终实现的程序
代码语言:javascript复制#include
#include//包含_crol_函数所在的头文件
#define uint unsigned int
#define uchar unsigned char
void delayms(uint);
uchar aa; //定义一个变量来给P1赋值
void main()
{
aa=0xfe;//赋初值11111110
while(1)
{
P1=aa;//点亮第一个灯
delayms(500);//延时500ms
aa=_crol_(aa, 1);//aa循环左移1位后再给aa
}
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
一个菜鸟的学习之路