永发信息网

单片机怎么用一个按钮控制多种花样流水灯,只要一按就马上执行下一种花样。

答案:6  悬赏:0  手机版
解决时间 2021-01-18 08:04
  • 提问者网友:無理詩人
  • 2021-01-17 07:44
单片机怎么用一个按钮控制多种花样流水灯,只要一按就马上执行下一种花样。
最佳答案
  • 五星知识达人网友:野慌
  • 2021-01-17 09:00
#include
#define uchar unsigned char
uchar cnt,keyval=0;
uchar led1,led2,led3;
unsigned int dat;
void int00() interrupt 0
{
keyval++;
keyval%=4;
switch(keyval)
    {
    case 0:led1=0xfe;led2=0xff;led3=0xff;break;
    case 1:led1=0x55;led2=0x55;led3=0x55;break;
    case 2:led1=0xff;led2=0xff;led3=0x7f;break;
    case 3:led1=0xf0;led2=0xf0;led3=0xf0;break;
    default:break;
    }
    dat=0;
    dat|=led3;dat<<8;
    dat|=led2;dat<<8;
    dat|=led1;
}
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
cnt++;
if(cnt>=10)
    {
    cnt=0;
    switch(keyval)
        {
        case 0:dat<<=1;Cy=(dat>>24 & 0x01);dat|=Cy;
               P0=dat;P1=dat>>8;P2=dat>>16;
               break;
        case 1:dat=~dat;
               P0=dat;P1=dat>>8;P2=dat>>16;
               break;
        case 2:Cy=dat&0x01;dat&=0x7fffff;dat|=(Cy<<23);
                       P0=dat;P1=dat>>8;P2=dat>>16;
                   break;
                case 3:dat=~dat;
                       P0=dat;P1=dat>>8;P2=dat>>16;
                       break;
         default:break;
         }
    }
}
main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EX0=1;
IT0=1;
EA=1;
while(1);
}
全部回答
  • 1楼网友:旧脸谱
  • 2021-01-17 11:57
中断有错你看看追问能帮我写一个这样的C程序吗?
  • 2楼网友:洎扰庸人
  • 2021-01-17 11:45
设置几个不同的标志位就行啦
  • 3楼网友:封刀令
  • 2021-01-17 11:17
把那个IO口设为中断。
进中断后。标志位加1。
然后跳到标志位对应的程序段执行。
  • 4楼网友:你可爱的野爹
  • 2021-01-17 09:26
你用中断就可马上执行。还有你如是用的扫描程序编的好也可马上执行的。这你自己 再想想吧。只要查到有键按下,就把那花样寄存器中加一,再用间转指令立即跳到不同的花样号的入口处。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