标题: 求高手帮忙改一段代码 [打印本页]
作者: 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.51hei.com/bbs/) |
Powered by Discuz! X3.1 |