- 打卡等级:偶尔看看II
- 打卡总天数:28
- 最近打卡:2025-07-01 08:26:48
已绑定手机
中级会员
- 积分
- 240
|
第7集定时器中断与按键处理
#include "ai8051u.h" //头文件不分大小写,但关键字分大小写
#include "ai_usb.h" //USB库和USB虚拟设备的头文件
#include "KEY.H"
#define u8 unsigned char
#define u16 unsigned int
/*---------变量声明区---------*/
u8 X = 20;
u8 Y = 10;
u8 Key_Slow_Down; //按键减速变量用于按键消抖
u8 Key_Val,Key_Down,Key_Up,Key_Old; //按键处理变量,按键值,按键下降沿,上升沿,长按变量
u8 Key_Num; //按键按下次数
u16 Timer1000ms_Count; //定时器1秒计时变量
u8 Led_Start; //LED闪烁标志
/*---------函数声明区---------*/
void Timer0_Init(void); //1毫秒@24.000MHz
/*---------按键处理---------*/
void Key_Proc()
{
if(Key_Slow_Down)return;
Key_Slow_Down = 1;
Key_Val=Key_Read();
Key_Down = Key_Val&(Key_Val^Key_Old);
Key_Up = ~Key_Val&(Key_Val^Key_Old);
Key_Old=Key_Val;
switch(Key_Down)
{
case 1:
Key_Num++;
printf("Key_Num:%d\r\n",Key_Num);
break;
case 2:
P20 = 1;
P21 = 0;
break;
}
}
/*---------MAIN主函数--------*/
void main(void)
{
EAXFR = 1; //允许访问扩展的特殊寄存器,XFR
WTST = 0; //设置取程序代码等待时间,赋值为 0 表示不等待,程序以最快速度运行
CKCON = 0; //设置访问片内的 xdata 速度,赋值为 0 表示用最快速度访问,不增加额外的等待时间
P0M0 = 0x00; P0M1 = 0x00; //初始化P0口为准双向口模式
P1M0 = 0x00; P1M1 = 0x00; //初始化P1口为准双向口模式
P2M0 = 0x00; P2M1 = 0x00; //初始化P2口为准双向口模式
P3M0 = 0x00; P3M1 = 0x00; //初始化P3口为准双向口模式
P4M0 = 0x00; P4M1 = 0x00; //初始化P4口为准双向口模式
P5M0 = 0x00; P5M1 = 0x00; //初始化P5口为准双向口模式
usb_init();
//初始化USB模块,并且会将【P3.0,P3.1】初始化为高阻输入,不影响USB【D-,D+】通讯
Timer0_Init(); //1毫秒@24.000MHz
EA = 1; //使能总中断
while (1)
{
if(bUsbOutReady)
//USB库中有定义bUsbOutReady位变量,查询方式必须用一次“usb_OUT_done();”
{
printf("X/Y=%d\r\n",(u16)X/Y);
printf("X%%Y=%d\r\n",(u16)X%Y);
usb_OUT_done();
//当使用查询方式if(bUsbOutReady),查询调用USB库函数时,在数据处理完成后
//必须调用一次“usb_OUT_done();”这样才能接收下一包数据。
}
Key_Proc();
}
}
/*---定时器0初始化函数---*/
void Timer0_Init(void) //1毫秒@24.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x30; //设置定时初始值
TH0 = 0xF8; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
/*---定时器0中断服务函数---*/
void Timer0_Isr(void) interrupt 1
{
if(++Key_Slow_Down==10)Key_Slow_Down=0;
if(++Timer1000ms_Count==1000)
{
Timer1000ms_Count=0;
Led_Start^=1;
P20 = Led_Start;
}
}
|
|