单片机流水灯程序大全

合集下载

51单片机经典流水灯汇编程序

51单片机经典流水灯汇编程序

51单片机经典流水灯汇编程序(共8页)单片机流水灯汇编程序设计流水灯汇编程序8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。

;用最直接的方式实现流水灯ORG 0000H START:MOV P1,#01111111B ;最下面的LED点亮 LCALL DELAY ;延时1秒 MOV P1,#B ;最下面第二个的L ED点亮 LCALL DELAY ;延时1秒 MOV P1,#B ;最下面第三个的LED点亮(以下省略) LCALL DELAY MOV P1,#B LC ALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B LCALL DELAY MOV P1,#B LCALL DELA Y MOV P1,#B ;完成第一次循环点亮,延时约秒 AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250msPUSH PSW ;现场保护指令(有时可以不加)MOV R4,#2 L3: MOV R2 ,#00HL1: MOV R3 ,#00HL2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L 2) DJNZ R2 ,L1 ; 中层循环:256次 DJNZ R4 ,L3 ;外层循环:2次 POP PSW RET END--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--51单片机汇编程序集(二)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;二进制整数(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,R0PUSH AMOV R7,#03HCLR AIBD221 : MOV @R0,AINC R0DJNZ R7,IBD221POP AMOVR0,AMOV R7,#10HIBD222 : PUSH ACLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOVB,#03HIBD223 : MOV A,@R0ADDC A,@R0DA AMOV @R0,AINC R0DJNZ B,IBD223POP AMOV R0,ADJNZR7,IBD222RET;二进制整数(3位)转换为十进制整数(分离BCD码);入口: R2,R3,R4;占用资源: ACC,R2,NDIV31;堆栈需求: 5字节;出口: R0,NCNTIBTD31 : CLR AMOV NCNT,AIBD311 : MOV R7,#0AHLCALL NDIV31MOV A,R7MOV @R0,AINCR0INC NCNTMOV A,R2ORL A,R3ORL A,R4JNZ IBD311MOV A,R0CLR CSUBB A,NCNTMOV R0,ARET;二进制整数(3位)转换为十进制整数(组合BCD码);入口: R2,R3,R4;占用资源: ACC,B,R7;堆栈需求: 3字节;出口: R0IBTD32 : MOV A,R0PUSH AMOV R7,#04HCLR AIBD321 : MOV @R0,AINC R0DJNZ R7,IBD321POP AMOVR0,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 AMOVR0,ADJNZ R7,IBD322RET第七个试验:流水灯数字显示综合练习----51单片机汇编语言试验教程收藏该程序运行结果为个位数码管轮流现实0,1,2,3,4,5,6,7,8然后十位数码管轮流现实0,1,2,3,4,5,6,7,8反复循环,, ,, ,, ,, 依次点亮然后轮流点亮小喇叭不停发出滴答声:注意该程序配套为我站的倚天版开发套件:如果是标准版:因他的数码管接法不同。

多种方法写出的51单片机流水灯C语言程序

多种方法写出的51单片机流水灯C语言程序

目录流水灯最原始 (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;}。

最经典的51单片机经典流水灯汇编程序

最经典的51单片机经典流水灯汇编程序

单片机流水灯汇编程序设计开发板上的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单片机流水灯C语言程序

多种方法写出的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。

8个流水灯程序

8个流水灯程序

