//控制引脚定义
sbit LED1 = PX.X//P0.0-P3.7任意引脚
.... ...........
sbit LED12 = PX.X
//宏定义灯亮灯灭
#define LED1_ON( ) LED1 =0 //野橘阳极接电源
#define LED1_OFF( ) LED1 =1 //阳极接电源
....... ............. .............
#define LED12_ON( ) LED12 =0 //阳极接电源
#define LED12_OFF( ) LED12 =1 //阳极逗春接电源
void Init_GPIO( )//端口引脚初始化,关闭所有指示灯
{
LED1_OFF( ) ;
..............
LED12_OFF( ) ;
}
void Delay_ms( u16 dat ) //延时函数
{
u16 i, j
for(i = dati>0i--)
{
for (j=300j>0j--)
}
}
int main( ) //主函数
{
Init_GPIO( )//引脚初始化
while(1) //大循环
{
LED1_ON( )//点亮第一个LED
LED2_OFF( )
.............
LED12_OFF( )
Delay_ms(1000)//延时 参数自己可以根据晶振频率自己调节
LED1_OFF( )//点亮第二个LED
LED2_ON( )
LED3_OFF( )
.............
LED12_OFF( )
Delay_ms(1000)
............. //按照上面修颂指团改;
LED1_OFF( )//点亮第十二个LED
LED2_OFF )
LED3_OFF( )
.............
LED12_ON( )
Delay_ms(1000)
}
}
循环点亮高羡高:P1.0->P1.7->P2.0->P2.3->P1.0,低派铅电平戚尺点亮;
org 0h
ajmp start
org 50h
start:
mov a,#0ffh
clr c
lp1:
rlc a
mov p1,a
call delay
jc lp1
mov r0,#5
lp2:
rlc a
mov p2,a
call delay
djnz r0,lp2
ajmp start
delay:
mov r5,#200
d1: mov r6,#250
d2: mov r7,#250
d3: djnz r7,d3
djnz r6,d2
djnz r5,d1
ret
我就写个顺时针亮的程序(详细解释,其它的你就自己写),全手打的哦,用慧槐的是汇编,我水平也不怎么高,但是你的问题也是入门级的,还肆薯有我假设是高电裂碧者位亮,一共12灯从P0.0开始到P1.4(P1.4和P0.0相接)。ORG 4000HSTART:CLR P0CLR P1 /P0 P1清零MOV P0,#80H/1灯亮LCALL DEL/调用延时程序MOV P0,#0C0HLCALL DELMOV P0,#0E0HLCALL DELMOV P0,#0F0HLCALL DELMOV P0,#0F8HLCALL DELMOV P0,#0FCHLCALL DELMOV P0,#0FEHLCALL DELMOV P0,#0FFHLCALL DELSTEB P0/P0口值位,前8灯全亮MOV P1,#080HLCALL DELMOV P1,#0C0HLCALL DELMOV P1,#0E0HLCALL DELMOV P1,#0F0HLCALL DELMOV P1,#0F8HLCALL DELLJMP START/程序跳到开始,进行循环DEL:MOV R7,#200MOV R5,#20DEL1:MOV R6,#123 NOPDEL2:DJNZ R6,DEL2DJNZ R7,DEL1DJNZ R5,DEL1RET/延时程序 共约1SSJMP $起始位4000H 可能不对 要自己找。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)