大家好,又见面了,我是你们的朋友全栈君。
这次用单片机做个简单的流水灯。
先给大家看一下仿真软件的电路(软件为Proteus)
上图就是用仿真软件制作的线路原理图
AT89C51RC2:单片机
BUTTON:按键
CAP:电容
CRYSTAL:晶振
LED-GERRN:LED灯(绿色)
RES:电阻
接下来是程序部分(软件为keil)
#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的数值。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/140900.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...