i = 10000; // SW Delay
do i--;
while(i != 0);
break;
}
}
P2DIR=BIT0;//P1.0显示按键起作用
P2OUT=BIT0+BIT3;//P2IN低电平跳转
P2REN=BIT3;//上拉电阻,缺了好像不能用
while(i != 0);
P1OUT ^= 0X20; // Toggle P1.5 using exclusive-OR
i = 10000; // SW Delay
do i--;
while(i != 0);
break;
}
}
while(i != 0);
P1OUT ^= 0X04; // Toggle P1.2 using exclusive-OR
i = 10000; // SW Delay
do i--;
while(i != 0);
P1OUT ^= 0X08; // Toggle P1.3 using exclusive-OR
while(i != 0);
P1OUT ^= 0X04; // Toggle P1.2 using exclusive-OR
i = 10000; // SW Delay
do i--;
while(i != 0);
break;
}
}
{
P1DIR |= 0X01; // Set P1.0 to output direction
P1DIR |= 0X02;
P1DIR |= 0X04;
P1DIR |= 0X08;
P1DIR |= 0X10;

单片机流水灯所有程序

单片机流水灯所有程序

单片机流水灯所有程序#include#define uchar unsigned char //char是字符数组#define unit unsigned intuchar num;sbit led1=P1^0;void main(){TMOD=0x01; // 打开工作方式寄存器,选择工作方式1(0000 0001)TH0=(65536-45872)/256;TL0=(65536-45872)%256;EA=1; //开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器0while(1); //程序停止在这里等待中断发生}void T0_time()interrupt 1{TH1=(65536-45872)/256; //装初值50msTL1=(65536-45872)%256;num++; //num每加一次判断是否到了20次if(num==20) // 20*50ms=1000ms=1s,间隔1s{num=0; //然后把num清0重新再计20次led1=~led1; //让发光管状态取反}}用定时器使1灯间隔1s闪烁#include#define uchar unsigned char#define unit unsigned intunit num ;#define ucha unsigned char#define uni unsigned intuni a ;uchar table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // ucha table1[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};void delayms(unit);void main(){while(1){for(num=0;num<8;num++) //{P1=table[num];delayms(500);}for(a=8;a>0;a--) //改成for(a=0;a>8;a++){P1=table1[a];delayms(500);}}void delayms(unit xms){unit i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}没有实现理想的流水灯,问题已解决,见下面程序#include#define uchar unsigned char#define unit unsigned intunit num ;uchar table[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; void delayms(unit);void main(){while(1){for(num=0;num<9;num++){P1=table[num];delayms(500);}for(num=9;num>0;num--)P1=table[num];delayms(500);}}}void delayms(unit xms){unit i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}用数组实现流水灯循环,依次点亮,然后依次熄灭#include#define uchar unsigned char //char是字符数组#define unit unsigned intunit num ;uchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 改变数组void delayms(unit);void main(){while(1){for(num=0;num<8;num++) //for循环P1=table[num];delayms(500);}}}void delayms(unit xms){unit i,j;for(i=xms;i>0;i--) //延迟0.5s,下一灯亮 // 加for语句for(j=110;j>0;j--);}用数组实现流水灯#include#include //包含_crol_函数所在的头文件#define unit unsigned intunit i,j;#define uchar unsigned charuchar a;void delayms(unit);void main(){a=0xfe; //赋给a初值0xfe,即1111 1110,第一个灯亮while(1){P1=a;delayms(500);a=_crol_(a,1); //循环左移指令或 a=a<<1;8 7 6 5 4 3 2 1灯}}void delayms(unit xms) //自定义毫秒X{unit i,j;for(i=xms;i>0;i--) //延迟Xmsfor(j=110;j>0;j--);}用循环左移指令实现流水灯#include //头文件#define unit unsigned int //宏定义unit i,j; //定义i;jvoid delay1s();sbit led1=P1^0; //连接1灯的是锁存器的P10端口sbit led2=P1^1;sbit led3=P1^2;sbit led4=P1^3;sbit led5=P1^4;sbit led6=P1^5;sbit led7=P1^6;sbit led8=P1^7;void main(){while(1) //循环永不停止{led1=0;delay1s(); //1灯亮1Sled1=1; led2=0 ; //1灯灭,二灯亮delay1s();led2=1;led3=0 ;delay1s();led3=1;led4=0;delay1s();led4=1;led5=0;delay1s();led5=1;led6=0;delay1s();led6=1;led7=0;delay1s();led7=1;led8=0;delay1s();led8=1;led1=0;}}void delay1s(){unit i,j; //for(i=500;i>0;i--) //延迟0.5s,下一灯亮for(j=110;j>0;j--);}流水灯#include#define unit unsigned intunit i,j;void delay1s();sbit led=P1;sbit led1=P1^0;sbit led2=P1^1;sbit led3=P1^2;sbit led4=P1^3;sbit led5=P1^4;sbit led6=P1^5;sbit led7=P1^6;sbit led8=P1^7; void main(){while(1){led1=0;delay1s();led2=0 ;delay1s();led3=0 ;delay1s();led4=0;delay1s();led5=0;delay1s();led6=0;delay1s();led7=0;delay1s();led8=0;delay1s();led8=1; delay1s();led7=1; delay1s();led6=1; delay1s();led5=1; delay1s();led4=1; delay1s();led3=1; delay1s();led2=1; delay1s();led1=1; delay1s();P1=0;delay1s(); P1=0xff;delay1s();}}void delay1s(){unit i,j;for(i=500;i>0;i--)for(j=110;j>0;j--);}依次点亮,一亮二亮----全亮---依次熄灭---全灭------全亮#include#define unit unsigned intunit i,j;void delay1s();sbit led=P1;sbit led1=P1^0;sbit led2=P1^1;sbit led3=P1^2;sbit led4=P1^3;sbit led5=P1^4;sbit led6=P1^5;sbit led7=P1^6;sbit led8=P1^7;void main(){while(1){led1=0;delay1s(); //1灯亮1Sled1=1; led2=0 ; //1灯灭,二灯亮delay1s();led2=1;led3=0 ;delay1s();led3=1;led4=0;delay1s();led4=1;led5=0;delay1s();led5=1;led6=0;delay1s();led6=1;led7=0;delay1s();led7=1;led8=0;delay1s();led8=1;P1=0;delay1s();P1=0xff ;}}void delay1s(){unit i,j;for(i=500;i>0;i--)for(j=110;j>0;j--);} 依次亮,全亮,全灭,循环#include#define unit unsigned int unit i,j;void delay1s();sbit LED4=P1^3;sbit LED5=P1^4;sbit dula=P2^1;void main(){while(1){LED4=0;delay1s();LED4=1; LED5=0 ;delay1s();}}void delay1s(){unit i,j;for(i=500;i>0;i--)for(j=110;j>0;j--);}4闪5亮#includesbit LED2=P1^1;sbit dula=P2^6;void main(){ dula=1;LED2=0;dula=0;} 二灯亮#includesbit LED4=P1^3;sbit LED5=P1^4;sbit dula=P2^1;#define unit unsigned intvoid main(){ while (1){ LED4=0;for(i=1000;i>0;i--)for(j=110;j>0;j--);LED4=1;LED5=0;for(i=1000;i>0;i--)for(j=110;j>0;j--);}dula=1;LED4=0;dula=0;}4闪5亮#include#define unit unsigned int sbit led1=P1^0;void delays(unit);void main(){while(1){led1=0;delay1s();delay1s();}}void delay1s(){unit i,j; //使用局部变量可节约单片机内存for(i=500;i>0;i--)for(j=110;j>0;j--);}#includesbit led=P1^0;unsigned int a;void main() //主函数{while(1){a=51000;led=0;while(a--);led=1;a=51000;while(a--);}}用while函数实现延迟,延迟0.5s#include#define unit unsigned intsbit led1=P1^0;unit i,j;void main (){ while (1){ led1=0;for(i=1000;i>0;i--)for(j=110;j>0;j--);led1=1;for(i=1000;i>0;i--)for(j=110;j>0;j--);}}一灯亮,延迟1s,灭。

单片机-流水灯的程序

单片机-流水灯的程序

单片机-流水灯的程序流水灯是学习单片机基础知识不可或缺的一个实验,通过流水灯的实现可以掌握单片机 I/O 口的使用、定时器中断的使用以及掌握基本的程序流程控制语句。

本文将介绍流水灯基本概念及实现步骤。

流水灯基本概念流水灯是由多个 LED 灯组成的,每个灯都有一个独立的控制信号,通过按照一定的模式控制信号的输出,就可以实现流水灯的效果。

在单片机中,可以通过将多个 I/O 口作为流水灯中的 LED 控制信号输入口,实现流水灯的效果。

流水灯程序实现步骤在单片机中实现流水灯的程序主要包括以下几个步骤:1.通过 I/O 口控制单片机的 GPIO 端口输出。

2.在控制 GPIO 端口输出时,需要注意端口的方向设置与输出方式的选择。

3.通过控制 GPIO 端口的输出,可以实现 LED 灯的亮灭控制。

4.在亮灭控制中,需要注意定时器中断的使用,以保证流水灯的优美效果。

5.在程序编写的同时,需要考虑到不同型号单片机 I/O 口和定时器的不同特性。

6.需要根据不同的实验要求和要达到的效果,编写相应的程序。

流水灯程序的实现步骤详解下面,将详细介绍流水灯程序的实现步骤:1.首先,需要定义 I/O 口与对应的 LED 灯的对应关系。

一般情况下,LED 灯是连接在单片机的某一 I/O 口上。

我们需要将 I/O 口与 LED 灯的对应关系进行定义,以便在编写程序时可以通过 I/O 口控制 LED 灯的亮灭。

2.接着,需要设置 I/O 口的方向和输出方式。

在单片机的 I/O 口中,默认输入方向,如果要将 I/O 口设置为输出方向,则需要通过软件设置 I/O 口相应的设置寄存器。

同时,需要设置输出方式为推挽输出或是开漏输出,并配置相应的电平。

3.设置定时器。

在流水灯程序中,需通过定时器中断控制 LED 灯的亮灭模式。

需要设置定时器的时钟源、预分频系数、计数值和比较值等参数,以实现不同的滚动速度和亮灭模式。

4.定义中断函数。

中断函数需要根据定时器的计时值进行 LED 灯亮灭的控制操作。

stc89c51单片机流水灯程序

stc89c51单片机流水灯程序

stc89c51单片机流水灯程序51单片机流水灯程序程序一(用C语言编的最基础的程序)#include<reg52.h>#include<stdio.h>sbit D0=P1^0;//位定义,把P1口的第一个管脚定义为D0sbit D1=P1^1;// 位定义,把P1口的第二个管脚定义为D1sbit D2=P1^2;// 位定义,把P1口的第3个管脚定义为D2sbit D3=P1^3;// 位定义,把P1口的第4个管脚定义为D3sbit D4=P1^4;// 位定义,把P1口的第5个管脚定义为D4sbit D5=P1^5;// 位定义,把P1口的第6个管脚定义为D5sbit D6=P1^6;// 位定义,把P1口的第7个管脚定义为D6sbit D7=P1^7;// 位定义,把P1口的第8个管脚定义为D7void main(){sbit d8=P1^7;void main(){unsigned int i=1,a,b; while(1)//大循环{for(i=1;i<15;i++){for(a=0;a<80;a++)//延时。

for(b=0;b<200;b++);switch(i){case 1:d2=1,d1=0,d8=1;break;case 2:d1=1,d2=0;break;case 3:d2=1,d3=0;break;case 4:d3=1,d4=0; break; case 5:d4=1,d5=0; break; case 6:d5=1,d6=0; break; case 7:d6=1,d7=0; break; case 8:d7=1,d8=0; break; case 9:d8=1,d7=0; break; case 10:d7=1,d6=0; break; case 11:d6=1,d5=0;break;case 12:d5=1,d4=0;break;case 13:d4=1,d3=0;break;case 14:d3=1,d2=0;break;}};}}程序三(最简洁的):#include<reg52.h>#include<intrins.h>//_crol_和_cror_的头文件。

