04-按键检测(捕获中断法)

1、看引脚图有PCA中断

2、配置寄存器设置

P_SW1 |= ~(1 << 5)

P_SW1 |= (1 <<4 );

引脚选择了P3.5   P3.6  P3.7

CCON = 0x00;

CMOD = 0x08;选择系统时钟

CCAPM0 = 0x11;进行下降沿捕获,允许中断

CCAPM1 = 0x11;

CCAPM2 = 0x11;

捕获中断号为7

3、程序代码

#include "stc8g.h"
#include "intrins.h"

sbit K1 = P3^7;
sbit K2 = P3^6;
sbit K3 = P3^5;

sbit LED_R = P0^5;//红色灯
sbit LED_Y = P0^6;//黄色LED
sbit LED_G = P0^7;//绿色LED

void Delay1us()
{
	unsigned char i;
	_nop_();
	_nop_();
	i = 9;
	while(--i);
}

void Delay1ms()
{
	unsigned char i,j;
	_nop_();
	_nop_();
	i = 46;
	j = 113;
	do{
		while(--j);
	}while(--i);
}

void Delay_ms(unsigned int ms)
{
	while(ms--)
	{
		Delay1ms();
	}
}

void PCA_Init()
{
	P_SW1 |= ~(1 << 5);
	P_SW1 |= (1 << 4);
	
	CCON = 0x00;//清除中断标志
	CMOD = 0x08;//选择系统时钟
	CCAPM0 = 0x11;//进行下降沿捕获,允许中断
	CCAPM1 = 0x11;
	CCAPM2 = 0x11;
	EA = 1;
}

void PCA_Isr() interrupt 7
{
	if(CCF0 == 1)
	{
		CCF0 = 0;
		LED_R = !LED_R;
	}
	if(CCF1 == 1)
	{
		CCF1 = 0;
		LED_Y = !LED_Y;
	}
	if(CCF2 == 1)
	{
		CCF2 = 0;//捕获中断标志位清0
		LED_G = !LED_G;
	}
}

void main()
{
	P0M0 = 0x00;
	P0M1 = 0x00;
	P3M0 = 0x00;
	P3M1 = 0x00;
	
	PCA_Init();
	while(1)
	{
	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_41392061

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值