//首先导入头文件
#include "iocc2530.h"
//宏定义
#define D1 P1_0
#define D2 P1_1
#define SW1 P1_2
unsigned int count=0; //定时器每隔0.5s +1
unsigned int F_Key=0; //按键按下的次数
void Init_Port()
{
P1SEL &=~0X03; //设置为普通I/O端口
P1DIR |=0X03; //设置为输出端口
P1 &=~0X03; //关闭LED1和LED2
//SW1
P1SEL &=~0X04; //设置为普通I/O端口
P1DIR &=~0X04; //设置为输入端口
P1INP &=~0X04; //设置P1_2口为上拉或下拉
P2INP &=~0X40; //设置P1口所有引脚使用上拉
}
//延时函数
void Delay(unsigned int t)
{
while(t--);
}
void Timer1() //0.5s定时
{
T1CTL |=0X0D; //将定时器1设置为128分频,模模式
//通过公式计算出0.5秒 的十进制数字,并把它转化为16进制
T1CC0L =0X24; //低八位
T1CC0H =0Xf4; //高八位
T1IE =1; //使能定时器1中断
T1OVFIM =1; //使能定时器1溢出中断
EA=1; //使能总中断
}
#pragma vector=T1_VECTOR
__interrupt void T1_int(void)
{
//清除定时器1的溢出中断标志位
count++;
if(count==4)
{
if(F_Key==1)
{
D1=~D1;
D2=~D2;
}
count=0;
}
T1STAT &=~0X20;
}
//按键扫描函数
void Scan_Key()
{
if(SW1==0){ //检测是否有按键按下
Delay(500);
if(SW1==0){ //去抖动处理
while(SW1==0);
F_Key++;
if(F_Key==1)//按键按下次数为1,LED1,LED2每隔两秒切换亮灭状态
{
D1=1;
D2=0;
Timer1(); //启动定时器1实现切换亮灭
}
else if(F_Key==2)//按键按下次数为2,关闭LED1和LED2
{
D1=0;
D2=0;
F_Key=0;//将按键按下次数清0
}
}
}
}
int main()
{
Init_Port();
while(1){
Scan_Key(); //反复调用按键扫描函数
}
}