单片机-流水灯的程序

单片机-流水灯的程序
程序分析:
#include<reg51.h> sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; void delay (unsigned char x);
其中void表示这 个函数执行完后 不返回任何数据。 ()内无任何东西, 所以这是个无参 数的函数。 Delayms是函数名。
1
2
3
4
5
6
2)带参数函数的用位定义实现流水灯(8位二极管循环点亮)
编程思路: a) 先点亮第一盏灯,延时点亮第二盏, 依次延时8盏灯全部点亮。 b) 当8盏灯全部点亮时,熄灭8盏灯。 c) 进入循环。
循环移动
循环左移 最高位移入最低位,其它依次向左移动一位。C语言中 没有专门的指令,通过移位指令和简单逻辑运算来实现循环左移,或直接利用C51库中自带的函数-crol-实现。
循环右移 最低位移入最高位,其它位依次向右移一位,C语言中没有专门的指令,通过移位指令与简单的逻辑运算可以实现循环右移,或专门利用C51库中自带函数-cror-实现
方法二:利用总线控制实现流水灯(8位二极管循环点亮)
相关知识 二进制和十六进制之间的相互转换
二进制
十六进制
二进制
十六进制
0000
0
0100
4
0001
1
0101
5
0010
2
0110
6
0011
3
0111
7
二进制
十六进制
二进制

