导航:首页 > 操作系统 > 单片机流水灯汇编语言

单片机流水灯汇编语言

发布时间:2022-09-03 11:18:58

单片机流水灯的解释(汇编语言)

程序很简单的,只不过程序编的确实不那么规范,还有些啰嗦,有中断那个程序更是有很多画蛇添足的意思,既然用来中断,按键来控制流水,还加什么延时,多此一举。给你梳理一下:

ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVA,#01H
LOOP:
MOVP2,A
LCALLDELAY
RLA
SJMPLOOP
DELAY:
MOVR2,#250
DLY:
MOVR3,#250
DJNZR3,$
DJNZR2,DLY
RET
END

㈡ 汇编语言 51单片机,外部中断控制流水灯

ORG 0000H ; 试试这个 流水灯的编码随便改

LJMP MAIN

ORG 0003H

LJMP LINT0

ORG 000BH

LJMP LT0ZD

ORG 0030H

MAIN: MOV SP, #60H

MOV TMOD, #00H

MOV IE, #81H

MOV TL0, #(8192-2500)MOD 32

MOV TH0, #(8192-2500)/32

SETB TR0

MOV R5, #20

LOOP: MOV R3, #48

CJNE R3, #0, $

LJMP LOOP


LINT0: CPL ET0

RETI


LT0ZD: PUSH PSW ; T0 中断

PUSH ACC

MOV TL0, #(8192-2500)MOD 32

MOV TH0, #(8192-2500)/32

DJNZ R5, LT0Z2

MOV R5, #30 ; 可以调整速度

MOV A, R3

LCALL LSDIN

MOV P1, A

DEC R3

LT0Z2: POP ACC

POP PSW

RETI


LSDIN: MOVC A,@A+PC

RET


LSDBM: DB 11111110B,11111101B,11111011B,11110111B ; 流水灯的编码1

DB 11101111B,11011111B,10111111B,01111111B

DB 01111111B,10111111B,11011111B,11101111B

DB 11110111B,11111011B,11111101B,11111110B

DB 11111100B,11111001B,11110011B,11100111B ; 流水灯的编码2

DB 11001111B,10011111B,00111111B,01111110B

DB 01111110B,00111111B,10011111B,11001111B

DB 11100111B,11110011B,11111001B,11111100B

DB 11111000B,11110001B,11100011B,11000111B ; 流水灯的编码3

DB 10001111B,00011111B,00111110B,01111100B

DB 01111100B,00111110B,00011111B,10001111B

DB 11000111B,11100011B,11110001B,11111000B

END

㈢ 单片机流水灯用汇编语言写怎么从两边向中间亮再从中间

