#include<reg52.h> //包含 reg52.h 这个头文件
#include<intrins.h>
#define led P2 //
sbit k1=P0^0; // 启动按键
sbit k2=P0^1; // 停止按键
void delay1s(void); //延时函数
void liushuideng(); //流水灯的循环
void main()
{
led=~0xff;
k1=1;
while(1)
{
if(k1==0)
{
liushuideng();
}
}
}
void delay1s(void) //误差 -0.000000000227us
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
void liushuideng()
{
char i;
char j=0;
char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED灯的数组
while(1)
{
if(j<2) //循环的次数
{
for(i=0;i<8;i++) //循环i;i+1
{
led=~a[i]; //LED灯通过遍历数组产生变化
delay1s(); //延时500ms
}
j++; //循环次数累加
}
led=~0xff;
if(k1!=1&&j!=0)
{
j=0;
}
}
}
// 改了一下试试
#include<reg52.h> //包含 reg52.h 这个头文件
#include<intrins.h>
#define led P2 //
char i;
sbit k1=P3^6; // 启动按键
sbit k2=P3^7; // 停止按键
bit s=0; // 启停标志
char a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED灯的数组
void delay1s(void); //延时函数
void liushuideng(); //流水灯的循环
void main()
{
led=~0xff;
k1=1;
while(1)
{
if(k1==0)
{
s = 1 ;
}
if(k2==0)
{
s = 0 ;
led=~0xff;
}
if(s==1)
{
i = i + 1 ;
if(i==8){i=0;}
led=~a[i]; //LED灯通过遍历数组产生变化
delay1s(); //延时500ms
}
}
}
void delay1s(void) //误差 -0.000000000227us
{
unsigned char a,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
怎么用中断的方式??