實作按鍵控制流水燈的啟動和轉向
proteus仿真連結:https://pan.baidu.com/s/1On3Sc8_jAtmM8BdRrFcPbw 提取碼:qwer
#include "reg52.h" //定義一些特殊寄存器
#include<intrins.h> //調用led移動庫(_CROL_ _CROR_)
typedef unsigned int u16; //u16代替unsigned int
typedef unsigned char u8; //u8代替unsigned char
#define led P2 //宏定義P2口
sbit k1=P3^1;
sbit k2=P3^2; //位定義
u16 m=1,n=1; //定義無符号整型變量
/**************延時函數***********/
void delay(u16 i)
{
while(i--);
}
/************按鍵函數************/
void keypros()
{ while(m)
if(k1==0)
{
delay(1000);
if(k1==0)
m--;
}
}
/******開啟外部中斷******/
void Int0Init()
{ IT0=1;
EX0=1;
EA=1;
}
/**********主函數部分*******/
void main()
{ u8 i;
led=0xaa; //1357位led亮起
delay(50000);
keypros(); //調用k1按鍵實作流水燈總開關
led=0xfe;
delay(50000);
Int0Init(); //調用外部中斷開啟函數
while(1)
{
while(n)
{
for(i=0;i<7;i++) //流水燈右移
{ if(n=1){
led=_crol_(led,1);
delay(50000); }
else
i=7;
}
}
while(!n)
{
for(i=0;i<7;i++) //流水燈左移
{ if(n==0) {
led=_cror_(led,1);
delay(50000);}
else
i=7;
}
}
}
}
/***********************************
*函數名: Int0 ()
*作用:通過外部中斷改變n的值實作流水燈轉向
***********************************/
void Int0 () interrupt 0
{
delay(1000);
if(k2==0)
{
n=!n;
}
}