標題: 求高手幫忙改一段代碼 [打印本頁]
作者: xymiss 時間: 2017-10-3 03:05
標題: 求高手幫忙改一段代碼
幫忙改成按一下按鍵流水燈開始 ,再按一下中段并重新開始。不按不亮 每按一下只走一遍。不循環。謝謝!
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit button = P3^0;
uchar press = 1;
uchar luishui = 0xfe;
void Delay(uchar z)
{
uchar x, y;
for(x = z; x > 0; x--) for(y = 255; y > 0; y--);
}
void main()
{
IT0 = 1;
EX0 = 1;
EA = 1;
while(1) {
if(press == 1) P1 = 0xff;
if(press == 0) {
P1 = luishui;
luishui = _crol_(luishui, 1);
Delay(200);
}
}
}
X0_INT() interrupt 0
{
press += 1; if(press == 2) press = 0;
Delay(10);
while(button == 0);
}
作者: liut_text 時間: 2017-10-3 03:05
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit button = P3^2;//外部中斷P3^2和P3^3
int b=1;
bit press = 1;
uchar luishui = 0xfe;
void Delay(uchar z)
{
uchar x, y;
for(x = z; x > 0; x--) for(y = 255; y > 0; y--);
}
void main()
{
int i=0;
IT0 = 1;
EX0 = 1;
EA = 1;
while(press) P1=0xff;
while(!press)
{
b=1;
luishui=0xfe;
for(i=0;i<8;i++)
{
if(!b)break;
P1=luishui;
Delay(200);
luishui=_crol_(luishui,1);
}
if(i==8)press=1;
}
}
void X0_INT() interrupt 0
{
b=0;
press=0;
}
你看看是不是這樣
作者: wulin 時間: 2017-10-3 11:37
外部中斷P3.2~P3.3
作者: wulin 時間: 2017-10-3 13:42
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit button = P3^2;
uchar press = 1;
uchar luishui = 0xfe;
void Delay(uchar z)
{
uchar x, y;
for(x = z; x > 0; x--)
for(y = 255; y > 0; y--);
}
void main()
{
P3=0x0f;
IT0 = 1;
EX0 = 1;
EA = 1;
while(1)
{
if(press == 1)
P1 = 0xff;
if(press == 0)
{
P1 = luishui;
luishui = _crol_(luishui, 1);
Delay(250);
if(P1 == 0x7f)
press = 1;
}
}
}
X0_INT() interrupt 0
{
press = 0;
// if(press == 2)
// press = 0;
// Delay(10);
// while(button == 0);
}
作者: 不倒翁.WZT 時間: 2017-10-5 07:07
標題: RE: 求高手幫忙改一段代碼
#include<reg51.h> //51系列單片機頭文件
#include<intrins.h> //左右循環頭文件
#define uint unsigned int //宏定義
#define uchar unsigned char //宏定義
void delayms(uint); //聲明子函數
uchar n; //定義一個變量,用來控制循環次數
uchar aa; //定義一個變量,用來給P1口賦值
void main() //主函數
{
IT0=1; //下降沿觸發
EX0=1; //INT0中斷允許
IT1=1; //下降沿觸發
EX1=1; //INT1中斷允許
EA=1; //總中斷允許 //P1口賦初值11111110
while(1){} //大循環
}
void delayms(uint X) //延時子函數
{
uint i,j; //定義i,j
for(i=X;i>0;i--) //i=xms即延時約xms毫秒
for(j=110;j>0;j--);
}
void INT0_1(void) interrupt 0 using 1
{
EX0=0; //進入外部INT0中斷關閉,防止誤操作
aa=0x01;
P0=aa; //先點亮一個發光管
aa=_crol_(aa,1); //將aa循環左移1位后再賦給aa
delayms(500); //調用延時500ms
EX0=1; //中斷函數結束,外部INT0中斷打開,中斷生效
}
作者: xymiss 時間: 2017-10-5 22:43
本帖最后由 xymiss 于 2017-10-6 22:49 編輯
謝謝老師。明白了
歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |