⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcacp.c

📁 BTF340实验程序
💻 C
字号:
/******************************************************************
本程序为PCA捕捉例程,判断4个(S1-S4)按键是否按下然后触发中断对LED灯
D2\D3取反同时也完成按键扫描的过程
******************************************************************/
#include <c8051f340.h> 
        
#define uchar unsigned char
#define uint unsigned int

void port_init (void);			  //端口初始化
void pca_init (void);			  //PCA初始化

sbit led0= P2^6;				  //定义灯输出脚
sbit led1= P2^4;                  //定义灯输出脚
void delay(uint d)
{
 uint i;
 for(i=0;i<d;i++);
 }
/******************************************************************
主程序
******************************************************************/
void main (void) {
   
   PCA0MD &= ~0x40;               //关闭看门狗定时器 
   OSCICN |= 0x03;                //内部12M晶振
   port_init ();			      //端口初始化
   pca_init ();				      //PCA初始化       
   EA = 1;
   while(1){ 
    }  
}
/******************************************************************
端口初始化程序
******************************************************************/
void port_init (void)
{
   P0SKIP    = 0xFF;
   P1SKIP    = 0xFF;			  //跳过前面I/O端口
   XBR1      = 0x44;              // 使能交叉开关,CEX0,连到P2.2
   P2MDOUT  |= 0x50;              // 使能P2.6,P2.4为推挽输出
}
/******************************************************************
PCA初始化程序
******************************************************************/
void pca_init (void)
{
	EIE1 = 0x10;		          //允许PCA0中断		
   	PCA0CPM0 = 0x11;			  //模块0负沿捕捉使能与配匹使能
	PCA0CPM1 = 0x11;			  //模块1负沿捕捉使能与配匹使能
	PCA0CPM2 = 0x11;			  //模块2负沿捕捉使能与配匹使能
	PCA0CPM3 = 0x11;			  //模块3负沿捕捉使能与配匹使能
}

/******************************************************************
PCA中断程序
******************************************************************/

void PCA_ISR (void) interrupt 11
{
    if(CCF0==1)
	  { 
	  delay(50000);
	  delay(50000);
	  delay(20000);
	  delay(20000);
	  while(CCF0==0);
	   led0=~led0;
    	CCF0 = 0;		            //清捕捉中断标志
	   
	   }
	if(CCF1==1)
	  {delay(50000);
	   delay(50000);
	   delay(20000);
	   delay(20000);
	  while(CCF1==0);
	    led0=~led0;
    	CCF1 = 0;		            //清捕捉中断标志
	   }
	if(CCF2==1)
	  { delay(50000);
	    delay(50000);
		delay(20000);
		delay(20000);
		 while(CCF2==0);
	    led1=~led1;
    	CCF2 = 0;		            //清捕捉中断标志
	   }
	if(CCF3==1)
	  { delay(50000);
	    delay(50000);
		delay(20000);
		delay(20000);
		 while(CCF3==0);
	    led1=~led1;
    	CCF3 = 0;		            //清捕捉中断标志
	   } 


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -