求个51单片机 汇编语言设计的LED跑马灯的程序
发布网友
发布时间:2022-04-26 08:02
我来回答
共4个回答
热心网友
时间:2022-06-25 14:57
给个你参考
*******
/* 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。
* 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。
*/
/* 程序详细功能介绍:
*做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,
*输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。
*/
ORG 0000H
LJMP START
ORG 0030H
START:
MOV R2,#8 ;左移次数
MOV A,#0FEH ;A的初始值,即 P0.0的L0 点亮
SETB C
LOOP: MOV P0,A
LCALL DELAY
RLC A ;左移流水灯(带进位的左移),即亮点向P0口的高位移动
DJNZ R2,LOOP
MOV R2,#8 ;右移次数
LOOP1: RRC A ;右移流水灯
MOV P0,A
LCALL DELAY
DJNZ R2,LOOP1
LJMP START
DELAY: MOV R5,#10 ;延时子程序,改变R5,R6,R7 的值,可以改变延时的时间,从而改变流水灯移动速度
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END
热心网友
时间:2022-06-25 14:57
C语言程序如下,已经经过了仿真,符合要求.
#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar t1 = 0;
//-------------------------------
void TIME0()interrupt 1
{
TH0 = 0xD8; //初值.
TL0 = 0xF0; //10ms @ 12MHz
t1++;
}
//-------------------------------
void main() //主函数.
{
uchar i, aaa = 0xfe;
TMOD = 0x01; //定时器0
TH0 = 0xD8; //初值.
TL0 = 0xF0; //10ms @ 12MHz
TR0 = 1;
ET0 = 1;
EA = 1;
P0 = 0x00; //全亮.
while (t1 != 200); //等待2000ms
t1 = 0;
aaa = 0xfe;
P0 = aaa; //P1.0发光.
while (1) {
for (i = 0; i < 7; i++) {
while (t1 != 50); //等待500ms
t1 = 0;
aaa = _crol_(aaa, 1);//左移一位.
P0 = aaa;
} //左移位7次,P0.7发光.
for (i = 0; i < 7; i++) {
while (t1 != 50); //等待500ms
t1 = 0;
aaa = _cror_(aaa, 1);//右移一位.
P0 = aaa;
} //右移位7次,P0.0发光.
}
}
热心网友
时间:2022-06-25 14:58
这活我接了
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 跑马灯 ;
;2010.1.12 ball ;
;P0口为流水灯,低电平点亮 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000H ;起始地址
LJMP MAIN ;转入主函数
ORG 000BH ;定时中断0入口地址
LJMP PE ;转入中断程序
ORG 0100H ;主程序入口
MAIN: ;
MOV TMOD,#01H ;设置定时中断0的工作方式
MOV TL0,#0EFH ;添加初值
MOV TH0,#0D8H ;
SETB EA ;开总中断
SETB ET0 ;开定时中断
SETB TR0 ;开始计时
MOV P0,#00H ;点亮所有灯
MOV R0,#0C8H ;设定定时次数,两百次10ms*200=2s
QUAN: ;
MOV A,R0 ;
JNZ QUAN ;
MOV A,#0FEH ;
PAOMA: ;点亮第一个灯
MOV P0,A ;
MOV R0,#32H ;设定定时次数50次。10ms*50=0.5s
HJ:
CJNE R0,#00H,HJ ;定时器重复50次,延时0.5秒
RL A ;循环左移进行跑马灯
LJMP PAOMA ;
PE: ;定时器
MOV TL0,#0EFH ;
MOV TH0,#0D8H ;
DEC R0 ;用R0决定定时次数
RETI ;
END ;over
利用定时器10ms的定时
200次循环定时器=2s延时
100次循环定时器=0.5s延时
利用循环左移实现跑马灯
热心网友
时间:2022-06-25 14:58
用c还是汇编写?