欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
多個(gè)按鍵控制流水燈切換程序
[打印本頁(yè)]
作者:
heicad
時(shí)間:
2016-3-11 23:22
標(biāo)題:
多個(gè)按鍵控制流水燈切換程序
本帖最后由 heicad 于 2016-3-11 23:25 編輯
有四種流水模式,想通過(guò)四個(gè)按鈕分別控制,并使用外部打斷來(lái)立即切換程序,怎么都寫(xiě)不了,每次都是要通過(guò)按復(fù)位再安按鈕來(lái)切換程序,用了switch語(yǔ)句還是不行,求大神解答,
電路圖的按鍵位置錯(cuò)了,本來(lái)想法是用外部打斷k1切換程序,按一下是流水燈加數(shù)碼管閃動(dòng),再按一次立即切換呼吸燈,在按一下立即切換拖尾燈,現(xiàn)在就想換個(gè)立即切換的,分別定義k1,k2,k3按一下就立即切換,我寫(xiě)的程序不能立即切換,求大神解答一下,謝謝啦
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define led P1
uchar abit=16;
uchar atimer0_n;
uchar code abit8[9]={1,2,4,8,16,32,64,128,0};
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
uchar nn;
char a,b,c,d,e,f,g,h;
sbit k1=P2^3;
sbit k2=P2^2;
sbit k3=P2^1;
void led1();
void led2();
void led3();
void Delay10ms(unsigned int);
void delay(int x)
{ int i;
for(i=x;i>0;i--);
}
void Delay10ms(unsigned int c) //誤差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=38;b>0;b--)
for(a=130;a>0;a--);
}
void main()
{while(1)
{
if(k1==0)led1();
if(k2==0)led2();
if(k3==0)led3();
}
}
void led1()
{
unsigned int i;
led=0xfe;
P0=table[i];
Delay10ms(50);
while(1)
{
for(i=0;i<7;i++)
{
led=_crol_(led,1);
P0=table[i+1];
Delay10ms(50);
}
for(i=7;i>0;i--)
{
led=_cror_(led,1);
P0=table[i-1];
Delay10ms(50);
}
}
}
void led2()
{
int x,cycle=370;
while(1)
{
for(x=0x00;x<cycle;x++)
{
P1=0;
delay(x-50);
P1=0xff;
delay(cycle-x);
}
for(x=cycle;x>0;x--)
{
P1=0;
delay(x-50);
P1=0xff;
delay(cycle-x);
}
}
}
void led3()
{ TMOD = 0x11;
TL0 = 0x00; //2.5ms
TH0 = 0xF7;
TF0 = 0;
TR0 = 1;
EA=1;ET0=1;
while(1)
{
a=abit;
if(a>7||a<0)
a=8;
b=abit-1;
if(b>7||b<0)
b=8;
c=abit-2;
if(c>7||c<0)
c=8;
d=abit-3;
if(d>7||d<0)
d=8;
e=abit-4;
if(e>7||e<0)
e=8;
f=abit-5;
if(f>7||f<0)
f=8;
g=abit-6;
if(g>7||g<0)
g=8;
h=abit-7;
if(h>7||h<0)
h=8;
atimer0_n++;
if(atimer0_n==520)
atimer0_n=0;
if(atimer0_n<5)
P1=0xff-abit8[a];
if(atimer0_n<40)
P1=0xff-abit8[b];
if(atimer0_n<150)
P1=0xff-abit8[c];
if(atimer0_n<255)
P1=0xff-abit8[d];
if(atimer0_n<300)
P1=0xff-abit8[e];
if(atimer0_n<380)
P1=0xff-abit8[f];
if(atimer0_n<460)
P1=0xff-abit8[g];
if(atimer0_n<520)
P1=0xff-abit8[h];
}
}
atimer0 () interrupt 1
{
TL0 = 0x00; //50ms
TH0 = 0x4C;
nn++;
if(nn==1)
{
nn=0;abit--;
if(abit==0)
abit=32;
}
}
復(fù)制代碼
就是這幾個(gè)程序,現(xiàn)在先把第一個(gè)流水燈的延時(shí)換成定時(shí)器延時(shí),怎么改想立即切換
作者:
heicad
時(shí)間:
2016-3-11 23:22
子函數(shù)void led1();
void led2();
void led3();里有while(1)語(yǔ)句出不來(lái)---死循環(huán)。
要想用中斷的話只有兩個(gè)外部中斷,不用中斷也可以實(shí)現(xiàn)的。設(shè)置四個(gè)標(biāo)記變量代表四個(gè)按鍵的情況,再掃描顯示OK!!
作者:
heicad
時(shí)間:
2016-3-11 23:22
樓上教你了,每一個(gè)子程序的while(1)出不來(lái),你的主函數(shù)只執(zhí)行了void led1();。后面的都執(zhí)行不到
作者:
heicad
時(shí)間:
2016-3-11 23:23
在循環(huán)體里加如按鍵條件 先back 在執(zhí)行
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1