一、原理图
P0口通过D触发器连接8个LED灯,当LE为下降沿时,对信号进行锁存。LED是共阳接法,对应位给低电平,LED点亮,给高电平,LED熄灭。
二、实现代码
主要函数:
void LED(unsigned char k)
{
P0 = ~k;
P2 = 0x80;
_nop_();
P2 = 0x00;
}
具体实现:
(1)点亮第i位:
void LED_one(unsigned char core)
{
LED(1 << core);
}
(2)右移流水灯:每1s移一个位
void Timer2Init(void) //1000微秒@11.0592MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0xCD; //设置定时初值
T2H = 0xD4; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
IE2 |= 0x04; //开定时器2中断
}
//中断服务程序
void t2int() interrupt 12 //中断入口
{
static unsigned char state;
if(++timer2_cnt % 1000 == 0)
{
timer2_cnt = 0;
LED(1<<state);
if(++state == 8)
state = 0;
}
}
(3)左移流水灯:每1s移一个位
void Timer2Init(void) //1000微秒@11.0592MHz
{
AUXR |= 0x04; //定时器时钟1T模式
T2L = 0xCD; //设置定时初值
T2H = 0xD4; //设置定时初值
AUXR |= 0x10; //定时器2开始计时
IE2 |= 0x04; //开定时器2中断
}
//中断服务程序
void t2int() interrupt 12 //中断入口
{
static unsigned char state;
if(++timer2_cnt % 1000 == 0)
{
timer2_cnt = 0;
LED(0x80 >> state);
if(++state == 8)
state = 0;
}
}