|
你好, 这个是我的练习, 看看能帮到你吗
/**********************************************
** 文件名: 广告灯.c **
** 晶振频率: 11.0592MHZ **
** 日 期: 2022年03月28日 **
** 程 序: 利用移位指令实现拉幕闭幕式 **
**********************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define LED P0
/********* 时间延时程序 *********/
void delayms(uint ms)
{
uint t;
while(ms--)
{
for(t=0; t<100; t++);
}
}
/************ 主程序 ************/
void main(void)
{
uchar i, HW, LW; //HW 高4位 LW 低4位
while(1)
{
LW = 0x08; //LW=0000 1000
HW = 0x10; //HW=0001 0000
for(i=0; i<4; i++) //由於 8个LED, 中间作拉开及向中关闭 所以只需要移动 4次
{
LED = ~(HW|LW) ; //HW|LW = 0001 0000 | 0000 1000 = 0001 1000 ~反相= 1110 0111
delayms(250);
LW=(LW>>1)|0x08; //LW移位後补1 LW原 0000 1000 >>移位 0000 0100 || 0000 1000 = 0000 1100
HW=(HW<<1)|0x10; //HW移位後补1 HW原 0001 0000 >>移位 0010 0000 || 0001 0000 = 0011 0000
} //HW|LW 0011 0000 || 0000 1100 = 0011 1100 ~反相 1100 0011
LW = 0x01; //LW=0000 0001
HW = 0x80; //HW=1000 0000
for(i=0; i<4; i++) //由於 8个LED, 中间作拉开及向中关闭 所以只需要移动 4次
{
LED = HW|LW ; //HW|LW = 1000 0000 | 0000 0001 = 1000 0001
delayms(250);
LW=(LW<<1)|0x01; //LW移位後补1 LW原 0000 0001 >>移位 0000 0010 || 0000 0001 = 0000 0011
HW=(HW>>1)|0x80; //HW移位後补1 HW原 1000 0000 >>移位 0100 0000 || 1000 0000 = 1100 0000
} //HW|LW 1100 0000 || 0000 0011 = 1100 0011
}
}
|
|