编程序如下:
; 花样流水灯(8个发光二极管以各种形式循环点亮)
; 功能:流水灯(8个发光二极管循环以1S间隔以各种形式循环点亮)
ORG 0000H ;伪指令,指定程序从0000H开始存放
LJMP MAIN ;跳转指令,程序跳转至MAIN处执行
ORG 0030H ;伪指令,指定程序从0030H开始存放
MAIN: MOV SP, #60H ;给堆栈指针赋初值
MOV P1,#0FFH ;给P1口赋值
MOV DPTR,#TABLE;查表
LIGHT: MOV R4,#42 ;设置循环次数
LOOP: MOV A,#42 ;给A赋初值
SUBB A,R4 ;将A的值与R4的值相减,结果存在A中
MOVC A,@A+DPTR ;将A+DPTR的值所对应的TABLE中的值赋给A
MOV P1,A ;将A的值赋给P1口
LCALL DEL1S ;调用1S延时子程序
DJNZ R4,LOOP ;判断R4是否为0,不为0跳转,为0顺序执行
LJMP LIGHT ;跳转指令,跳转至LIGHT处继续执行
;1S延时子程序(11.0592MHz晶振,误差0微秒)
DEL1S: MOV R5, #089H
DL1S0: MOV R6, #0A4H
DL1S1: MOV R7, #013H
DJNZ R7, $
DJNZ R6, DL1S1
DJNZ R5, DL1S0
RET
TABLE: ;定义表格数据
DB 0FFH ;全灭
DB 0FEH 0FDH 0FBH 0F7H 0EFH 0DFH 0BFH 07FH ;依次逐个点亮
DB 0FEH 0FCH 0F8H 0F0H 0E0H 0C0H 080H 000H ;依次逐个叠加
DB 080H 0C0H 0E0H 0F0H 0F8H 0FCH 0FEH 0FFH ;依次逐个递减
DB 07EH 0BDH 0DBH 0E7H 0E7H 0DBH 0BDH 07EH ;两边靠拢后分开
DB 07EH 03CH 018H 000H 000H 018H 03CH 07EH ;两边叠加后递减
DB 000H ;全亮
END ;程序结束指令
C语言程序如下:
/* 该实验是花样流水灯(8个发光二极管以各种方式循环点亮),功能是花样流水灯(8个发光二极管以1S间隔以各种方式循环点亮) */
#include//包含reg.52文件
#define uint unsigned int//宏定义
#define uchar unsigned char//宏定义
void delay(uint z);//声明延时函数
uint a;//定义循环用变量
uchar code table[]={
0xff,//全灭
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,//依次逐个点亮
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,//依次逐个叠加
0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,//依次逐个递减
0x7e,0xbd,0xdb,0xe7,0xe7,0xdb,0xbd,0x7e,//两边靠拢后分开
0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,//两边叠加后递减
0x00,//全亮
};//定义循环用数据表格
/*亮的现象:先是全灭,然后依次逐个点亮,然后依次逐个叠加,
然后依次逐个递减,然后两边靠拢后分开,然后两边叠加后递减,
最后全亮。循环!*/
void main()//main函数
{
a=0;//给a赋初值
while(1)//while循环
{
P1=table[a];//将a所在的table中的值赋给P1口
delay(1000);//1S延时子程序
a++;//a的值加一
if(a==42)//测试a是否等于42
a=0;//给a赋值
}
}
void delay(uint z)//1ms延时子程序,通过z值改变延时时间
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

㈣ 用汇编语言给51单片机编程四种流水灯

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV 30H,#0FEH
MOV 31H,01H
MOV 32H,#55H
LOOP:
MOV A,P1
ANL A,#03H
JNZ LOOP1
MOV A,30H
MOV P0,A
RL A
MOV 30H,A
LCALL DELAY
SJMP LOOP
LOOP1:
DEC A
JNZ LOOP2
MOV A,30H
MOV P0,A
RR A
MOV 30H,A
LCALL DELAY
SJMP LOOP
LOOP2:
DEC A
JNZ LOOP3
MOV A,31H
MOV P0,A
CJNE A,#0FFH,LOOP21
MOV A,#01H
SJMP LOOP22
LOOP21:
SETB C
RLC A
LOOP22:
MOV 31H,A
LCALL DELAY
SJMP LOOP
LOOP3:
MOV A,32H
MOV P0,A
CPL A
MOV 32H,A
LCALL DELAY
LJMP LOOP
END

㈤ 单片机流水灯由两边向中间流再由中间向两边流的汇编语言怎么写

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar TS_Count,TM_Count,TH_Count,count_N;
sbit LED_H=P3^0;
sbit LED_M=P3^1;
sbit LED_S=P3^2;

void DelayMS(uint x) //延时函数
{
uchar t;
while(x--)
{
for(t=120;t>0;t--);
}
}

void dis_time(uchar H_t,uchar M_t,uchar S_t)
{ uchar i;
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,
}; //定义数码管显示0~9的控制码
uchar code PS_CODE[]={0x01,0x02,0x04,0x08,0x010,0x20,0x40,0x80}; //这是数码管第n位的控制码

