|
你好, 這個是我的練習, 看看能幫到你嗎
/**********************************************
** 文件名: 廣告燈.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
}
}
|
-
-
廣告燈.pdf
2022-3-29 01:13 上傳
點擊文件名下載附件
54.67 KB, 下載次數: 7
|