问题遇到的现象和发生背景
给单片机流水灯加个暂停和启动
用代码块功能插入代码,请勿粘贴截图
#include<reg52.h>
unsigned int keyvalue;
void Delay10ms()
{
unsigned char i, j;
i = 234;
j = 115;
do
{
while (--j);
} while (--i);
}
void Timer0Init()
{
//AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xE0; //设置定时初始值
TH0 = 0xB1; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
}
void keyscan()
{
P1=0xf0;//扫描法
if(P1 != 0xf0)
{
Delay10ms();
if(P1 != 0xf0)
{
switch(P1)
{
case 0xe0:keyvalue=0;break;
case 0xd0:keyvalue=1;break;
case 0xb0:keyvalue=2;break;
case 0x70:keyvalue=3;break;
}
P1=0x0f;
switch(P1)
{
case 0x0e:keyvalue=keyvalue;break;
case 0x0d:keyvalue=keyvalue+4;break;
case 0x0b:keyvalue=keyvalue+8;break;
case 0x07:keyvalue=keyvalue+12;break;
}
while(P1!=0x0f);//松手检测
}
}
}
void main()
{
Timer0Init();
while(1){
keyscan();
}
}
unsigned int i,ledn=9,was=0;
void time_iso() interrupt 1
{
TL0 = 0xE0; //设置定时初始值
TH0 = 0xB1; //设置定时初始值
i++;
if(i>=50)
{
i=0;
ledn++;
if(ledn<=8)
{
if(keyvalue==0)
P2=(0x01<<ledn);(0x80>>ledn);
if(keyvalue==1)
P2=
}
else{
if(keyvalue==0)
ledn=0;P2=0x01;0x80;
if(keyvalue==1)
ledn=0;P2=
}
if(keyvalue==2){
was++;
if(was<=4)
{
switch (was)
{
case 1:P2=0x7e;break;
case 2:P2=0xbd;break;
case 3:P2=0xdb;break;
case 4:P2=0xe7;break;
}
}
else
was=0;
}
if(keyvalue==3)
{
was++;
if(was<=4)
{
switch (was)
{
case 1:P2=0xe7;break;
case 2:P2=0xdb;break;
case 3:P2=0xbd;break;
case 4:P2=0x7e;break;
}
}
else
was=0;
}
}
}
运行结果及报错内容
希望让4和5号键能实现暂停和启动
我的解答思路和尝试过的方法
我试过用定义一个标志,但是不知道怎么放进去。
我想要达到的结果
实现暂停和启动