📄 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 + -