/*
程序效果:有三个按键,按下其中任意一个流水灯的速度改变
*/
#include<reg52.h> //52系列单片机的头文件
#define uchar unsigned char//宏定义
#define uint unsigned int
uchar count=40,flag=0; //定义刚开始的流水灯的速度,后一个为标志变量
void main()
{
uchar i=0;//定义局部变量
EA=1; //打开总中断
ET0=1; //打开定时器
TR0=1; //启动定时器
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256;
P2=0xfe; //点亮第一个数码管,为下次循环做准备
while(1)
{
if(flag) //flag被置位
{
flag=0;//清零,为下次做准备
P2=~P2; //取反
P2<<=1; //左移一位
P2=~P2; //取反
i++;
if(i==8) //移到第八个数码管,则从新装初值
{
i=0;
P2=0xfe;
}
}
P0=0xf0; //赋初值
if((P0&0xf0)!=0xf0) //判断是否有按键按下
{
if(P0==0x70) //按下第一个按键
count=60; //给count从新赋值
if(P0==0xb0)
count=20;
if(P0==0xd0)
count=10;
}
}
}
void time0() interrupt 1 //定时器0
{
static uchar cnt; //定义静态变量
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++; //计数
if(cnt==count)
{
cnt=0; //清零
flag=1; //置标志位
}
}