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

📄 led.c

📁 基于ARM Winbond W90P710学习板的LED驱动的开发。
💻 C
字号:
/****************************************************************************
 *
 * 				       电子科技大学嵌入式软件工程中心 版权所有
 *
 ***************************************************************************/

//实现原理:
//	1.设置LED指示灯对应的处理器针脚 GPIO_52-59 为GPIO I/O类型:Led_Open()
//	2.向GPIO_52-59的针脚上全部放置低电平:Led_Open()
//	3.根据具体的情况,设置GPIO_52-59中某些针脚为输出方向,点亮指定的Led指示灯:Led_Write()
//	4.向GPIO_52-59的针脚上全部放置高电平,使不能操作Led: Led_Close()


#include "Led.h"

int Led_Open(void)
{
	unsigned int temp;

//REG_GPIO_CFG4
//将GPIO_52-59设置成GPIO I/O类型。
//相应的针脚的控制位必须设置成"00"
//	*****************************************************************
//	*       |       |       |       |       |       |       |       *
//	* LED_7 | LED_6 | LED_5 | LED_4 | LED_3 | LED_2 | LED_1 | LED_0 *
//	*       |       |       |       |       |       |       |       *
//	*  00   |  00   |  00   |  00   |  00   |  00   |  00   |   00  *
//	*       |       |       |       |       |       |       |       *
//	*****************************************************************
//	*  59   |  58   |  57   |  56   |  55   |  54   |  53   |   52  *
//	*****************************************************************


	//将寄存器中的值读出,保存在一个临时的变量temp中
	REG_READ_UINT32(REG_GPIO_CFG4,temp);
	//然后对临时的变量temp做相应的修改
	temp &=   ~((BIT15|BIT14)|(BIT13|BIT12)				\
				|(BIT11|BIT10)|(BIT9|BIT8)				\
				|(BIT7|BIT6)|(BIT5|BIT4)				\
				|(BIT3|BIT2)|(BIT1|BIT0));
	//上一条语句可写成: temp &= ~0xFFFF;
	//最后将修改的数据写回到寄存器中,让处理器完成具体的操作。	
	REG_WRITE_UINT32(REG_GPIO_CFG4,temp);

//REG_GPIO_DATAOUT4
//某位的值为1,对应的处理器针脚上放置 高 电平。
//某位的值为0,对应的处理器针脚上放置 低 电平。
//由于Winbond W90P710 Study Board上Led低电平点亮,这里将所有LED指示灯
//对应的处理器针脚上放置低电平,当该针脚被设置成输出模式时,该灯即可点亮。
//	*****************************************************************
//	*       |       |       |       |       |       |       |       *
//	* LED_7 | LED_6 | LED_5 | LED_4 | LED_3 | LED_2 | LED_1 | LED_0 *
//	*       |       |       |       |       |       |       |       *
//	*   0   |   0   |   0   |   0   |   0   |   0   |   0   |   0   *
//	*       |       |       |       |       |       |       |       *
//	*****************************************************************
//	*  59   |  58   |  57   |  56   |  55   |  54   |  53   |   52  *
//	*****************************************************************
	REG_READ_UINT32(REG_GPIO_DATAOUT4,temp);
	temp &=   ~((BIT7 | BIT6)							\
				|(BIT5 |BIT4)							\
				|(BIT3  |BIT2)							\
				|(BIT1 |BIT0));
	//上一条语句可写成: temp &= ~0xFF;
	REG_WRITE_UINT32(REG_GPIO_DATAOUT4,temp);
	return 1;
}

int Led_Read(void)
{
	unsigned int temp;
	REG_READ_UINT32(REG_GPIO_DIR4,temp);
	return (0xFF & temp);
}

int Led_Write(int number)
{
	unsigned int temp;
	unsigned int lightLed=0;

	lightLed = number &0xFF;
//取number中的低8位
//某位的值为1,点亮 该位对应的灯。
//某位的值为0,熄灭 该位对应的灯。
//	*****************************************************************
//	*       |       |       |       |       |       |       |       *
//	* LED_7 | LED_6 | LED_5 | LED_4 | LED_3 | LED_2 | LED_1 | LED_0 *
//	*       |       |       |       |       |       |       |       *
//	*   0   |   1   |   0   |   1   |   1   |   0   |   0   |   1   *
//	*       |       |       |       |       |       |       |       *
//	*****************************************************************
//	*  熄灭  |  点亮    |  熄灭  |  点亮   |  点亮    |  熄灭  | 熄灭   |  点亮    *
//	*****************************************************************
	REG_READ_UINT32(REG_GPIO_DIR4,temp);
	temp &=   ~((BIT7 | BIT6)							\
				|(BIT5 |BIT4)							\
				|(BIT3  |BIT2)							\
				|(BIT1 |BIT0));
	//上一条语句可写成: temp &= ~0xFF;
	temp 	|=  number;
	REG_WRITE_UINT32(REG_GPIO_DIR4,temp);
	
	return number;
}
int Led_Close(void)
{
	unsigned int temp;
	REG_READ_UINT32(REG_GPIO_DIR4,temp);
	temp &=   ~((BIT7 | BIT6)							\
				|(BIT5 |BIT4)							\
				|(BIT3 |BIT2)							\
				|(BIT1 |BIT0));
	//上一条语句可写成: temp &= ~0xFF;
	REG_WRITE_UINT32(REG_GPIO_DIR4,temp);
	return -1;
}

⌨️ 快捷键说明

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