单片机流水灯所有程序

合集下载

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;}。

单片机流水灯程序

单片机流水灯程序

单片机流水灯程序流水灯是一种简单而常见的电子技术实验项目,也是学习掌握单片机编程的基本操作之一。

本文将介绍如何使用C语言编写单片机流水灯程序,并通过Markdown文本格式输出。

硬件准备在开始编写流水灯程序之前,我们需要准备以下硬件设备:1.单片机开发板(如:Arduino、STM32等)2.LED灯(可根据自己的需求选择,一般使用红色、黄色、绿色等常见颜色的LED灯即可)3.杜邦线(用于连接单片机和LED灯)程序编写引入头文件首先,我们需要引入相应的头文件,以便使用单片机相关的功能库和定义常量。

#include <Arduino.h>定义引脚接下来,我们需要定义引脚,将LED灯的接口与开发板的引脚连接起来。

#define LED_PIN_1 2#define LED_PIN_2 3#define LED_PIN_3 4#define DELAY_TIME 500在这个例子中,我们使用了3个LED灯,分别连接到开发板的2、3、4号引脚。

DELAY_TIME用于控制每个灯亮起的时间间隔,单位是毫秒。

初始化引脚在进入主程序之前,我们需要对引脚进行初始化,设置引脚的输出模式。

void setup() {pinMode(LED_PIN_1, OUTPUT);pinMode(LED_PIN_2, OUTPUT);pinMode(LED_PIN_3, OUTPUT);}主程序接下来就是我们的主程序部分,我们可以使用循环语句来实现LED灯的流水效果。

void loop() {digitalWrite(LED_PIN_1, HIGH);delay(DELAY_TIME);digitalWrite(LED_PIN_1, LOW);digitalWrite(LED_PIN_2, HIGH);delay(DELAY_TIME);digitalWrite(LED_PIN_2, LOW);digitalWrite(LED_PIN_3, HIGH);delay(DELAY_TIME);digitalWrite(LED_PIN_3, LOW);}在这个例子中,我们依次点亮每个LED灯,并延迟一定的时间后熄灭,然后依次点亮下一个LED灯,以此循环。

单片机流水灯程序大全

单片机流水灯程序大全

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

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

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

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

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

查询方式右移ORG 0000HCLRO: MOV IE, #00H;关闭中断MOV TMOD, #10H;方式1MOV SP, #30H; 开辟栈底MOV TH1, #3CH;采用定时器1定时50msMOV 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 MAINORG 000BHLJMP TTCOORG 0100HMAIN: 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; 设置定时器为工作方式1MOV TH0, #3CH; 初始化定时时间50usMOV TL0, #0B0H;SETB TR0;LOOP2: CJNE R1, #14H, LOOP2; 出现R1=14H才往下执行,MOV R1, #00H;RETORG 2000H中断程序TTCO: MOV TH0, #3CHMOV TL0, #0B0H; 再次初始化定时时间INC R1LOOP1: RETIEND双向流水灯循环ORG 0000HLJMP MAINORG 000BHLJMP TTC0MAIN: MOV R0, #08HMOV R1, #00HMOV A, #0FEHSETB EASETB ET0;LOOP1: LCALL TIMEMOV P1, ARL ACPL P3.0;DJNZ R0, LOOP1MOV R0,#08H;LOOP2: LCALL TIMERR A ;MOV P1,A;CPL P3.0DJNZ R0, LOOP2;MOV R0,#08H;LJMP LOOP1;TIME: MOV TMOD, #01HMOV TH0, #3CHMOV TL0, #0B0HSETB TR0;HERE: CJNE R1, #14H, HEREMOV R1, #00HRETORG 2000HTTC0: INC R1;MOV TH0, #3CHMOV TL0, #0B0HRETIEND十六进制数,12MHZ,ORG 0000HCLRO: MOV IE, #00H;MOV TMOD, #10H;方式1MOV TH1, #3CH;定时器1定时50msMOV 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赋格P1MOV A, R2;取出以前的ACLR 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次RETENDLED0表示第七位--LED7表示第0位ORG 0000H ; 十六进制计数规律翻转亮灯(由原来子程序——查询改写)MAIN: MOV A, #01HCLR EAMOV R0, #14H;定20次MOV P1, #80HLOOP1: LCALL DELAYMOV R0, #14HINC AMOV 20H, A; 将A的值存入20H位寻址区JB 20H.0, FZ1; 判断20H.0是否为1NEXT1: JB 20H.1, FZ2; 。

51单片机经典流水灯程序

