*************************************************************/ #include<reg51.h> //51系列单片机定义文件 #define uchar unsigned char //定义无符号字符 #define uint unsigned int //定义无符号整数 void delay(uint); //声明延时函数 void main(void) { uint i; uchar temp; while(1) { temp=0x01; for(i=0;i<8;i++) //8个流水灯逐个闪动 { P1=~temp; delay(100); //调用延时函数 temp<<=1; } temp=0x80; for(i=0;i<8;i++) //8个流水灯反向逐个闪动 { P1=~temp; delay(100); //调用延时函数 temp>>=1; } temp=0xFE; for(i=0;i<8;i++) //8个流水灯依次全部点亮 { P1=temp; delay(100); //调用延时函数 temp<<=1; } temp=0x7F; for(i=0;i<8;i++) //8个流水灯依次反向全部点亮 { P1=temp; delay(100); //调用延时函数 temp>>=1; } } } void delay(uint t) //定义延时函数 { register uint bt; for(;t;t--) for(bt=0;bt<255;bt++); } /************************************************************ *89C51、S51单片机32个IO口流水灯测试程序 *Flash0、1、2、3分别对应单片机的P0、1、2、3四个口 *a程序对应流水灯从全灭到一个一个亮 *b程序对应流水灯从全亮到一个一个灭 *Author:大灵通 *2006-7-26 10:57,OK! *************************************************************/ #include<reg51.h> #include<intrins.h> #include<absacc.h> #define uchar unsigned char #define uint unsigned int #define TimeDelay 60000 void delay(uint n); void Flash0a(void); void Flash0b(void); void Flash1a(void); void Flash1b(void); void Flash2a(void); void Flash2b(void); void Flash3a(void); void Flash3b(void); /************************************************************ *Function: 主函数 *parameter: *Return: *Modify: *************************************************************/ void main(void) { while(1) { Flash1b(); Flash1a(); delay(TimeDelay); delay(TimeDelay); Flash0b(); Flash0a(); Flash2b(); Flash2a(); Flash1b(); Flash1a(); Flash3b(); Flash3a(); } } /************************************************************ *Function: 延时 *parameter: *Return: *Modify: *************************************************************/ void delay(uint n) { while(n!=0) { n--; } } void Flash0a(void) { uchar i; uchar Temp; Temp = 0x80; for(i=0;i<8;i++) { P0 = ~Temp; delay(TimeDelay); Temp = Temp >> 1; } P0 = 0xff; } void Flash0b(void) { uchar i; uchar Temp; Temp = 0x80; for(i=0;i<8;i++) { P0 = Temp; delay(TimeDelay); Temp = Temp >> 1; } P0 = 0; } void Flash1a(void) { uchar i; uchar Temp; P1 = 1; Temp = 0x80; for(i=0;i<8;i++) { P1 = ~Temp; delay(TimeDelay); Temp = Temp >> 1; } P1 = 0xff; } void Flash1b(void) { uchar i; uchar Temp; P1 = 1; Temp = 0x80; for(i=0;i<8;i++) { P1 = Temp; delay(TimeDelay); Temp = Temp >> 1; } P1 = 0; } void Flash2a(void) { uchar i; uchar Temp; P2 = 1; Temp = 0x80; for(i=0;i<8;i++) { P2 = ~Temp; delay(TimeDelay); Temp = Temp >> 1; } P2 = 0xff; } void Flash2b(void) { uchar i; uchar Temp; P2 = 1; Temp = 0x80; for(i=0;i<8;i++) { P2 = Temp; delay(TimeDelay); Temp = Temp >> 1; } P2 = 0; } void Flash3a(void) { uchar i; uchar Temp; P3 = 1; Temp = 0x80; for(i=0;i<8;i++) { P3 = ~Temp; delay(TimeDelay); Temp = Temp >> 1; } P3 = 0xff; } void Flash3b(void) { uchar i; uchar Temp; P3 = 1; Temp = 0x80; for(i=0;i<8;i++) { P3 = Temp; delay(TimeDelay); Temp = Temp >> 1; } P3 = 0; } =========== 1口八个LED灯做三路流水灯实验 ;*************************************************************** ;* Date : 2004.4.20 * ;* Support Mb:020-34007281 E-mail:c51cn@163.com * ;* Create by :dengdewu http://www.c51.cn 更多例程请登陆网站 * ;* 网站单片机学习资料同步更新,敬请新老朋友随时关注 * ;*************************************************************** ORG 0000H LJMP MAIN ORG 030H MAIN:MOV P1,#0DBH ;11011011--0为亮,1为灭 ACALL DELAY MOV P1,#06DH ;01101101 ACALL DELAY MOV P1,#0B6H ;10110110 ACALL DELAY AJMP MAIN DELAY:MOV R7,#255 ;延时子程序 D1: MOV R6,#255 D2: DJNZ R6,D2 DJNZ R7,D1 RET END |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |