51单片机流水灯的程序错误求修改

51单片机流水灯的程序错误求修改,第1张

你的程序不是很合理,定时器的值错误,定时器,中断都配置了,但是没用到,可能对这些还不是很了解,给你个程序,是流水灯的,很短,自己去研究下,不明白的地方去查资料,不知道怎么查的话联系我也可以,祝成功。

#include "reg52h"

#include "intrinsh"

#define uchar unsigned char

#define uint unsigned int

void delay(uint x)

{

uint a,b;

for(a = x; a > 0; a--)

for(b = 110; b > 0;b--);

}

void main()

{

uchar led = 1;

while(1)

{

P2 = led;

led = _crol_(led, 1);

delay(200);

}

}

51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果。以下是程序:

;假设晶振12MHZ,P1控制8个LED低电平亮

;启动入口========================

ORG 0000H ;复位启动

AJMP START ;

ORG 001BH ;T1中断

AJMP T1INT ;

;定义变量========================

YSJS EQU 30H;延时计数器

LED EQU 31H;LED控制缓冲器

;主程序==========================

START: MOV LED,#0FEH ;初始化数据

MOV YSJS,#0 ;

;

MOV TMOD,#10H ;定时器1工作于方式1,16位定时器

MOV TL1,#0B0H ;设置定时初值

MOV TH1,#3CH ;定时时间=50mS

SETB ET1 ;使能定时器1中断

SETB TR1 ;启动定时器1

SETB EA ;开总中断

MOV P1,LED ;初始化流水灯

;

LOOP: JMP LOOP ;循环等待中断

;

;

T1INT: PUSH PSW ;定时器1中断程序

PUSH ACC ;保护现场

;

MOV TH1,#3CH ;定时时间=50mS

MOV TL1,#0B0H ;

INC YSJS ;

PUSH ACC ;保护ACC

MOV A,YSJI ;

CJNE A,#2,QT1 ;50mS2=100mS

MOV P1,LED ;

MOV A,LED ;

RL A ;累加器A的值循环左移1位

MOV LED,A ;

MOV YSJS,#0 ;

;

QT1: POP ACC ;恢复现场

POP PSW ;

RETI ;返回主程序

END ;汇编程序结束

#include<reg52h>

#include<intrinsh>

#define unit unsigned int

#define uchar unsigned char

void delay(unit z)

{

unit x, y;

for(x = 100; x > 0; x--) for(y = z; y > 0; y--);

}

void main()

{

uchar temp, i;

temp = 0xfe;

while(1) {

for (i = 0; i < 8; i++) {

P1 = temp; delay(300); temp = _crol_(temp, 1);

}

temp <<= 1;

if(temp == 0) temp = 0xfe;

}

}

试试看。

#include<reg51h>

#include<intrinsh>

#define

uchar

unsigned

char

sbit

button=P1^0;

uchar

press=0;

void

Delay(uchar

z)

{

uchar

x,y;

for(x=z;x>0;x--)

for(y=255;y>0;y--);

}

void

Led_Continue()

{

P2=0xfe;

while(press==0|press==2)

{

P2=_crol_(P2,1);

Delay(255);

}

}

void

Led_Stop()

{

P2=0xff;

}

void

Keyscan()

{

if(button==0)

{

Delay(20);

if(button==0)

{

press+=1;

if(press==1)

{

Led_Stop();

}

if(press==2)

{

press=0;

}

}

}

}

void

main()

{

while(1)

{

Keyscan();

Led_Continue();

}

}

试试这个,在mian中要一直去扫描,否则就扫描一次不能达到目的。

然后你问用中断怎么完成,告诉你中断更简单,定时器用作延时用,键盘只需要写当这个按键按下时

TRx=~TRx

就是每一次按下,定时器开关都和上一次状态不一样,这样每按一次都会停止、开始、停止、开始

希望我的回答能帮助到你。

程序如下:

#include <reg52h>

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3。

让电子信息技术与单片机技术相融合,有效提高了单片机应用效果。作为计算机技术中的一个分支,单片机技术在电子产品领域的应用,丰富了电子产品的功能,也为智能化电子设备的开发和应用提供了新的出路,实现了智能化电子设备的创新与发展。

从二十世纪九十年代开始,单片机技术就已经发展起来,随着时代的进步与科技的发展,目前该技术的实践应用日渐成熟,单片机被广泛应用于各个领域。现如今,人们越来越重视单片机在智能电子技术方面的开发和应用,单片机的发展进入到新的时期。

无论是自动测量还是智能仪表的实践,都能看到单片机技术的身影。当前工业发展进程中,电子行业属于新兴产业,工业生产中人们将电子信息技术成功运用。

#include<reg52h>

#include<intrinsh>

#define uchar unsigned char

#define uint unsigned int

void delay(uint z);

main()

{

uchar aa;

while(1)

{

aa=0xfe;

P1=aa;

delay(100);

while(1)

{

aa=_crol_(aa,1);

P1=aa;

delay(100);

}

}

}

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

直接轮流输出0x80

0x20 0x08 0x02即可

假设LED接P1口 高电平灯亮

程序语句如下:

P1=0x02;

delayms(200);

P1=0x08;

delayms(200);

P1=0x20;

delayms(200);

P1=0x80;

delayms(200);

以上就是关于51单片机流水灯的程序错误求修改全部的内容,包括:51单片机流水灯的程序错误求修改、c51单片机中如何用汇编语言编写流水灯、51单片机流水灯,第一轮每次亮一个灯流水,第二轮每次亮两个灯流水.....然后整个过程循环等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9416006.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存