花样流水灯程序
- 格式:doc
- 大小:22.50 KB
- 文档页数:2


3种方法实现流水灯3种方法实现流水灯(P0一般接10K的上拉电阻,此图复位电路没给出)当然,有些比较有心的同学会做些有花样的,如这种“心”形的流水灯下面试代码:(1)用总线的方法实现流水灯#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchartable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void delay(uint xms) //延时约1ms{uintx,y;for(x=110;x>0;x--)for(y=xms;y>0;y--);}void main(){uchar i;while(1){for(i=0;i<8;i++){P0=table[i];delay(500);}}}(2)移位实现流水灯#include<reg52.h>#define uchar unsigned char#define uint unsigned intvoid delay(uint xms) //延时约1ms{uintx,y;for(x=110;x>0;x--)for(y=xms;y>0;y--);}void main(){uchar a,i;while(1){a=0xfe;for(i=0;i<8;i++){P0=a;a=a<<1;a=a|0x01;delay(500);}}}(3)用库函数实现流水灯#include<reg52.h>#include<intrins.h>//此头文件包含移位函数#define uchar unsigned char#define uint unsigned intvoid delay(uint xms) //延时约1ms {uint x,y;for(x=110;x>0;x--)for(y=xms;y>0;y--);}void main(){uint a;a=0xfe;while(1){P2=a;a=_crol_(a,1);delay(500);}}。
单片机流水灯汇编程序设计开发板上的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个发光二极管,产生流水灯的移动效果。