1.通过左移实现跑马灯
#include "reg52.h"
#define LED_PORT P0 //使用宏定义的方式将P0端口定义
typedef unsigned char u8;
typedef unsigned int u16;
void delay_10us(u16 ten_us) //当传入Ten_us=1时,大约延时10us
{
while(ten_us--);
}
void main()
{
u8 i=0;
while(1)
{
for(i=0;i<8;i++)
{
LED_PORT=~(0x01<<i);//i=0, 0000 0001 取反:1111 1110
//i=1, 0000 0010 取反:1111 1101
//i=2, 0000 0100 取反:1111 1011
//…… (C语言移位补零)
delay_10us(50000);
}
}
}
关于0xef
?2.通过库函数实现跑马灯
#include "reg52.h"
#include "intrins.h"
#define LED_PORT P0 //使用宏定义的方式将P0端口定义
typedef unsigned char u8;
typedef unsigned int u16;
void delay_10us(u16 ten_us) //当传入Ten_us=1时,大约延时10us
{
while(ten_us--);
}
void main()
{
u8 i=0;
LED_PORT=~0x01; //写成 0xfe 也可以 保证最低位为0即可
delay_10us(50000);
while(1)
{
for(i=0;i<7;i++)
{
LED_PORT=_crol_(LED_PORT,1); //最后一位的0往前移一位时,第一位移到最后一位,转圈循环
delay_10us(50000); //i=0 1111 1101
//i=1 1111 1011
//i=2 1111 0111
//……
}
for(i=0;i<7;i++)
{
LED_PORT=_cror_(LED_PORT,1); //右移同理
delay_10us(50000);
}
}
}
关于左移右移函数(在intrins.h文件里的第21、24行)
?
|