4. 廣告燈的左移右移
做單一燈的左移右移,硬件電路如圖4.4.1所示,八個(gè)發(fā)光二極管L1-L8分別接在單片機(jī)的P1.0-P1.7接口上,輸出“0”時(shí),發(fā)光二極管亮,開始時(shí)P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重復(fù)循環(huán)。
2.電路原理圖
把“單片機(jī)系統(tǒng)”區(qū)域中的P1.0-P1.7用8芯排線連接到“八路發(fā)光二極管指示模塊”區(qū)域中的L1-L8端口上,要求:P1.0對應(yīng)著L1,P1.1對應(yīng)著L2,……,P1.7對應(yīng)著L8。
4.程序設(shè)計(jì)內(nèi)容
我們可以運(yùn)用輸出端口指令MOVP1,A或MOVP1,#DATA,只要給累加器值或常數(shù)值,然后執(zhí)行上述的指令,即可達(dá)到輸出控制的動(dòng)作。
每次送出的數(shù)據(jù)是不同,具體的數(shù)據(jù)如下表1所示
ORG0
START:MOVR2,#8
MOVA,#0FEH
SETBC
LOOP:MOVP1,A
LCALLDELAY
RLCA
DJNZR2,LOOP
MOVR2,#8
LOOP1:MOVP1,A
LCALLDELAY
RRCA
DJNZR2,LOOP1
LJMPSTART
DELAY:MOVR5,#20;
D1:MOVR6,#20
D2:MOVR7,#248
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
END
7.C語言源程序
#include
unsignedchari;
unsignedchartemp;
unsignedchara,b;
voiddelay(void)
{
unsignedcharm,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
voidmain(void)
{
while(1)
{
temp=0xfe;
P1=temp;
delay();
for(i=1;i<8;i++)
{
a=temp<b=temp>>(8-i);
P1=a|b;
delay();
}
for(i=1;i<8;i++)
{
a=temp>>i;
b=temp<<(8-i);
P1=a|b;
delay();
}
}
}
評論