51单片机经典流水灯程序

51单片机经典流水灯程序

单片机流水灯汇编程序设计开发板上的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秒。

单片机流水灯汇编语言源代码大全(六款流水灯汇编语言源代码)

单片机流水灯汇编语言源代码大全(六款流水灯汇编语言源代码)
源代码:
ORG 0
MOV R1,#3
LOOP1:MOV R0,#8
MOV A,#11111110B
LOOP2:MOV P0,A
RL A
CALL D200MS
DJNZ R0,LOOP2
DJNZ R1,LOOP1
MOV A,#00000000B
MOV P0,A
MOV P2,#0FFH
LOOP:MOV A,P2
ORG 0000H
JMP main
ORG 0003H
JMP int_0
main:
SETB IT0
SETB EX0
SETB EA
MOV A,#11111110B
s:RL A
MOV P2,A
CALL delay
JMP s
delay:
MOV R7,#100
d3:MOV R6,#200
d2:MOV R5,#250
ORG 0000H
MOV R0,#11111110B
start:MOV A,#11111110B
MOV P2,A
s:CALL delay
RL A
MOV P2,A
CALL delay
CJNE A,#01111111B,s
MOV A,R0
MOV P1,A
RL A
MOV R0,A
JMP start
delay:MOV R5,#100
CPL A
MOV P0,A
JMP LOOP
D200MS:
MOV R7,#250
D1:MOV R6,#200
D2:MOV R5,#2
DJNZ R5,$
DJNZ R6,D2
DJNZ R7,D1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、用Proteus软件画出电路原理图。

