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

📄 main.c

📁 LPC1114_例程和教程
💻 C
字号:
/****************************************************
*名  称:	旋转编码器								*
*功  能:   旋转编码器、状态选择、串口输出、中断学习*
*备  注:	2011.1.9								*
*贞明电子: http://shop58972409.taobao.com			*
*****************************************************/
/**************** 头文件调用&&宏定义 ****************/
#include "LPC11xx.h"
#include "gpio.h"
#include "UART.h"
/******************* 全局变量定义 *******************/
uint8_t state=0;	
/********************** 函数声明 ********************/
__inline void delay_ms(uint32_t a);	
void UserIO(void);	
void LED1(void);
void LED2(void);
void LED3(void);			
/********************** 主函数 **********************/
int main(void)
{
 	SystemInit();	//系统初始化,包括使能时钟
	GPIOInit();
	UserIO();
	UARTInit(115200); //初始化串口波特率为115200
	delay_ms(1000);
	UARTSend("贞明电子:http://shop58972409.taobao.com\r\n",42);
	while(1)
	{	
		switch (state)
		{
			case 1:			 //状态1,LED3亮
				LED3();
				break;
			case 2:			 //状态2,LED2亮
				LED2();
				break;
			case 3:			//状态3,LED1亮
				LED1();
				break;
			default:
				break;
			}
	}
}												   
/********************** 函数定义 ********************/
/****************************************************
*名  称:	延时函数    							*
*参  数:   延时时间								*
*备  注:	内联函数    							*
*****************************************************/
__inline void delay_ms(uint32_t a)    //1ms延时函数
{                           
	uint32_t i;
	while( --a != 0)
	{
   		for(i = 0; i<5500; i++);
	}             
}
/****************************************************
*名  称:	UserIO    								*
*参  数:   无										*
*备  注:	用户IO初始化     	     				*
*****************************************************/
void UserIO(void)
{
	LPC_IOCON->PIO0_2=0x00;		//设置为输入
	LPC_IOCON->PIO1_8=0x00;		//设置为输入
	LPC_IOCON->PIO1_6=0x01;		//配置为UART
	LPC_IOCON->PIO1_7=0x01;		//配置为UART
 	GPIOSetDir(PORT0,2,0);		//Set PIO0_2 Input
	GPIOSetDir(PORT1,8,0);		//Set PIO1_8 Input	
	GPIOSetInterrupt(PORT0,2,0,0,1);//端口号, 位地址, sense, single/doube, 上升/下降沿
	GPIOSetInterrupt(PORT1,8,0,0,0); //上升沿触发中断
	GPIOIntEnable(PORT0,2);		//使能该端口中断
	GPIOIntEnable(PORT1,8);		//使能该端口中断

	GPIOSetDir(2,8,1);			//设置P2.8为输出,LED1
	GPIOSetDir(2,9,1);			//设置P2.9为输出,LED2
	GPIOSetDir(3,4,1);			//设置P3.4为输出,LED3
	//调用头文件中函数输出方法
	GPIOSetValue(PORT2,8,1);	//设置P2.8输出0,点亮LED1
	GPIOSetValue(PORT2,9,1);	//设置P2.9输出0,点亮LED2
	GPIOSetValue(PORT3,4,1);	//设置P3.4输出0,点亮LED3
}
void PIOINT1_IRQHandler(void)
{
  uint32_t regVal;
  regVal= GPIOIntStatus(PORT1, 8);	//得到P1_8的中断状态
  if(regVal)						
  {	
  	if((LPC_GPIO0->DATA&0x04)!=0x04) //上升沿判断是否为低电平
	{
		UARTSend("Right",5);		//输出向右
		if(state<4)					//状态变化,LED顺序向右移动
			state++;
		if(state==4)
			state=1;	
	}		
	GPIOIntClear( PORT1, 8);	   //清除中断标志
  }	
  return;
}

void PIOINT0_IRQHandler(void)
{
  uint32_t regVal;
  regVal= GPIOIntStatus(PORT0, 2);	//得到P0_2的中断状态
  if(regVal)
  {	
	if((LPC_GPIO1->DATA&0x100)==0x100) //下降沿判断是否为高电平
	{
		UARTSend("Left",4);			//状态变化,LED顺序向左移动
		if(state>0)
			state--;
		if(state==0)
			state=3;
	}	
	GPIOIntClear( PORT0, 2);	   //清除中断标志
  }	
  return;
}

 void LED1(void)				//LED1亮其余灭
 {
 	GPIOSetValue(PORT2,8,0);	//设置P2.8输出0,LED1亮
	GPIOSetValue(PORT2,9,1);	//设置P2.9输出1,LED2灭
	GPIOSetValue(PORT3,4,1);	//设置P3.4输出1,LED3灭
 }

 void LED2(void)				//LED2亮其余灭
 {
 	GPIOSetValue(PORT2,8,1);	//设置P2.8输出1,LED1灭
	GPIOSetValue(PORT2,9,1);	//设置P2.9输出1,LED2灭
	GPIOSetValue(PORT3,4,0);	//设置P3.4输出0,LED3亮
 }

 void LED3(void)				//LED3亮其余灭
 {
 	GPIOSetValue(PORT2,8,1);	//设置P2.8输出1,LED1灭
	GPIOSetValue(PORT2,9,0);	//设置P2.9输出0,LED2亮
	GPIOSetValue(PORT3,4,1);	//设置P3.4输出1,LED3灭
 }

⌨️ 快捷键说明

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