用C51单片机控制12个LED流水灯的C语言程序怎么写?

用C51单片机控制12个LED流水灯的C语言程序怎么写?,第1张

#include "REG52.H"

//控制引脚定义

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 可能不对 要自己找。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12529420.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存