功能实现:四个按键k1、k2、k3、k4分别对应流水灯的开启、关闭、加速、减速
代码:
#include "reg52.h"
#include<intrins.h> //流水灯的左移函数需要用到这个头文件
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
u16 time=0;
u8 flag=0;
sbit LED1=P0^0;
sbit LED2=P0^1;
sbit LED3=P0^2;
sbit LED4=P0^3;
sbit LED5=P0^4;
sbit LED6=P0^5;
sbit LED7=P0^6;
sbit LED8=P0^7;
#define led P0
void delay(unsigned int ms) //延时函数-单位ms
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
void main()
{
u8 i;
IT0=0;
EX0=1;
EA=1;
while(1)
{
for(i=0;i<7&&flag==1;i++) //将led左移一位
{
led=_crol_(led,1);
delay(time);
}
}
}
void Timer() interrupt 0 //外部中断0
{
if(k1==0){
delay(10); //消除抖动
flag=1;
led=0xfe;
time=500;
}
if(k2==0){
delay(10); //消除抖动
flag=0;
led=0xff;
}
if(k3==0){
delay(10); //消除抖动
flag=1;
time=100;
}
if(k4==0){
delay(10); //消除抖动
flag=1;
time=700;
}
}
Proteus仿真图:
总结:初学单片机,为了这个大实验也到各大网站上参考了一些资料,代码有什么不对、不足的地方,还望各位大佬多多指正!?
|