//以下几行是给每一个要显示的数码管赋值
uchar dis_bit[8];
dis_bit[0]=H_t/10%10; //千位
dis_bit[1]=H_t%10; //百位
dis_bit[2]=10; //十位
dis_bit[3]=M_t/10%10;
dis_bit[4]=M_t%10; //千位
dis_bit[5]=10; //百位
dis_bit[6]=S_t/10%10; //十位
dis_bit[7]=S_t%10;
for(i=0;i<8;i++)
{
P2=PS_CODE[i]; //第i个数码管的位控制字
P0=DSY_CODE[dis_bit[i]]; //第i个数码管的段码控制字
DelayMS(5); //延时5毫秒。
}

}
void disp_mode(uchar mode_1) //这个函数控制三个LED灯
{
switch(mode_1)
{ case 0: //模式0,全灭
LED_H=1;
LED_M=1;
LED_S=1;
TR0 = 1;
break;
case 1: //模式1,LED_S亮
LED_H=1;
LED_M=1;
LED_S=0;
TR0 = 0;
break;
case 2: //模式2,LED_M亮
LED_H=1;
LED_M=0;
LED_S=1;
TR0 = 0;
break;
case 3: //模式3,LED_H亮
LED_H=0;
LED_M=1;
LED_S=1;
TR0 = 0;
break;
}
}
uchar Key_code() //这个函数检测按键
{
uchar Key_NO;
if(P1==0xfe) //P1.0按键返回键值0
{Key_NO=0;}
if(P1==0xfd) //P1.1按键返回键值1
{Key_NO=1;}
if(P1==0xfb) //P1.2按键返回键值2
{Key_NO=2;}
while(P1!=0xff); //等待按键释放,源程序有点错误需要加分号;
return Key_NO;
}
void main()
{uchar y=-1;
uchar mode_N=0;
TMOD=0X00; //定义定时器工作在模式0,13位定时器模式
TH0=(8192-5000)/32; //赋初值
TL0=(8192-5000)%32;
IE=0X82; //开启定时器中断和总中断
TR0=1; //启动定时器
while(1)
{
if(P1!=0xff) //等待按键,如果有按键按下,获取键值
y=Key_code(); //获取键值
switch(y)
{
case 0: //第一个按键按下
mode_N++; //模式控制变量加1
if( mode_N>3) mode_N=0;
break;
case 1: //第二个按键按下控制数据加
switch( mode_N)
{
case 1:if(TS_Count<59) TS_Count++;
break;
case 2:if(TM_Count<59) TM_Count++;
break;
case 3:if(TH_Count<23) TH_Count++;
break;
}
break;
case 2: //第三个按键按下,控制数据减
switch( mode_N)
{
case 1:if(TS_Count>0) TS_Count--;
break;
case 2:if(TM_Count>0) TM_Count--;
break;
case 3:if(TH_Count>0) TH_Count--;
break;
}
break;
}
y=-1;
disp_mode(mode_N);
dis_time(TS_Count,TM_Count,TH_Count);
//dis_time(25,26,27);
}
}
void LED_Flash()interrupt 1 //中断服务程序,定时用。
{
TH0=(8192-5000)/32;
TL0=(8192-5000)%32;
if(++count_N>5)
{if(++TS_Count==60)
{
TS_Count = 0;
if(++TM_Count==60)
{
TM_Count = 0;
if(++TH_Count==24) TH_Count = 0;
}
}
count_N=0;
}
}

㈥ 51单片机中如何用汇编语言编写流水灯

流水灯就是51单片机控制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 ;50mS*2=100mS
MOV P1,LED ;
MOV A,LED ;
RL A ;累加器A的值循环左移1位
MOV LED,A ;
MOV YSJS,#0 ;
QT1: POP ACC ;恢复现场
POP PSW ;
RETI ;返回主程序
END ;汇编程序结束

(6)单片机流水灯汇编语言扩展阅读:

实现流水灯的三个方法:

第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。

第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。

第三种,库函数实现流水灯。利用左移函数进行。

㈦ 急!急!急!单片机流水灯汇编语言程序

5只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。

;用最直接的方式实现流水灯

ORG 0000H
START:MOV P1,#01111111B ;最下面的LED点亮
LCALL DELAY ;延时60秒
LCALL DELAY ;延时60秒
MOV P1,#10111111B ;最下面第二个的LED点亮
LCALL DELAY ;延时60秒
LCALL DELAY ;延时60秒
MOV P1,#11011111B ;最下面第三个的LED点亮 (以下省略)
LCALL DELAY
LCALL DELAY ;延时60秒
MOV P1,#11101111B
LCALL DELAY
LCALL DELAY ;延时60秒
MOV P1,#11110111B
LCALL DELAY
LCALL DELAY ;延时60秒
MOV P1,#11111011B
LCALL DELAY ;延时60秒
LCALL DELAY ;延时60秒
LCALL DELAY ;延时60秒
LCALL DELAY ;延时60秒
LCALL DELAY ;完成第一次循环点亮,延时约0.25秒
AJMP START ;反复循环

