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(); //实现流水灯函数
}