51单片机经典流水灯程序
delay:
mov r3,#20 ;最外层循环二十次
ACALL DELAY
CLR P1.5
ACALL DELAY
CLR P1.5
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.1
ACALL DELAY
SETB P1.1
ACALL DELAY
CLR P1.2
ACALL DELAY
SETB P1.2
DJNZ R7,D1 ;D1循环执行R7次
RET ;返回主程序
END ;结束程序
开关控制的单片机流水灯 汇编
在单片机控制下,用一个拨动开关K1,控制8个发光二极管L1-L8,发光的时间间隔为0.5秒。
具体要求:
当拨动开关K1发出低电平(K1=0)时,L1-L8从两头向中间逐个点亮,当L1-L8全部点亮后延时2秒钟全部熄灭,如此往复循环。
ACALL DELAY
CLR P1.4
ACALL DELAY
SETB P1.4
ACALL DELAY
CLR P1.5
ACALL DELAY
SETB P1.5
ACALL DELAY
CLR P1.6
ACALL DELAY
CLR P1.6
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY
CLR P1.2
ACALL DELAY
CLR P1.2
ACALL DELAY
CLR P1.0
ACALL DELAY
SETB P1.0
ACALL DELAY

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;

简单的单片机的流水灯程序

简单的单片机的流水灯程序

;----- 主程序开始-----START:CLR P1.0 ;P1.0输出低电平,使LED1点亮ACALL DELAY;调用延时子程序SETB P1.0;P1.0输出高电平,使LED1熄灭CLR P1.1;P1.1输出低电平,使LED2点亮ACALL DELAY;调用延时子程序SETB P1.1;P1.1输出高电平,使LED2熄灭CLR P1.2;P1.2输出低电平,使LED3点亮ACALL DELAY;调用延时子程序SETB P1.2;P1.2输出高电平,使LED3熄灭CLR P1.3;P1.3输出低电平,使LED4点亮ACALL DELAY;调用延时子程序SETB P1.3;P1.3输出高电平,使LED4熄灭CLR P1.4;P1.4输出低电平,使LED5点亮ACALL DELAY;调用延时子程序SETB P1.4;P1.4输出高电平,使LED5熄灭CLR P1.5;P1.5输出低电平,使LED6点亮ACALL DELAY;调用延时子程序SETB P1.5;P1.5输出高电平,使LED6熄灭CLR P1.6;P1.6输出低电平,使LED7点亮ACALL DELAY;调用延时子程序SETB P1.6;P1.6输出高电平,使LED7熄灭CLR P1.7;P1.7输出低电平,使LED8点亮ACALL DELAY;调用延时子程序SETB P1.7;P1.7输出高电平,使LED8熄灭ACALL DELAY;调用延时子程序AJMP START;8个LED流了一遍后返回到标号START处再循环;----- 延时子程序-----DELAY:MOV R0,#255;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET;子程序返回END;程序结束。

单片机流水灯所有程序

单片机流水灯所有程序

单片机流水灯所有程序#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,灭。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机流水灯所有程序 SANY GROUP system office room 【SANYUA16H-SANYHUASANYUA8Q8-#include<reg52.h>#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)%6;EA=1; //开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器0while(1); //程序停止在这里等待中断发生}void T0_time()interrupt 1{TH1=(65536-45872)/256; //装初值50msTL1=(65536-45872)%6;num ; //num每加一次判断是否到了20次if(num==20) // 20*50ms=1000ms=1s,间隔1s{num=0; //然后把num清0重新再计20次led1=~led1; //让发光管状态取反}}用定时器使1灯间隔1s闪烁#include<reg52.h>#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<reg52.h>#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<reg52.h>#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<reg52.h>#include<intrins.h> //包含_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--) //延迟Xms for(j=110;j>0;j--);}用循环左移指令实现流水灯#include<reg52.h> //头文件#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<reg52.h>#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<reg52.h>#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<reg52.h>#define unit unsigned intunit 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亮#include<reg52.h>sbit LED2=P1^1;sbit dula=P2^6;void main(){ dula=1;LED2=0;dula=0;} 二灯亮#include<reg52.h>sbit LED4=P1^3;sbit LED5=P1^4;sbit dula=P2^1;#define unit unsigned int unit i,j;void 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<reg52.h>#define unit unsigned intsbit led1=P1^0;void delays(unit);void main(){while(1){led1=0;delay1s();led1=1;delay1s();}}void delay1s(){unit i,j; //使用局部变量可节约单片机内存 for(i=500;i>0;i--)for(j=110;j>0;j--);}#include<reg52.h>sbit 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<reg52.h>#define unit unsigned int sbit 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,灭。

相关文档
最新文档