/***
//按键识别演示程序,《8051U深度入门到32位51大型实战教学视频》学习心得分享
//IO口边沿触发测试程序,测试可以响应多高的信号频率
//单片机型号:AI8051U 40MHz,擎天柱 Ai8051U转89C52核心功能实验板
//外部通过正点原子示波器输入测试信号,双边沿触发响应信号频率500KHz频率,单边沿触发响应信号频率1000KHz
//本程序使用P27端口输出触发信号,将其输入P32端口测试
//点击要编译的main.c右击在options for File "main.c"勾选编译到工程
***/
#include <ai8051u.h>
BOOL CurState; //当前按键状态
BOOL PreState = 1; //前一次按键状态假定为高
BOOL EdgeTrig = 0; //保存边沿触发值
sbit in = P3^2; //输入信号口
sbit out = P2^7; //输出信号测试口
void main(void){
WTST = 0; //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
EAXFR = 1; //扩展寄存器(XFR)访问使能
CKCON = 0; //提高访问XRAM速度
P0M1 = 0x00; P0M0 = 0x00;
P1M1 = 0x00; P1M0 = 0x00;
P2M1 = 0x00; P2M0 = 0x00;
P3M1 = 0x00; P3M0 = 0x00;
P4M1 = 0x00; P4M0 = 0x00;
P5M1 = 0x00; P5M0 = 0x00;
P6M1 = 0x00; P6M0 = 0x00;
P7M1 = 0x00; P7M0 = 0x00;
while (1){
//////// 双边沿触发 双边沿触发响应信号频率500KHz
CurState = in; //获取当前按键状态
// EdgeTrig = CurState ^PreState; //检测按键变化边沿,上升沿、下降沿均会触发
out = CurState ^ PreState;
PreState = CurState; //将当前按键值保存,作为前一次按键值,用于下一次边沿检测
/////////////////////////////////////////////////////////////////////////////
/***
//////// 上升沿触发 单边沿触发响应信号频率1000KHz频率
// CurState = in; //获取当前按键状态
// out = CurState & PreState;
// PreState = ~CurState;
/////////////////////////////////////////////////////////////////////////////
//////// 下升沿触发 单边沿触发响应信号频率1000KHz频率
// CurState = ~in; //获取当前按键状态
// out = CurState & PreState;
// PreState = ~CurState;
/////////////////////////////////////////////////////////////////////////////
***/
}
}