这是我这两天刚做的51单片机关于节日彩灯控制器的这是isis电路图
代码如下:
#include <reg52.h>
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit k1=P1^2; //位定义
sbit k2=P1^3;
sbit k3=P1^4;
sbit k4=P1^5;
uchar a=0; //定义所需变量
uchar b;
uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //从上到下流水数组
uchar code table2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //从下到上流水数组
void delay_ms(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void key_scan(uchar b) //按键扫描
{
if(b==1) //若K1按下
{
while(k2==1&&k3==1&&k4==1)
{
for(a=0;a<8;a++) //执行从上到下流水操作
{
P0=table1[a];
delay_ms(100);
}
a=0;
}
}
if(b==2) //若K2按下
{
while(k1==1&&k3==1&&k4==1)
{ //P0全部输出高电平,关闭LED
P0=0xff;
}
}
if(b==3) //若K3按下
{
while(k1==1&&k2==1&&k4==1)
{
for(a=0;a<8;a++) //执行从下到上流水操作
{
P0=table2[a];
delay_ms(100);
}
a=0;
}
}
if(b==4) //若K4按下
{
while(k1==1&&k2==1&&k3==1)
{
P0=0xaa; //奇偶位分别点亮
delay_ms(100);
P0=0x55;
delay_ms(100);
}
}
}
void main(void) //主函数
{
TMOD=0X01; //定时器中断初始化
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
while(1);
}
void T0_time() interrupt 1 //中断服务函数
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
if(k1==0)b=1;
if(k2==0)b=2;
if(k3==0)b=3;
if(k4==0)b=4;
key_scan(b);
}
操作步骤:
按下k1-k4四个button开关可实现彩灯形式变换
附件的话我这几天会上传
|