大家好,又见面了,我是你们的朋友全栈君。
这次用单片机做个简单的流水灯。
先给大家看一下仿真软件的电路(软件为Proteus)
上图就是用仿真软件制作的线路原理图 AT89C51RC2:单片机 BUTTON:按键 CAP:电容 CRYSTAL:晶振 LED-GERRN:LED灯(绿色) RES:电阻
接下来是程序部分(软件为keil)
代码语言:javascript复制#include"reg51.h" //此文件中定义了单片机的一些特殊功能寄存器
#include"intrins.h" //因为要用到左右移函数,所以加入这个头文件
void delay1ms(unsigned char c) //c=1时,大约为1ms
{
unsigned char a,b;
for(c ;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void main()
{
unsigned char led,i; //设定两个变量
led=0xfe; //硬件图上我们是负极连接单片机,所以输出0才能点亮LED,0xfe=1111 1110
delay1ms(100); //大约延时100ms
while(1)
{
for(i=0;i<7;i ) //把0移到最右边需要7次
{
P2=led; //P2口的8个引脚输出为0xfe
delay1ms(100);
led=_crol_(led,1); //左移函数,将led左移一位 _crol_(“变量”,“位数”)
}
for(i=0;i<7;i ) //同上for的作用
{
P2=led;
delay1ms(100);
led=_cror_(led,1); //右移函数,将led右移一位
}
}
}
PS: 程序中必须先赋值,再移位,不然在执行的时候最两边的灯是不亮的。 流水灯的快慢取决于delay的数值。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140900.html原文链接:https://javaforall.cn