最经典的51单片机经典流水灯汇编程序
- 格式:doc
- 大小:222.50 KB
- 文档页数:53
51单片机流水灯程序51单片机是一种广泛使用的微控制器,具有丰富的IO端口和定时器资源。
流水灯程序是51单片机入门的基础示例之一,通过多个LED灯按照一定顺序逐个亮起或熄灭,形成流水灯的效果。
下面详细介绍51单片机流水灯程序的编写。
一、硬件连接要实现流水灯效果,需要将多个LED灯连接到51单片机的IO端口上。
一般使用P1端口作为输出端口控制LED灯的亮灭,P2端口作为输出口控制LED灯亮起的顺序。
具体连接方式如下:•将LED灯的阳极通过限流电阻连接到VCC。
•将每个LED灯的阴极通过限流电阻连接到P1端口。
•将P2端口的每个引脚依次连接到每个LED灯的阴极。
二、程序实现#include <reg52.h> //包含51单片机头文件#define LED P1 //定义LED为P1端口#define ORDER P2 //定义顺序控制为P2端口void delay(unsigned int t); //延时函数声明void main(){unsigned char i;while(1) //循环控制流水灯效果{for(i=0; i<8; i++) //控制8个LED灯{LED = 0x01<<i; //将第i个LED灯置亮delay(10000); //延时一段时间,使LED灯亮起后延时熄灭LED = 0x01>>(i+1); //将第i个LED灯置灭}}}void delay(unsigned int t) //延时函数定义{unsigned int i, j;for(i=0; i<t; i++){for(j=0; j<1275; j++);}}该程序首先定义了LED和ORDER两个变量,分别对应P1和P2端口的输出口。
在主函数中,使用一个while循环控制流水灯效果。
在循环内部,使用一个for循环控制8个LED灯的状态。
在每次循环中,先将第i个LED灯置亮,延时一段时间后将其置灭,然后进入下一个循环。
1.第一个发光管以间隔200ms闪烁。
2.8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms。
3.8个发光管来回流动,第个管亮100ms。
4。
用8个发光管演示出8位二进制数累加过程。
5。
8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。
重复此过程。
6.间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
7。
间隔300ms先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。
1#include<reg52。
h〉#define uint unsigned intsbit led1=P1^0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x—-)for(y=100;y〉0;y-—);}2#include<reg52。
h>#include〈intrins。
h〉#define uint unsigned intuchar a;void delay();void main(){a=0xfe;P1=a;while(1){a=_crol_(a,1);delay();P1=a;delay();}}void delay(){uint b;for(b=55000;b>0;b—-);}3#include<reg52。
h〉#include <intrins。
h>#define uint unsigned int #define uchar unsigned char void delay(){uint x,y;for(x=100;x〉0;x--)for(y=110;y>0;y—-);}void main(){uchar a,i;while(1){a=0xfe;for(i=0;i〈8;i++){P1=a;delay(100);a=_crol_(a,1);for(i=0;i〈8;i++){P1=a;delay(100);a=_cror_(a,1);}}}4#include<reg52.h>#include 〈intrins。
单片机为89c52 晶振为11.0592,/***此程序为流水灯*** /#include<reg52.h>#include<intrins.h>#define uchar unsigned char //宏定义#define uint unsigned intuchar led;void delay(uint z) //延时子函数体{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){led=0xfe; //赋初值while(1){P1=led; //点亮第一个小灯delay(100); //延时100毫秒led=_crol_(led,1); 将led的变量左移给下一位}}/*8个发光管间隔200ms由上至下,返回再由上至下,一个个往下亮,后全亮由下至上,返回再由下至上,一个个往下亮,后全亮再重复2次,然后全部熄灭再以500ms间隔全部闪烁3次。
重复此过程*/#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar led;uint i,j;void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){while(1){for(j=0;j<2;j++){led=0xfe; //赋初值for(i=0;i<8;i++){P1=led; //点亮第一个小灯delay(200); //延时200毫秒led=_crol_(led,1); //将led变量循环左移给下一位}led=0xfe; //赋初值for(i=0;i<8;i++){P1=led; //点亮第一个小灯delay(200); //延时200毫秒led<<=1; //左移给下一位}led=0x7f; //赋初值for(i=0;i<8;i++){P1=led; //点亮第一个小灯delay(200); //延时200毫秒led=_cror_(led,1); //将led变量循环右移给下一位}led=0x7f; //赋初值for(i=0;i<8;i++){P1=led; //点亮第一个小灯delay(200); //延时200毫秒led>>=1; //右移给下一位}}for(j=0;j<6;j++){P1=~P1; //全部取反6次,即闪烁5次delay(500); //延时500毫秒}}}。
目录流水灯最原始 (1)流水灯位左移 (3)流水灯移位函数 (4)流水灯数组 (5)流水灯精确定时器 (6)流水灯最原始#include "reg51.h"sbit p0=P1^0;sbit p1=P1^1;sbit p2=P1^2;sbit p3=P1^3;sbit p4=P1^4;sbit p5=P1^5;sbit p6=P1^6;sbit p7=P1^7;voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){while(1){P1=0;p0=1;mdelay(1000);p0=0;p1=1;mdelay(1000);p1=0;p2=1;mdelay(1000);p2=0;p3=1;mdelay(1000);p3=0;p4=1;mdelay(1000);p4=0;p5=1;mdelay(1000);p5=0;p6=1;mdelay(1000);p6=0;p7=1;mdelay(1000);p7=0;}}流水灯位左移#include "reg51.h"voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){unsigned char i;unsignedint led;while(1){led=0xfe;for(i=0;i<8;i++){P1=led;mdelay(1000);led=led<<1;led=led|0x01;}}}流水灯移位函数#include "reg51.h"#include "intrins.h"voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){unsigned char led;led=0x01;while(1){P1=led;led=_crol_(led,1);mdelay(1000);}}流水灯数组#include "reg51.h"unsigned char table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; voidmdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++){;}}void main(){unsigned char i;while(1){for(i=0;i<8;i++){P1=table[i];mdelay(1000);}}}流水灯精确定时器#include "reg51.h"#include "intrins.h"unsignedint count=0,led;void main(){P1=0x00;led=0x01;EA=1;ET0=1;TMOD=0x01;TH0=0x3c;TL0=0xb0;TR0=1;for(;;){;}}voidbiao() interrupt 1{count++;if(count==20){count=0;P1=led;led=_crol_(led,1);}TH0=0x3c;TL0=0xb0;}。
单片机实训-----流水灯一、设计思路学习案例中的实例程序,通过对炫酷流水灯的修改,使流水灯能循环显示倒流水左移、倒流水右移、渐亮、渐暗、流水左移、流水右移、流水内外移二、程序代码#include <AT89X51.h> //头文件rlszy(); //红色流水左移声明rlsyy(); //红色流水右移声明rlsnwyd(); //红色流水内外移动声明rtbyd(); //红色跳变移动声明rjl(); //红色渐亮声明rja(); //红色渐暗声明rdlszy(); //倒流水左移函数rdlsyy(); //倒流水右移函数zkb(unsigned char d);void ys1ms(unsigned int s); //延时声明,修改s的数值,就可以改变时间main() //主函数,由于模块化设计,只要修改下面各模块的排列顺序和时间,就可以实现各种变化模式{EA=1;//打开中断,使用中断方便调试查看模式EX0=1; //允许外部中断0中断EX1=1; //允许外部中断1中断PX0=1; // 外部中断0位高优先级while(1) //无限循环{rdlszy(); //倒流水左移rja(); //渐暗P0=0xff;ys1ms(300); //延时0.3秒rdlsyy(); //倒流水右移rjl(); //渐亮rja(); //渐暗P0=0xff;ys1ms(300);rlszy(); //流水左移rja(); //渐暗ys1ms(300);rlsyy(); //流水右移rja(); //渐暗P0=0xff;ys1ms(300);rlsnwyd(); //流水内外移动P0=0xff;ys1ms(300);rtbyd(); //跳变模式P0=0xff;ys1ms(300);}}/******************************************************************** ********/rlszy() //流水左移函数{unsigned char a,i,led; //声明无字符整形变量a,i,ledled=0xfe; //左移初始值定位P0=led; //输出ys1ms(120); //延时for(i=1;i<8;i++) //设置移动7次{a=led<<i;//灯左移i位P0=a; //依次点亮ys1ms(120);}}/******************************************************************** *******/rlsyy() //流水右移函数{unsigned char a,i,led; //声明无字符整形变量a,i,ledled=0x7f; //左移初始值定位P0=led; //输出ys1ms(120); //延时for(i=1;i<8;i++) //设置移动7次{a=led>>i;//灯右移i位P0=a; //依次点亮ys1ms(120);}}/***************************************************************************/rdlszy() //倒流水左移函数{P0=0xfe;ys1ms(60);P0=0xfd;ys1ms(60);P0=0xfb;ys1ms(60);P0=0xf7;ys1ms(60);P0=0xef;ys1ms(60);P0=0xdf;ys1ms(60);P0=0xbf;ys1ms(60);P0=0x7f;ys1ms(60);P0=0x7e;ys1ms(60);P0=0x7d;ys1ms(60);P0=0x7b;ys1ms(60);P0=0x6f;ys1ms(60);P0=0x5f;ys1ms(60);P0=0x3f;ys1ms(60);P0=0x3d;ys1ms(60);P0=0x3b;ys1ms(60);P0=0x37;ys1ms(60);P0=0x2f;ys1ms(60);P0=0x1f;ys1ms(60);ys1ms(60);P0=0x1d;ys1ms(60);P0=0x1b;ys1ms(60);P0=0x17;ys1ms(60);P0=0x0f;ys1ms(60);P0=0x0e;ys1ms(60);P0=0x0d;ys1ms(60);P0=0x0b;ys1ms(60);P0=0x07;ys1ms(60);P0=0x06;ys1ms(60);P0=0x05;ys1ms(60);P0=0x04;ys1ms(60);P0=0x03;ys1ms(60);P0=0x02;ys1ms(60);P0=0x01;ys1ms(60);P0=0x00;}/******************************************************************** *******/rdlsyy() //倒流水右移函数,参考上面左移{P0=0x7f;ys1ms(60);P0=0xbf;ys1ms(60);ys1ms(60); P0=0xef; ys1ms(60); P0=0xf7; ys1ms(60); P0=0xfb; ys1ms(60); P0=0xfd; ys1ms(60); P0=0xfe; ys1ms(60);P0=0x7e; ys1ms(60); P0=0xbe; ys1ms(60); P0=0xde; ys1ms(60); P0=0xee; ys1ms(60); P0=0xf6; ys1ms(60); P0=0xfa; ys1ms(60);P0=0x7c; ys1ms(60); P0=0xbc; ys1ms(60); P0=0xdc; ys1ms(60); P0=0xec; ys1ms(60); P0=0xf4; ys1ms(60); P0=0xf8; ys1ms(60); P0=0x78; ys1ms(60); P0=0xb8; ys1ms(60); P0=0xd8;P0=0xe8;ys1ms(60);P0=0xf0;ys1ms(60);P0=0x70;ys1ms(60);P0=0xb0;ys1ms(60);P0=0xd0;ys1ms(60);P0=0xe0;ys1ms(60);P0=0x60;ys1ms(60);P0=0xa0;ys1ms(60);P0=0xc0;ys1ms(60);P0=0x40;ys1ms(60);P0=0x80;ys1ms(60);P0=0x01;ys1ms(60);P0=0x00;}/******************************************************************** ********/rlsnwyd() //红色流水内外移动函数{P0=0xe7;//ys1ms(90);P0=0xc3;ys1ms(90);P0=0x81;ys1ms(90);P0=0x00;rja();P0=0x7e;ys1ms(90);P0=0x3c;ys1ms(90);P0=0x18;ys1ms(90);P0=0x00;rja();}/******************************************************************** ********/rtbyd() //红色跳变8模式移动函数{P0=0x1f;ys1ms(180);P0=0xff;ys1ms(120);P0=0xf8;ys1ms(180);P0=0xff;ys1ms(120);P0=0xe7;ys1ms(180);P0=0xff;ys1ms(300);/******************************************************************** ********/P0=0xfc;ys1ms(180);P0=0xff;ys1ms(120);P0=0x3f;ys1ms(180);P0=0xff;ys1ms(300);/******************************************************************** ********/P0=0x3c;ys1ms(180);P0=0xff;ys1ms(120);P0=0x3c;ys1ms(180);P0=0xff;ys1ms(300);/******************************************************************** ********/P0=0xc3;ys1ms(120);P0=0xff;ys1ms(120);P0=0xc3;ys1ms(120);P0=0xff;ys1ms(120);/******************************************************************** ********/P0=0xf0;ys1ms(180);P0=0xff;ys1ms(120);P0=0xf0;ys1ms(180);P0=0xff;ys1ms(300);/******************************************************************** ********/P0=0xc3;ys1ms(180);P0=0xff;ys1ms(120);P0=0xc3;ys1ms(300);/******************************************************************** ********/P0=0x0f;ys1ms(180);P0=0xff;ys1ms(120);P0=0x0f;ys1ms(180);P0=0xff;ys1ms(300);/******************************************************************** ********/rjl();P0=0x00;ys1ms(100);P0=0xff;ys1ms(35);P0=0x00;ys1ms(100);P0=0xff;ys1ms(35);P0=0x00;ys1ms(100);P0=0xff;ys1ms(35);P0=0x00;ys1ms(100);P0=0xff;ys1ms(35);P0=0x00;ys1ms(100);P0=0xff;ys1ms(35);rja();ys1ms(180);P0=0xff;}/**************单片机晶振为11.0592兆的1毫秒延时*************************/void ys1ms(unsigned int s) //定时器精确延时1毫秒函数,改变S数值即改变时间{TR0=1;while(s!=0){TH0=-(7629/256);TL0=-(7629%256);while(TF0!=1);TF0=0;s--;}TR0=0;}/******************************************************************** *********/int0_srv() interrupt 0 using 2 //外中断函数{unsigned char n,m; //声明无字符整形变量a和bunsigned int i; //声明无字符整形变量ifor(i=0;i<5000;i++); //延时50毫秒,防抖动if (INT0==0) //暂停{n=P0; //保留状态m=P2;P3=0xfb; //保持暂停状态}if(INT1==0) //继续运行{P3=0xff; //释放暂停状态P0=n; //恢复运行P2=m;}}/******************************************************************** ********/rjl() //渐亮函数{unsigned char a, b;//a控制延时长度b控制循环周期P0 = 0xff;a = 0;for (b=250; b>0; b--) //循环周期设置{a++;zkb (a); //延时长度随a而改变P0 = 0xff;a = ~a; //a值取反,决定灯灭时的占空比zkb (a);P0 = 0x00;a = ~a; //a值取反使a回到原值继续循环}}/******************************************************************** ********/rja() //渐暗函数{unsigned char a, b;//a控制延时长度b控制循环周期P0 = 0x00; //亮起LEDa = 0;for (b=250; b>0; b--){a++;zkb (a);P0 = 0x00;a = ~a;zkb (a);P0 = 0xff;a = ~a;}}/******************************************************************** ********/zkb(unsigned char d) //占空比函数,由d决定延时长度{unsigned char i;while( --d != 0){for(i = 0; i < 1; i++); //占空比时间设置}}/******************************************************************** ********/三、实验结果流水灯能循环显示倒流水左移、倒流水右移、渐亮、渐暗、流水左移、流水右移、流水内外移,具体视频见实验结果视频文件夹。
单片机流水灯汇编程序设计开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
程序A:;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#01111111B ;最下面的LED点亮LCALL DELAY;延时1秒MOV P1,#10111111B ;最下面第二个的LED点亮LCALL DELAY;延时1秒MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略)LCALL DELAYMOV P1,#11101111BLCALL DELAYMOV P1,#11110111BLCALL DELAYMOV P1,#11111011BLCALL DELAYMOV P1,#11111101BLCALL DELAYMOV P1,#11111110BLCALL DELAYMOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:;用移位方式实现流水灯org 00h ;程序上电从00h开始ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A赋值成11111110loop:mov p1,a ;将A送到P1口,发光二极管低电平点亮lcall delay ;调用延时子程序rl a ;累加器A循环左移一位ajmp loop ;重新送P1显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。
多种方法写出的51单片机流水灯C语言程序流水灯最原始下面是一个最基本的流水灯程序,使用了51单片机的寄存器编程方法。
include "reg51.h"sbit p0=P1^0;sbit p1=P1^1;sbit p2=P1^2;sbit p3=P1^3;sbit p4=P1^4;sbit p5=P1^5;sbit p6=P1^6;sbit p7=P1^7;void mdelay(unsigned int t){unsigned char n;for(;t>0;t--)for(n=0;n<125;n++)void main()while(1)P1=0;p0=1;mdelay(1000);p0=0;p1=1;mdelay(1000);p1=0;p2=1;流水灯位左移在流水灯的基础上,我们可以通过左移位的方式来实现流水灯的效果。
void main()unsigned char led = 0x01.// 初始化led为xxxxxxxxwhile(1)P1 = ~led。
// 取反输出,因为我们的电路是低电平亮灯mdelay(1000);led <<= 1.// 左移一位if(led == 0) // 如果led变为0了,说明已经左移到最后一位了,需要重新开始led = 0x01;流水灯移位函数为了方便实现流水灯的位移,我们可以封装一个移位函数。
void shift_left(unsigned char *led。
unsigned char n)for(unsigned char i=0.i<n。
i++)led <<= 1;if(*led == 0)led = 0x01;void main()unsigned char led = 0x01;while(1)P1 = ~led;mdelay(1000);shift_left(&led。
基于51单片机的流水灯系统设计介绍:流水灯系统是一种常见的电子灯光效果,通过多个方向或位置的灯光按照一定的规则顺序闪烁,形成一种流动的效果。
这种系统在舞台演出、广告等领域广泛应用。
本文将基于51单片机设计一个简单的流水灯系统。
设计目标:本设计的主要目标是实现一个简单的有5个LED灯的流水灯系统,通过51单片机控制闪烁的频率和方向。
设计原理:1.51单片机:使用常见的AT89C51单片机,作为整个系统的控制核心。
2.LED灯:选用5个LED灯作为流水灯的灯光源。
3.节拍控制电路:通过一个定时器电路来生成节拍信号,控制LED闪烁的频率。
详细设计:1.系统硬件设计选用的51单片机AT89C51与外部晶振连接,为单片机提供时钟信号。
5个LED灯分别通过多路开关连接到51单片机的I/O口上,通过单片机控制I/O口输出高或低电平来控制LED灯的亮灭。
定时器电路通过8051单片机内部的定时器模块来实现。
2.系统软件设计使用C语言编写程序,实现流水灯的控制逻辑。
1)初始化:设置51单片机的I/O口为输出模式,并将所有LED灯都设置为关闭状态。
2)闪烁控制:使用一个循环,通过依次改变LED灯的亮灭状态实现流水灯的效果。
可以通过循环变量的增加或减少来改变流水灯的方向。
3)节拍控制:使用编写好的定时器中断服务函数,来控制流水灯的闪烁频率。
可以通过调整定时器的工作模式和计数值来调整闪烁的频率。
测试与调试:总结:本文基于51单片机设计了一个简单的流水灯系统,通过控制LED灯的闪烁频率和方向,实现流水灯的效果。
通过学习和理解该设计,我们可以进一步探索更复杂的灯光系统设计,并在实际应用中进行扩展和优化。
单片机流水灯汇编程序设计开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
程序A:;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#B ;最下面的LED点亮LCALL DELAY;延时1秒MOV P1,#B ;最下面第二个的LED点亮LCALL DELAY;延时1秒MOV P1,#B ;最下面第三个的LED点亮(以下省略)LCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#BLCALL DELAYMOV P1,#B ;完成第一次循环点亮,延时约0.25秒AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:;用移位方式实现流水灯ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A赋值成loop:mov p1,a ;将A送到P1口,发光二极管低电平点亮lcall delay ;调用延时子程序rl a ;累加器A循环左移一位ajmp loop ;重新送P1显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。
ORG 0;程序从0地址开始START: MOV A,#0FEH ;让ACC的内容为LOOP: MOV P2,A ;让P2口输出ACC的内容RR A;让ACC的内容左移CALL DELAY ;调用延时子程序LJMP LOOP ;跳到LOOP处执行;0.1秒延时子程序(12MHz晶振)===================DELAY: MOV R7,#200 ;R7寄存器加载200次数D1: MOV R6,#250 ;R6寄存器加载250次数DJNZ R6,$ ;本行执RET;返回主程序END;结束程序开关控制的单片机流水灯汇编在单片机控制下,用一个拨动开关K1,控制8个发光二极管L1-L8,发光的时间间隔为0.5秒。
单片机流水灯汇编程序设计开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
程序A:;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#01111111B ;最下面的LED点亮LCALL DELAY;延时1秒MOV P1,#10111111B ;最下面第二个的LED点亮LCALL DELAY;延时1秒MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略)LCALL DELAYMOV P1,#11101111BLCALL DELAYMOV P1,#11110111BLCALL DELAYMOV P1,#11111011BLCALL DELAYMOV P1,#11111101BLCALL DELAYMOV P1,#11111110BLCALL DELAYMOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:;用移位方式实现流水灯org 00h ;程序上电从00h开始ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A赋值成11111110loop:mov p1,a ;将A送到P1口,发光二极管低电平点亮lcall delay ;调用延时子程序rl a ;累加器A循环左移一位ajmp loop ;重新送P1显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend51单片机经典流水灯程序,在51单片机的P2口接上8个发光二极管,产生流水灯的移动效果。
ORG 0;程序从0地址开始START: MOV A,#0FEH ;让ACC的内容为11111110LOOP: MOV P2,A ;让P2口输出ACC的内容RR A;让ACC的内容左移CALL DELAY ;调用延时子程序LJMP LOOP ;跳到LOOP处执行;0.1秒延时子程序(12MHz晶振)===================DELAY: MOV R7,#200 ;R7寄存器加载200次数D1: MOV R6,#250 ;R6寄存器加载250次数DJNZ R6,$ ;本行执行R6次DJNZ R7,D1 ;D1循环执行R7次RET;返回主程序END;结束程序开关控制的单片机流水灯汇编在单片机控制下,用一个拨动开关K1,控制8个发光二极管L1-L8,发光的时间间隔为0.5秒。
具体要求:当拨动开关K1发出低电平(K1=0)时,L1-L8从两头向中间逐个点亮,当L1-L8全部点亮后延时2秒钟全部熄灭,如此往复循环。
当拨动开关K1发出高电平(K1=1)时,中间的L4、L5点亮,然后点亮的灯向两边扩展,直到L1-L8全部点亮后延时2秒钟全部熄灭,如此往复循环。
悬赏分:20 - 解决时间:2009-12-21 13:42提问者: ---------最佳答案:;--------------------------------------------下列程序,经过了编译、仿真,可以满足要求。
;--------------------------------------------ORG 0000HMOV R2, #0M_LOOP:MOV A, R2INC R2ANL A, #07HMOV C, P1.0MOV ACC.3, CMOV DPTR, #TABMOVC A, @A + DPTRMOV P0, ACALL DL5KTSJMP M_LOOP;--------------------------------------------TAB:DB 0xFF, 0xE7, 0xC3, 0x81, 0x00, 0x00, 0x00, 0x00DB 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00, 0x00, 0x00;--------------------------------------------DL5KT:mov R5, #10MOV R6, #100MOV R7, #250DJNZ R7, $DJNZ R6, $ - 4DJNZ R5, $ - 8RET;--------------------------------------------END流水灯汇编程序8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#01111111B ;最下面的LED点亮LCALL DELAY ;延时1秒MOV P1,#10111111B ;最下面第二个的LED点亮LCALL DELAY ;延时1秒MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略)LCALL DELAYMOV P1,#11101111BLCALL DELAYMOV P1,#11110111BLCALL DELAYMOV P1,#11111011BLCALL DELAYMOV P1,#11111101BLCALL DELAYMOV P1,#11111110BLCALL DELAYMOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250msPUSH PSW ;现场保护指令(有时可以不加)MOV R4,#2L3: MOV R2 ,#00HL1: MOV R3 ,#00HL2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2)DJNZ R2 ,L1 ; 中层循环:256次DJNZ R4 ,L3 ;外层循环:2次POP PSWRETEND51汇编单片机LED花样流水灯(1)start:CLR P1.0ACALL DELAYSETB P1.0ACALL DELAYCLR P1.1ACALL DELAYSETB P1.1ACALL DELAYCLR P1.2ACALL DELAYSETB P1.2ACALL DELAYCLR P1.3ACALL DELAYSETB P1.3ACALL DELAYCLR P1.4ACALL DELAYSETB P1.4ACALL DELAYCLR P1.5ACALL DELAYSETB P1.5ACALL DELAYCLR P1.6ACALL DELAYSETB P1.6ACALL DELAYCLR P1.7ACALL DELAYCLR P1.7ACALL DELAYCLR P1.0ACALL DELAYSETB P1.0ACALL DELAYCLR P1.1ACALL DELAYSETB P1.1ACALL DELAYCLR P1.2ACALL DELAYSETB P1.2ACALL DELAYCLR P1.3ACALL DELAY SETB P1.3ACALL DELAY CLR P1.4ACALL DELAY SETB P1.4ACALL DELAY CLR P1.5ACALL DELAY SETB P1.5ACALL DELAY CLR P1.6ACALL DELAY CLR P1.6ACALL DELAYCLR P1.0ACALL DELAY SETB P1.0ACALL DELAY CLR P1.1ACALL DELAY SETB P1.1ACALL DELAY CLR P1.2ACALL DELAY SETB P1.2ACALL DELAY CLR P1.3ACALL DELAY SETB P1.3ACALL DELAY CLR P1.4ACALL DELAY SETB P1.4ACALL DELAY CLR P1.5ACALL DELAY CLR P1.5ACALL DELAYCLR P1.0ACALL DELAY SETB P1.0ACALL DELAY CLR P1.1ACALL DELAY SETB P1.1 ACALL DELAY CLR P1.2ACALL DELAY SETB P1.2 ACALL DELAY CLR P1.3ACALL DELAY SETB P1.3 ACALL DELAY CLR P1.4ACALL DELAY CLR P1.4ACALL DELAYCLR P1.0ACALL DELAY SETB P1.0 ACALL DELAY CLR P1.1ACALL DELAY SETB P1.1 ACALL DELAY CLR P1.2ACALL DELAY SETB P1.2 ACALL DELAY CLR P1.3ACALL DELAY CLR P1.3 ACALL DELAYCLR P1.0ACALL DELAY SETB P1.0 ACALL DELAY CLR P1.1ACALL DELAY SETB P1.1 ACALL DELAY CLR P1.2ACALL DELAY CLR P1.2ACALL DELAYCLR P1.0ACALL DELAYSETB P1.0ACALL DELAYCLR P1.1ACALL DELAYCLR P1.1ACALL DELAYCLR P1.0ACALL DELAYCLR P1.0ACALL DELAYSETB P1.0ACALL DELAYSETB P1.1ACALL DELAYSETB P1.2ACALL DELAYSETB P1.3ACALL DELAYSETB P1.4ACALL DELAYSETB P1.5ACALL DELAYSETB P1.6ACALL DELAYSETB P1.7ACALL DELAYAJMP startDELAY:MOV R7,#250D1:MOV R6,#250D2:DJNZ R6,D2DJNZ R7,D1RETEND开发板上的8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
程序A:;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#01111111B ;最下面的LED点亮LCALL DELAY;延时1秒MOV P1,#10111111B ;最下面第二个的LED点亮LCALL DELAY;延时1秒MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略)LCALL DELAYMOV P1,#11101111BLCALL DELAYMOV P1,#11110111BLCALL DELAYMOV P1,#11111011BLCALL DELAYMOV P1,#11111101BLCALL DELAYMOV P1,#11111110BLCALL DELAYMOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY:MOV R4,#2L3: MOV R2 ,#250L1: MOV R3 ,#250L2: DJNZ R3 ,L2DJNZ R2 ,L1DJNZ R4 ,L3RETEND程序B:;用移位方式实现流水灯org 00h ;程序上电从00h开始ajmp main ;跳转到主程序org 0030h ;主程序起始地址main:mov a,#0feh ;给A赋值成11111110loop:mov p1,a ;将A送到P1口,发光二极管低电平点亮lcall delay ;调用延时子程序rl a ;累加器A循环左移一位ajmp loop ;重新送P1显示delay:mov r3,#20 ;最外层循环二十次d1:mov r4,#80 ;次外层循环八十次d2:mov r5,#250 ;最内层循环250次djnz r5,$ ;总共延时2us*250*80*20=0.8Sdjnz r4,d2djnz r3,d1retend51单片机汇编程序集作者:段磊文章来源:网络点击数:1176 更新时间:2008-9-23 20:53:391、片内RAM初始化子程序2、片外RAM初始化子程序3、片外RAM初始化子程序(双字节个单元)4、内部RAM数据复制程序5、外部RAM数据复制程序6、外部RAM数据复制程序7、外部RAM数据复制到内部RAM程序8、限幅滤波程序9、中位值滤波程序10、N点算术平均滤波11、N点加权平均滤波12、一阶加权滞后滤波程序13、双字节取补程序14、N节取补程序15、双字节无符号数加法程序16、N字节无符号数加法程序17、双字节无符号数减法程序18、N字节无符号数减法程序19、单字节无符号数乘法程序20、单字节无符号数乘法程序21、单字节无符号数乘法程序22、双字节无符号数乘法程序23、双字节无符号数乘法程序24、N字节无符号数乘法程序25、单字节无符号除法程序26、单字节无符号除法程序27、双字节无符号除法程序28、N字节无符号除法程序(组合)29、N字节无符号除法程序30、N字节数据左移程序31、原码有符号双字节减法程序32、原码有符号双字节加法程序33、原码有符号双字节乘法程序34、原码有符号双字节除法程序35、单字节顺序查找程序36、单字节顺序查找程序37、双字节字符串顺序查找程序38、双字节字符串顺序查找程序39、N字节字符串顺序查找程序40、单字节最值查找程序41、浮点数顺序查找程序42、浮点数最值查找程序43、单字节折半查找程序;片内RAM初始化子程序IBCLR :MOV A,R0MOV R1,ACLR AIBC1 :MOV @R1,AINC R1DJNZ R7,IBC1RET;片外RAM初始化子程序EBCLR1 :MOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,ACLR CEBC11 :MOVX @DPTR,AINC DPTRDJNZ R7,EBC11RET;片外RAM初始化子程序(双字节个单元) EBCLR2 :MOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,AMOV A,R7JZ EBC21INC R6EBC21 :CLR AMOVX @DPTR,AINC DPTRDJNZ R7,EBC21DJNZ R6,EBC21RET;内部RAM数据复制程序;入口 :R0,R7;占用资源:A;堆栈需求:2字节;出口 :R1IBMOV :MOV A,R0ADD A,R7MOV R0,AMOV A,R1ADD A,R7MOV R1,AIBM1 :DEC R0DEC R1MOV A,@R0MOV @R1,ADJNZ R7,IBM1RET;外部RAM数据复制程序;入口 :ADDPH,ADDPL,R7;占用资源:ACC;堆栈需求:2字节;出口 :R0,R1EBMOV1 :MOV A,ADDPLADD A,R7MOV DPL,ACLR AADDC A,ADDPHMOV DPH,AMOV A,R7ADD A,R1XCH A,R0ADDC A,#00HMOV P2,AEBM11 :DEC R0CJNE R0,#0FFH,EBM12DEC P2EBM12 :DEC DPLMOV A,DPLCJNE A,#0FFH,EBM13DEC DPHEBM13 :MOVX A,@R0MOVX @DPTR,ADJNZ R7,EBM11RET;外部RAM数据复制程序;入口 :ADDPH,ADDPL,R6,R7;占用资源:ACC;堆栈需求:2字节;出口 :R0,R1EBMOV2 :MOV A,ADDPLADD A,R7MOV DPL,AMOV A,R6ADDC A,ADDPHMOV DPH,AMOV A,R7ADD A,R1XCH A,R0ADDC A,R6MOV P2,AMOV A,R7JZ EBM21INC R6EBM21 :DEC R0CJNE R0,#0FFH,EBM22DEC P2EBM22 :DEC DPLMOV A,DPLCJNE A,#0FFH,EBM23DEC DPHEBM23 :MOVX A,@R0MOVX @DPTR,ADJNZ R7,EBM21DJNZ R6,EBM21RET;外部RAM数据复制到内部RAM程序;入口 :ADDPH,ADDPL,R7;占用资源:ACC;堆栈需求:2字节;出口 :R0ITEMOV :MOV A,ADDPLADD A,R7MOV DPL,AMOV A,ADDPHADDC A,#00HMOV DPH,AMOV A,R0ADD A,R7MOV R0,AITEM1 :DEC R0DEC DPLMOV A,DPLCJNE A,#0FFH,ITEM2DEC DPHITEM2 :MOVX A,@DPTRMOV @R0,ADJNZ R7,ITEM1RET;限幅滤波程序;入口 :A,SDAT,DELTY;占用资源:B;堆栈需求:2字节;出口 :AJUGFILT :MOV B,ACLR CSUBB A,SDATJNC JUGFT1CPL AINC AJUGFT1 :SETB ASUBB A,#DELTYJNC JUGFT3MOV A,SDATRETJUGFT3 :MOV A,BMOV SDAT,ARET;中位值滤波程序;入口 :ADDPH,ADDPL,N;占用资源:ESELSORT;堆栈需求:4字节;出口 :AMEDFILT :LCALL ESELSORTMOV A,NCLR CRRC AADD A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,AJNC MEDFT1INC DPH51单片机汇编程序集(二)2008年12月12日星期五 10:27辛普生积分程序内部RAM数据排序程序(升序)外部RAM数据排序程序(升序)外部RAM浮点数排序程序(升序)BCD小数转换为二进制小数(2位)BCD小数转换为二进制小数(N位)BCD整数转换为二进制整数(1位)BCD整数转换为二进制整数(2位)BCD整数转换为二进制整数(3位)BCD整数转换为二进制整数(N位)二进制小数(2位)转换为十进制小数(分离BCD码)二进制小数(M位)转换为十进制小数(分离BCD码)二进制整数(2位)转换为十进制整数(分离BCD码)二进制整数(2位)转换为十进制整数(组合BCD码)二进制整数(3位)转换为十进制整数(分离BCD码)二进制整数(3位)转换为十进制整数(组合BCD码)二进制整数(M位)转换为十进制整数(组合BCD码)三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7;辛普生积分程序;入口: DPTR,N,COUNT;占用资源: ACC,R3,R4,R6,R7;堆栈需求: 2字节;出口: R3,R4SJF : MOV R7,NMOVX A,@DPTRINC DPTRMOV R4,AMOV R3,#00HDEC R7SJF1 : MOVX A,@DPTRINC DPTRCLR CRLC AMOV R6,ACLR ARLC AXCH A,R7JNB ACC.0,SJF2XCH A,R6RLC AXCH A,R6XCH A,R7RLC AXCH A,R7SJF2 : XCH A,R7XCH A,R6ADD A,R4MOV R4,AMOV A,R6ADDC A,R3MOV R3,ADJNZ R7,SJF1SJF3 : MOVX A,@DPTR ADD A,R4MOV R4,ACLR AADDC A,R3MOV R3,AMOV R7,#COUNTLCALL NMUL21MOV A,NMOV B,#03HMUL ABMOV R7,ALCALL NDIV31RETNMUL21 : MOV A,R4 MOV B,R7MUL ABMOV R4,AMOV A,BXCH A,R3MOV B,R7MUL ABADD A,R3MOV R3,ACLR AADDC A,BMOV R2,ACLR OVRETNDIV31 : MOV B,#10H NDV311 : CLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV F0,CCLR CSUBB A,R7JB F0,NDV312JC NDV313NDV312 : MOV R2,AINC R4NDV313 : DJNZ B,NDV311 RET;内部RAM数据排序程序(升序);入口: R0(起始地址),N(数据个数);占用资源: ACC,B,R5,R6,R7;堆栈需求: 2字节;出口: R0ISELSORT : MOV R7,NDEC R7ISST1: MOV A,R7MOV R6,AMOV A,R0MOV R1,AMOV R2,AMOV B,@R1ISST2: INC R1MOV A,@R1CLR CSUBB A,BJC ISST3MOV A,R1MOV R2,AMOV B,@R1ISST3: DJNZ R6,ISST2MOV A,BXCH A,@R1MOV B,R2MOV R1,BMOV @R1,ADJNZ R7,ISST1RET;外部RAM数据排序程序(升序);入口: ADDPH,ADDPL(起始地址),N(数据个数) ;占用资源: ACC,B,R0,R1,R5,R7;堆栈需求: 2字节;出口: ADDPH-ADDPLESELSORT : MOV R7,NDEC R7ESST1: MOV A,R7MOV R6,AMOV DPL,ADDPLMOV R1,DPLMOV DPH,ADDPHMOV R0,DPHMOVX A,@DPTRMOV B,AESST2: INC DPTRMOVX A,@DPTRCLR CSUBB A,BMOV R1,DPHMOVX A,@DPTRMOV B,AESST3: DJNZ R6,ESST2MOVX A,@DPTRXCH A,BMOVX @DPTR,AMOV DPL,R0MOV DPH,R1MOV A,BMOVX @DPTR,ADJNZ R7,ESST1RET;外部RAM浮点数排序程序(升序);入口: ADDPH,ADDPL(起始地址),N(数据个数);占用资源: ACC,B,R0,R1,R2,R3,R4,R5,R6,R7,NCNT ;堆栈需求: 5字节;出口: ADDPH,ADDPLFSORT: MOV A,NMOV NCNT,ADEC NCNTFST1 : MOV B,NCNTMOV DPL,ADDPLMOV R1,DPLMOV DPH,ADDPHMOV R0,DPHMOVX A,@DPTRMOV R2,AINC DPTRMOVX A,@DPTRMOV R3,AINC DPTRMOVX A,@DPTRMOV R4,AFST2 : INC DPTRMOVX A,@DPTRMOV R5,AINC DPTRMOVX A,@DPTRMOV R6,AINC DPTRMOVX A,@DPTRMOV R7,APUSH BLCALL FCMPPOP BCLR CSUBB A,#02HMOV R1,AMOV R0,DPHJNC FST3DEC R0FST3 : MOV A,R5MOV R2,AMOV A,R6MOV R3,AMOV A,R7MOV R4,AFST4 : DJNZ B,FST2MOV A,DPLCLR CSUBB A,#02HMOV DPL,AJNC FST5DEC DPHFST5 : MOV A,R2MOVX @DPTR,AINC DPTRMOV A,R3MOVX @DPTR,AINC DPTRMOV A,R4MOVX @DPTR,AMOV A,R0MOV P2,AMOV A,R5MOVX @R1,AINC R1MOV A,R6MOVX @R1,AINC R1MOV A,R7MOVX @R1,ADJNZ NCNT,FST1RET;BCD小数转换为二进制小数(2位) ;入口: R0(低位首址),R7;占用资源: ACC,B,R5;堆栈需求: 2字节;出口: R3,R4PDTB : CLR AMOV R3,AMOV R4,APDB1 : MOV A,R3MOV B,#9AHMUL ABMOV R5,BXCH A,R4MOV B,#19HMUL ABADD A,R4MOV A,R5ADDC A,BMOV R5,AMOV A,@R0MOV B,#9AHMUL ABADD A,R5MOV R4,ACLR AADDC A,BXCH A,R3MOV B,#19HMUL ABADD A,R4MOV R4,AMOV A,BADDC A,R3MOV R3,AMOV A,@R0MOV B,#19HMUL ABADD A,R3MOV R3,ADEC R0DJNZ R7,PDB1RET;BCD小数转换为二进制小数(N位) ;入口: R1(低位首址),M,N;占用资源: ACC,B,R2,R3,R7;堆栈需求: 2字节;出口: R0PDTBMN : MOV A,R0MOV R2,AMOV A,R1MOV R3,AMOV B,NCLR APDBMN1 : MOV @R0,AINC R0DJNZ B,PDBMN1MOV A,NSWAP ARR AMOV R7,APDBMN2 : MOV A,R2MOV R0,AMOV A,R3MOV R1,AMOV B,MCLR CPDBMN3 : MOV A,@R1 ADDC A,@R1DA AJNB ACC.4,PDBMN4SETB CCLR ACC.4PDBMN4 : MOV @R1,AINC R1DJNZ B,PDBMN3MOV B,NPDBMN5 : MOV A,@R0RLC AMOV @R0,AINC R0DJNZ B,PDBMN5DJNZ R7,PDBMN2MOV A,R2MOV R0,ARET;BCD整数转换为二进制整数(1位) ;入口: R0(高位地址),R7;占用资源: ACC,B;堆栈需求: 2字节;出口: R4IDTB1: CLR AMOV R4,AIDB11: MOV A,R4MOV B,#0AHMUL ABADD A,@R0INC R0MOV R4,ADJNZ R7,IDB11RET;BCD整数转换为二进制整数(2位);占用资源: ACC,B;堆栈需求: 2字节;出口: R3,R4IDTB2: CLR AMOV R3,AMOV R4,AIDB21: MOV A,R4MOV B,#0AHMUL ABMOV R4,AMOV A,BXCH A,R3MOV B,#0AHMUL ABADD A,R3MOV R3,AMOV A,R4ADD A,@R0INC R0MOV R4,ACLR AADDC A,R3MOV R3,ADJNZ R7,IDB21RET;BCD整数转换为二进制整数(3位) ;入口: R0(高位地址),R7;占用资源: ACC,B;堆栈需求: 2字节;出口: R2,R3,R4IDTB3: CLR AMOV R2,AMOV R3,AMOV R4,AIDB31: MOV A,R4MOV B,#0AHMUL ABMOV R4,AMOV A,BXCH A,R3MOV B,#0AHMUL ABADD A,R3MOV R3,ACLR AADDC A,BXCH A,R2MUL ABADD A,R2MOV R2,AMOV A,R4ADD A,@R0INC R0MOV R4,ACLR AADDC A,R3MOV R3,ACLR AADDC A,R2MOV R2,ADJNZ R7,IDB31RET;BCD整数转换为二进制整数(N位) ;入口: R1(高位地址),M,N;占用资源: ACC,B,R2,R7,NCNT,F0 ;堆栈需求: 2字节;出口: R0IDTBMN : MOV A,R0MOV R2,AMOV B,NCLR AIDBMN1 : MOV @R0,AINC R0DJNZ B,IDBMN1MOV A,R2MOV R0,AMOV A,MMOV NCNT,AIDBMN2 : MOV R7,NCLR ACLR F0IDBMN3 : XCH A,@R0MOV B,#0AHMUL ABMOV C,F0ADDC A,@R0MOV F0,CMOV @R0,AINC R0MOV A,BDJNZ R7,IDBMN3MOV A,R2MOV R0,AMOV A,@R1ADD A,@R0MOV @R0,ADJNZ NCNT,IDBMN2RET;二进制小数(2位)转换为十进制小数(分离BCD码) ;入口: R3,R4,R7;占用资源: ACC,B;堆栈需求: 3字节;出口: R0PBTD : MOV A,R7PUSH APBD1 : MOV A,R4MOV B,#0AHMUL ABMOV R4,AMOV A,BXCH A,R3MOV B,#0AHMUL ABADD A,R3MOV R3,ACLR AADDC A,BMOV @R0,AINC R0DJNZ R7,PBD1POP AMOV R7,AMOV A,R0CLR CSUBB A,R7MOV R0,ARET;二进制小数(M位)转换为十进制小数(分离BCD码) ;入口: R1,M,N;占用资源: ACC,B,R2,R3,R7,NCNT;堆栈需求: 2字节;出口: R0PBTDMN : MOV A,R0MOV R2,AMOV A,R1MOV R3,AMOV A,NMOV NCNT,APBDMN1 : MOV R7,MCLR APBDMN2 : XCH A,@R1MOV B,#0AHMUL ABMOV C,F0ADDC A,@R1MOV F0,CMOV @R1,AINC R1MOV A,BDJNZ R7,PBDMN2ADDC A,#00HMOV @R0,AINC R0MOV A,R3MOV R1,ADJNZ NCNT,PBDMN1MOV A,R2MOV R0,ARET;二进制整数(2位)转换为十进制整数(分离BCD码) ;入口: R3,R4;占用资源: ACC,R2,NDIV31;堆栈需求: 5字节;出口: R0,NCNTIBTD21 : MOV NCNT,#00HMOV R2,#00HIBD211 : MOV R7,#0AHLCALL NDIV31MOV A,R7MOV @R0,AINC R0INC NCNTMOV A,R3ORL A,R4JNZ IBD211MOV A,R0CLR CSUBB A,NCNTMOV R0,ARET;二进制整数(2位)转换为十进制整数(组合BCD码) ;入口: R3,R4;占用资源: ACC,B,R7;堆栈需求: 3字节;出口: R0IBTD22 : MOV A,R0MOV R7,#03HCLR AIBD221 : MOV @R0,AINC R0DJNZ R7,IBD221POP AMOV R0,AMOV R7,#10HIBD222 : PUSH ACLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV B,#03HIBD223 : MOV A,@R0ADDC A,@R0DA AMOV @R0,AINC R0DJNZ B,IBD223POP AMOV R0,ADJNZ R7,IBD222RET;二进制整数(3位)转换为十进制整数(分离BCD码) ;入口: R2,R3,R4;占用资源: ACC,R2,NDIV31;堆栈需求: 5字节;出口: R0,NCNTIBTD31 : CLR AMOV NCNT,AIBD311 : MOV R7,#0AHLCALL NDIV31MOV A,R7MOV @R0,AINC R0INC NCNTMOV A,R2ORL A,R3ORL A,R4JNZ IBD311MOV A,R0CLR CSUBB A,NCNTRET;二进制整数(3位)转换为十进制整数(组合BCD码) ;入口: R2,R3,R4;占用资源: ACC,B,R7;堆栈需求: 3字节;出口: R0IBTD32 : MOV A,R0PUSH AMOV R7,#04HCLR AIBD321 : MOV @R0,AINC R0DJNZ R7,IBD321POP AMOV R0,AMOV R7,#18HIBD322 : PUSH ACLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV B,#04HIBD323 : MOV A,@R0ADDC A,@R0DA AMOV @R0,AINC R0DJNZ B,IBD323POP AMOV R0,ADJNZ R7,IBD322RET;二进制整数(M位)转换为十进制整数(组合BCD码) ;入口: R1,M,N;占用资源: ACC,B,R2,R3,R7;堆栈需求: 2字节;出口: R0IBTDMN : MOV A,R0MOV R2,AMOV A,R1IBDMN1 : MOV @R0,AINC R0DJNZ B,IBDMN1MOV A,MSWAP ARR ACLR CMOV R7,AIBDMN2 : MOV A,R2MOV R0,AMOV A,R3MOV R1,AMOV B,MIBDMN3 : MOV A,@R1RLC AMOV @R1,AINC R1DJNZ B,IBDMN3MOV B,NIBDMN4 : MOV A,@R0ADDC A,@R0DA AJNB ACC.4,IBDMN5SETB CCLR ACC.4IBDMN5 : MOV @R0,AINC R0DJNZ B,IBDMN4DJNZ R7,IBDMN2MOV A,R2MOV R0,ARET;三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7 ;入口: R2,R3,R4,R7;占用资源: ACC,B,F0;堆栈需求: 3字节;出口: (R2),R3,R4,R7,OVNDIV31 : MOV A,R2MOV B,R7DIV ABPUSH AMOV R2,BMOV B,#10HNDV311 : CLR CMOV A,R4RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV F0,CCLR CSUBB A,R7JB F0,NDV312JC NDV313NDV312 : MOV R2,AINC R4NDV313 : DJNZ B,NDV311POP ACLR OVJZ NDV314SETB OVNDV314 : XCH A,R2MOV R7,ARET第七个试验:流水灯数字显示综合练习----51单片机汇编语言试验教程收藏该程序运行结果为个位数码管轮流现实0,1,2,3,4,5,6,7,8然后十位数码管轮流现实0,1,2,3,4,5,6,7,8反复循环P1.0,P1.1, P1.2,P1.3, P1.4,P1.5, P1.6,P1.7, 依次点亮然后轮流点亮小喇叭不停发出滴答声:注意该程序配套为我站的倚天版开发套件:如果是标准版:因他的数码管接法不同。