TQ2440之LED点亮
原创
©著作权归作者所有:来自51CTO博客作者JDSH0224的原创作品,请联系作者获取转载授权,否则将追究法律责任
TQ2440端口介绍:
功能:实现四个LED灯的显示(全亮,轮询点亮...),管脚配置如下
PnCON:引脚控制寄存器,决定每个引脚使用哪种功能(有些引脚是复用引脚)
PnDAT:引脚数据寄存器,根据端口的配置,可以读、写数据,端口A只有输出功能
PnUP:引脚上拉寄存器,端口A不具备上拉电阻
MISSCR:杂项控制寄存器(暂时不完全理解,日后在研究)
DCLKCON:控制寄存器(暂时不完全理解,日后在研究)
EXTINTn:外部中断控制寄存器(触发方式,为边沿出发或电平出发,同时还配置信号的触发极性)
EINTFLTn:外部中断滤波器(为确认电平中断,由于噪声滤波必须保持中断管脚40ns的延时)
EINTMASK:外部中断屏蔽寄存器
EINTPEND:外部中断挂起寄存器(表示中断是否发生)
GSTATUSn:通用状态寄存器,包括复位,看门口,电源。。。。。
DSCn:驱动强度控制寄存器
MSLCON:存储器睡眠控制寄存器
本内容主要是实现LED等“显闪”
源码如下:
void My_Led_Test(void)
{
int idx;
Uart_Printf("\nMy Led Test Begin\n");
rGPBCON |= 0x15400; //CONFIGURE PINS: SET PB5、PB6、PB7、PB8 OUTPUT
rGPBUP |= 0x1E0; //set pins pull-up
Delay(10);
while (Uart_Getch() != 's')
{
rGPBDAT &= ~(0x0f << 5); //all light on
Delay(1000);
rGPBDAT |= (0x0f << 5); //all light off
Delay(10);
for (idx = 0; idx < 8; idx ++)
{
if (idx <3)
{
rGPBDAT &= ~(0x01 << (5 + idx));
Delay(2000);
}
else
{
rGPBDAT &= ~(0x01 << (12 - idx));
Delay(2000);
}
if (idx == 3)
rGPBDAT |= (0x0f << 5); //all light off
}
Delay(1000);
}
}