要求在P1.0至P1.7口
线上分别接LED0至LED7八个发光二极管,在P3.0口线上
接一蜂鸣器。

2、编写程序:要求LED0至LED7以秒速率循环右移。

3、编写程序:要求LED0至LED7以秒速率循环左移。

4、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。

查询方式右移
ORG 0000H
CLRO: MOV IE, #00H;关闭中断
MOV TMOD, #10H;方式1
MOV SP, #30H; 开辟栈底
MOV TH1, #3CH;采用定时器1定时50ms
MOV TL1, #0B0H;
SETB TR1;开启定时器
MOV P1, #07FH;起始状态LED7亮
MOV A, #7FH;
MOV P3, #0FFH;
MAIN: MOV R3,#14H;20次
LCALL TIME; 定时一秒
CLR P3.0;
RR A;右移
MOV P1, A;灯右移
LJMP MAIN;
定时一秒的子程序
TIME: JBC TF1, LOOP2;溢出标志位为1跳转
AJMP TIME;
LOOP2: MOV TH1, #3CH;
MOV TL1, #0B0H;
DJNZ R3, TIME;R3先自减再,判断R3是否为0,为0跳转RET;返回主程序
END
中断方式左移低电平有效
START: LJMP MAIN
ORG 000BH
LJMP TTCO
ORG 0100H
MAIN: MOV SP, #30H; 开辟栈底
SETB EA; 打开总中断
SETB ET0; 打开定时器中断
MOV R1, #00H;
MOV R2, #14H;
MOV A, #0FEH; 给A送值
MOV P1, A;初始状态LED0亮
LOOP: LCALL TIME;调用一秒的延时子程序
RL A;左移
MOV P1, A;灯左移
CLR P3.0;开启蜂鸣器
LJMP LOOP;
定时为1S,
TIME: MOV TMOD, #01H; 设置定时器为工作方式1
MOV TH0, #3CH; 初始化定时时间50us
MOV TL0, #0B0H;
SETB TR0;
LOOP2: CJNE R1, #14H, LOOP2; 出现R1=14H才往下执行,MOV R1, #00H;
RET
ORG 2000H
中断程序
TTCO: MOV TH0, #3CH
MOV TL0, #0B0H; 再次初始化定时时间
INC R1
LOOP1: RETI
END
双向流水灯循环
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TTC0
MAIN: MOV R0, #08H
MOV R1, #00H
MOV A, #0FEH
SETB EA
SETB ET0;
LOOP1: LCALL TIME
MOV P1, A
RL A
CPL P3.0;
DJNZ R0, LOOP1
MOV R0,#08H;
LOOP2: LCALL TIME
RR A ;
MOV P1,A;
CPL P3.0
DJNZ R0, LOOP2;
MOV R0,#08H;
LJMP LOOP1;
TIME: MOV TMOD, #01H
MOV TH0, #3CH
MOV TL0, #0B0H
SETB TR0;
HERE: CJNE R1, #14H, HERE
MOV R1, #00H
RET
ORG 2000H
TTC0: INC R1;
MOV TH0, #3CH
MOV TL0, #0B0H
RETI
END
十六进制数,12MHZ,
ORG 0000H
CLRO: MOV IE, #00H;
MOV TMOD, #10H;方式1
MOV TH1, #3CH;定时器1定时50ms
MOV TL1, #0B0H;
SETB TR1;开始定时器
MOV R3, #00H;
MOV P1, #0FFH;led初始全灭
MOV A, #00H;
MOV P3, #0FFH;
MOV SP, #30H;开辟堆栈MAIN: LCALL TIME;
MOV R3, #00H;
ADDC A, #01H;高电平有效
MOV R2, A;保护A,
CPL A;对A取反
MOV P1, A;把A赋格P1
MOV A, R2;取出以前的A
CLR P3.0;开启蜂鸣器
CJNE A, #0FFH, MAIN;
MOV A, #00H;清零重新开始
LJMP MAIN;
延时1ms子程序
TIME: JBC TF1, LOOP2;溢出标志位
AJMP TIME;
LOOP2: INC R3;
MOV TH1, #3CH;
MOV TL1, #0B0H;
CJNE R3, #14H, TIME;执行20次
RET
END
LED0表示第七位--LED7表示第0位
ORG 0000H ; 十六进制计数规律翻转亮灯(由原来子程序——查询改写)
MAIN: MOV A, #01H
CLR EA
MOV R0, #14H;定20次
MOV P1, #80H
LOOP1: LCALL DELAY
MOV R0, #14H
INC A
MOV 20H, A; 将A的值存入20H位寻址区
JB 20H.0, FZ1; 判断20H.0是否为1
NEXT1: JB 20H.1, FZ2; 。