;延时子程序,12M晶振延时约250毫秒
DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250ms
PUSH PSW ;现场保护指令(有时可以不加)
MOV R4,#240
L3: MOV R2 ,#00H
L1: MOV R3 ,#00H
L2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2)
DJNZ R2 ,L1 ; 中层循环:256次
DJNZ R4 ,L3 ;外层循环:240次
POP PSW
RET
END

随便改了一个

㈧ 单片机汇编语言流水灯,定时器中断控制,(500ms)延时

单片机汇编语言流水灯,用定时器中断控制,可以初始化设置定时器时间(如50mS注定时器最大定时时间到不了500mS,需要加计数存储,中断10就是500mS),有多种方式实现如作一个流水状态表,定时读取写入IO端口 表加一,,或者用左移太移等方式都可以实现在,网上有很多这种实例。

㈨ 汇编语言单片机流水灯

ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV P1,#0FFH
CPL P1.0
LCALL DELAY
CPL P1.1
LCALL DELAY
CPL P1.2
LCALL DELAY
CPL P1.3
LCALL DELAY
CPL P1.4
LCALL DELAY
CPL P1.5
LCALL DELAY
CPL P1.6
LCALL DELAY
CPL P1.7
MOV R6,#2
LOOP:
MOV R7,#10
MOV P1,#00H
DLY:
LCALL DELAY
DJNZ R7,DLY
MOV P1,#0FFH
MOV R7,#10
DLY1:
LCALL DELAY
DJNZ R7,DLY1
DJNZ R6,LOOP
LJMP MAIN
END

㈩ 单片机流水灯汇编程序

KEYFX EQU P1.0 ;方向控制键
KEYKM EQU P1.1 ;速度控制键
FX BIT 00H ;方向标志
SPEED BIT 01H ;速度标志
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#01H
MOV TH0,#HIGH(65536-50000) ;50毫秒中断一次
MOV TL0,#LOW(65536-50000)
SETB TR0
SETB ET0
SETB EA
MOV R2,#2
MOV A,#0FEH ;灯初始化
CLR FX
CLR SPEED
MOV SPEED,#2
LOOP:
JB KEYFX,LOOP1 ;方向键按下否
JNB KEYFX,$
CPL FX
SJMP LOOP
LOOP1:
JB KEYKM,LOOP ;速度键按下否
JNB KEYKM,$
CPL SPEED
SJMP LOOP
T0ISR:
CLR TR0
MOV TH0,#HIGH(65536-50000)
MOV TL0,#LOW(65536-50000)
SETB TR0
JB FX,T001
RL A ;左循环
SJMP T002
T001:
RR A ;右循环
T002:
DJNZ R2,T0E
JB SPEED,T003
MOV R2,#2 ;快速
SJMP T0E
T003:
MOV R2,#10 ;慢速
T0E:
RETI
END

阅读全文

与单片机流水灯汇编语言相关的资料

热点内容
androidlinuxadt 浏览:500
广联达软件加密锁原装芯片 浏览:338
如何打开数据库服务器 浏览:310
kppm是什么app 浏览:538
python多个数组命名 浏览:191
a算法csdn 浏览:23
r720服务器什么年代 浏览:975
本地电脑怎么设置传奇服务器 浏览:1002
安卓10框架怎么制作 浏览:959
程序员退休工资待遇 浏览:609
湛江中文编程数控系统代理 浏览:419
openglandroid书 浏览:170
奇妙组件安卓版叫什么 浏览:729
微信授权什么app权重最高 浏览:11
php循环数组foreach 浏览:78
zip和app有什么区别 浏览:633
乖法快速算法 浏览:872
日本程序员一年工资 浏览:199
出国做程序员怎么样 浏览:736
rar锁定压缩文件 浏览:873