实现LED流水灯的三种方法

tech2022-09-05  110

1.通过移位来实现LED流水灯

#include<reg52.h> //此文件中定义了单片机的一些特殊功能寄存器 #include<intrins.h> //程序中有用到_nop_()函数,将函数库intrins.h头文件包含进来 #define LED P0 //对P0口进行宏定义 /******************************************************************************* * 函数名称 : void Delay1s() * 函数功能 : 延时函数,延时1秒 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Delay1s(void) //延时1秒函数,误差 0us { unsigned char a,b,c; for(c=46;c>0;c--) //循环嵌套语句 for(b=152;b>0;b--) for(a=70;a>0;a--); _nop_(); //延时1us, } /******************************************************************************* * 函数名称 : LedWaterLamp1() * 函数功能 : 用移位实现流水灯操作 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LedWaterLamp1() { int i; //声明整形变量i while(1) //无线循环 { for(i=0;i<8;i++) { LED = ~(0x01<<i); //将0000 0001左移i位,然后将结果取反赋值到P0口 Delay1s(); //延时1秒 } } } /******************************************************************************* * 函数名称 : main() * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() //主函数 { LedWaterLamp1(); //实现流水灯函数 }

2.用库中intrins.h的_crol_()左移函数和_cror_()右移函数来实现LED流水灯

#include<reg52.h> //此文件中定义了单片机的一些特殊功能寄存器 #include<intrins.h> //程序中有用到_nop_()函数,将函数库intrins.h头文件包含进来 #define LED P0 //对P0口进行宏定义 /******************************************************************************* * 函数名称 : void Delay1s() * 函数功能 : 延时函数,延时1秒 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Delay1s(void) //延时1秒函数,误差 0us { unsigned char a,b,c; for(c=46;c>0;c--) //循环嵌套语句 for(b=152;b>0;b--) for(a=70;a>0;a--); _nop_(); //延时1us, } /******************************************************************************* * 函数名称 : LedWaterLamp2() * 函数功能 : 用库中intrins.h的_crol_()左移函数和_cror_()右移函数来实现流水灯操作 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LedWaterLamp2() { LED = 0xfe; //给P0端口赋值 for(;;) //无线循环 { LED = _crol_(LED,1);//字符循环左移函数,led为移动的值,1为移动位数,包含在intrins.h库函数中 //LED = _cror_(LED,1);//字符循环右移函数,led为移动的值,1为移动位数,包含在intrins.h库函数中 Delay1s(); //延时1秒 } } /******************************************************************************* * 函数名称 : main() * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() //主函数 { LedWaterLamp2(); //实现流水灯函数 }

3.通过数组实现LED流水灯

#include<reg52.h> //此文件中定义了单片机的一些特殊功能寄存器 #include<intrins.h> //程序中有用到_nop_()函数,将函数库intrins.h头文件包含进来 #define LED P0 //对P0口进行宏定义 unsigned char table[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /******************************************************************************* * 函数名称 : void Delay1s() * 函数功能 : 延时函数,延时1秒 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Delay1s(void) //延时1秒函数,误差 0us { unsigned char a,b,c; for(c=46;c>0;c--) //循环嵌套语句 for(b=152;b>0;b--) for(a=70;a>0;a--); _nop_(); //延时1us, } /******************************************************************************* * 函数名称 : LedWaterLamp3() * 函数功能 : 用数组实现流水灯操作 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LedWaterLamp3() { int i; for(;;) //无线循环 { for(i=0;i<8;i++) { LED = table[i]; //向右移动流水灯 //LED = table[7-i]; //向左移动流水灯 Delay1s(); //延时1秒 } } } void main() //主函数 { LedWaterLamp3(); //实现流水灯函数 }

 

最新回复(0)