NEXT2: JB 20H.2, FZ3; 。

NEXT3: JB 20H.3, FZ4; 。

NEXT4: JB 20H.4, FZ5; 。

NEXT5: JB 20H.5, FZ6; 。

NEXT6: JB 20H.6, FZ7; 。

NEXT7: JB 20H.7, FZ8; 。

LJMP OUT
FZ1: SETB 0FH; 如果20H.0为1则将21H.7(0FH)置1
LJMP NEXT1; 跳转到上面继续判断下一位
FZ2: SETB 0EH; 。

LJMP NEXT2; 。

FZ3: SETB 0DH;
LJMP NEXT3;
FZ4: SETB 0CH;
LJMP NEXT4;
FZ5: SETB 0BH;
LJMP NEXT5;
FZ6: SETB 0AH;
LJMP NEXT6;
FZ7: SETB 09H;
LJMP NEXT7;
FZ8: SETB 08H;
OUT: MOV P1, 21H; 将翻过来的数输入到P1口
MOV 21H, #00H; 清零为重新输入新的值做准备
LJMP LOOP1
DELAY: MOV TMOD, #01H ;方式1
MOV TH0, #03CH; 定时50MS
MOV TL0, #0B0H
MOV IE, #00H
SETB TR0
LOOP2: JBC TF0, LOOP3
LJMP LOOP2
LOOP3: DJNZ R0, DELAY;R0自减判断循环
RET
END。

相关文档
最新文档