基于51单片机的8位流水灯的设计与实现
要求:用一个51最小系统实现8个LED灯闪烁
1-完成51最小系统的搭建,并且能够点亮一个LED; 2-8个LED灯流水闪烁(跑马灯); 3-设置3个按键(A按键启动、B按键控制低中高三种流水速度、C按键控制暂停与蜂鸣器长响(按一下蜂鸣器响,再按一下蜂鸣器不响); 4.将要求1、2、3在Proteus中仿真实现; 5.焊接自己的51最小系统板,硬件实现上述功能;
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit BUZ=P1^0;
sbit K1=P3^2;
sbit K2=P3^3;
uint n=0;
uchar led=0xfe;
uchar sudu=1;
void delay(uint num)
{
uint i,j;
for(i=num;i>0;i--)
for(j=123;j>0;j--);
}
void int2() interrupt 2
{
while(1)
{
if(K2==0)
{
delay(400);
BUZ=~BUZ;
}
if(BUZ==1)break;
}
}
void int0() interrupt 0
{
if(K1==0)n++;
if(n==4)n=1;
switch(n)
{
case 1:sudu=1;break;
case 2:sudu=2;break;
case 3:sudu=3;break;
}
}
void main()
{
EA=1;
EX0=1;EX1=1;
IT0=1;IT1=1;
if(sudu==1)
{
delay(400);
while(1)
{
P2=led;
delay(800);
led=_crol_(led,1);
if(sudu!=1)break;
}
}
if(sudu==2)
{
delay(400);
while(1)
{
P2=led;
delay(200);
led=_crol_(led,1);
if(sudu!=2)break;
}
}
if(sudu==3)
{
delay(400);
while(1)
{
P2=led;
delay(50);
led=_crol_(led,1);
if(sudu!=3)break;
}
}
}
仿真电路
硬件焊接
|