求一段简单51单片机程序,8个led按顺序每个闪4次

求一段简单51单片机程序,8个led按顺序每个闪4次,第1张

#include<reg51h>

#define uchar unsigned char

void delay(uchar a)

{

uchar i,j;

for(i=0;i<a;i++)

for(j=0;j<120;j++);

}

main()

{

uchar LED=0xfe,i;

while(1)

{

for(i=0;i<4;i++)

{

P0=LED;

delay(100);

P0=0xff;

delay(100);

}

LED=(LED<<1)|0x01;

if(LED==0xff)LED=0xfe;

}

}

// LedTimeCount应该为100

// 把下面这段的宏定义放在前面,代码段覆盖你原来那段试试

// 注意保存和备份

// LED = 0表示灯亮,LED = 1表示灯灭,如果是反着的就把下面的0和1换一下,或者改下宏定义

// pwmcount初始值为三角波,因此后半段的意思是把100次分为pwmcount自减段和常0段

// 如果自减段和常0段LED都为0则常亮

// c为偶数时pwmcount逐渐增加,自减段增加,此时LED如果为0,常0段为1,则变亮,反之变暗

// c为奇数时pwmcount逐渐减小,自减段减小,此时LED如果为1,常0段为0,则变亮,反之变暗

#define fLED(a,b,c) {LED1 = a;LED2 = b;LED3 = c;}

if (pwmcount > 0)

{

switch(c)

{

case 0://1变亮,2常亮,3变暗

fLED(0,0,1);

break;

case 1://1常亮,2变暗,3变亮

fLED(0,0,1);

break;

case 2://1变暗,2变亮,3常亮

fLED(1,0,0);

break;

case 3://1变亮,2常亮,3变暗

fLED(1,0,0);

break;

case 4://1常亮,2变暗,3变亮

fLED(0,1,0);

break;

case 5://1变暗,2变亮,3常亮

fLED(0,1,0);

break;

}

pwmcount--;

}

else

{

switch(c)

{

case 0://1变亮,2常亮,3变暗

fLED(1,0,0);

break;

case 1://1常亮,2变暗,3变亮

fLED(0,1,0);

break;

case 2://1变暗,2变亮,3常亮

fLED(0,1,0);

break;

case 3://1变亮,2常亮,3变暗

fLED(0,0,1);

break;

case 4://1常亮,2变暗,3变亮

fLED(0,0,1);

break;

case 5://1变暗,2变亮,3常亮

fLED(1,0,0);

break;

}

}

程序思想如下 可以想象成一个整数000每次加1后显示一次知道999后溢出跳回起点继续,程序如下

ORG 0000H

AJMP START

START: MOV 30H,#00H ;数码管显示初值

MOV 31H,#00H

MOV 40H,#00H ;显示增量

MOV 41H,#01H

STL1: ACALL LED ;LED显示

ACALL DELAY05S

ACALL BCDADD

MOV A,30H

ANL A,#0F0H

JNZ START ;判断是不是超过999

AJMP STL1

BCDADD: CLR C

MOV A,31H

ADDC A,41H

DA A

MOV 31H,A

MOV A,30H

ADDC A,40H

DA A

MOV 30H,A

RET

LED: MOV A,30H

ANL A,#0FH

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

MOV A,31H

ANL A,#0F0H

SWAP A

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P1,A

MOV A,31H

ANL A,#0FH

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P2,A

RET

DELAY05S: MOV R6,#200

SL1: MOV R5,#250

SL2: NOP

DJNZ R5,SL2

DJNZ R6,SL1

RET

TAB: DB 0C0H ;0

DB 0F9H ;1

DB 0A4H ;2

DB 0B0H ;3

DB 099H ;4

DB 092H ;5

DB 082H ;6

DB 0F8H ;7

DB 080H ;8

DB 090H ;9

DB 088H ;A

DB 083H ;B

DB 0C6H ;C

DB 0A1H ;D

DB 086H ;E

DB 08EH ;F

END

PS1:延迟05秒的晶振是357MHZ

PS2:希望我的LED显示代码没写错,我是认为你是0-7接的A-DP

PS3:百度的显示格式真恶心 将就着看吧 程序倒是应该没有什么错误

P4:程序已经修改 重新拷贝一下吧

51单片机来实现60个led灯循环点亮的程序://汇编程序:

#include<at89x51h>

#define uchar unsigned char

#define uint unsigned int

uchar data count=0;

bit flag=0;

//主函数

void main(void)

{

uchar i=0,k=0xfe;

TMOD=0x01;

TH0=0x4c;TL0=0x00;//定时50ms

EA=1;ET0=1;TR0=1;

while(1)

{

if(flag==1){k=k<<1|0x01;flag=0;i++;}

if(i==8){i=0;k=0xfe;}

P1=k;

}

}

//中断函数//0111 1111

void dy1s(void) interrupt 1 using 1

{

TH0=0x4c;TL0=0x00;//定时50ms

count++;

if(count==20){flag=1;count=0;} //1s到了

}。C语言程序编写。

void main() { P1=0XFF; /定义初始状态为全灭/while(1) { delay(2000); P1=0X7e; delay(2000); P1=0Xbd; delay(2000);P1=0Xdb;delay(2000); P1=0Xe7; delay(2000); P1=0Xdb;delay(2000); P1=0Xbd;delay(2000); P1=0X7e; delay(2000); P1=0XFF; /此循环使得发光二极管按照07,16,25,34,43,52,61,70的顺序循环交替两两点亮/} /end while/}/end main/

以上就是关于求一段简单51单片机程序,8个led按顺序每个闪4次全部的内容,包括:求一段简单51单片机程序,8个led按顺序每个闪4次、求51单片机C51LED灯渐亮渐暗程序。。、51单片机控制LED汇编显示程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9618590.html

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

发表评论

登录后才能评论

评论列表(0条)

保存