久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
多個按鍵控制流水燈切換程序
[打印本頁]
作者:
heicad
時間:
2016-3-11 23:22
標題:
多個按鍵控制流水燈切換程序
本帖最后由 heicad 于 2016-3-11 23:25 編輯
有四種流水模式,想通過四個按鈕分別控制,并使用外部打斷來立即切換程序,怎么都寫不了,每次都是要通過按復位再安按鈕來切換程序,用了switch語句還是不行,求大神解答,
電路圖的按鍵位置錯了,本來想法是用外部打斷k1切換程序,按一下是流水燈加數(shù)碼管閃動,再按一次立即切換呼吸燈,在按一下立即切換拖尾燈,現(xiàn)在就想換個立即切換的,分別定義k1,k2,k3按一下就立即切換,我寫的程序不能立即切換,求大神解答一下,謝謝啦
#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;
}
}
復制代碼
就是這幾個程序,現(xiàn)在先把第一個流水燈的延時換成定時器延時,怎么改想立即切換
作者:
heicad
時間:
2016-3-11 23:22
子函數(shù)void led1();
void led2();
void led3();里有while(1)語句出不來---死循環(huán)。
要想用中斷的話只有兩個外部中斷,不用中斷也可以實現(xiàn)的。設置四個標記變量代表四個按鍵的情況,再掃描顯示OK!!
作者:
heicad
時間:
2016-3-11 23:22
樓上教你了,每一個子程序的while(1)出不來,你的主函數(shù)只執(zhí)行了void led1();。后面的都執(zhí)行不到
作者:
heicad
時間:
2016-3-11 23:23
在循環(huán)體里加如按鍵條件 先back 在執(zhí)行
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
综合久久一区
|
夜夜爽99久久国产综合精品女不卡
|
国产99久久
|
亚洲手机在线
|
少妇黄色
|
香蕉超碰
|
国产成人99久久亚洲综合精品
|
av一级久久
|
久久精品青青大伊人av
|
成人欧美一区二区三区黑人孕妇
|
国产午夜精品一区二区三区
|
国产精品国产亚洲精品看不卡15
|
日本视频免费
|
国产成人精品在线
|
精品久久中文字幕
|
精品国产一区二区三区久久狼黑人
|
91视视频在线观看入口直接观看
|
亚洲三区在线
|
国产区精品在线观看
|
三级黄色大片网站
|
日韩高清中文字幕
|
亚洲欧美综合网
|
久久综合久色欧美综合狠狠
|
国产乱人伦
|
色婷婷精品久久二区二区蜜臂av
|
亚洲国产乱码
|
一区二区日韩精品
|
正在播放国产精品
|
成av在线
|
福利视频网
|
一区二区三区四区日韩
|
日本免费一区二区三区四区
|
可以在线观看av的网站
|
аⅴ资源新版在线天堂
|
久久久久久亚洲
|
91久久久久
|
久久久久久久久99
|
黑人巨大精品
|
国产乱码精品一区二区三区忘忧草
|
国产99久久精品
|
久久不射网
|