麻了...为什么Markdown编辑器一复制粘贴就无了...
单片机依旧使用的是普中-单核-A2。
#include "reg52.h"
#include "intrins.h"//左右移函数所在的头文件
/* 函数声明 */
void delay_ms(int n);//延时1ms
void delay_us(int i);//延时10us
void water_lamp_1();//位定义流水灯
void water_lamp_2();//总线法流水灯
void water_lamp_3();//左移右移符流水灯
void water_lamp_4();//左移右移函数流水灯
void water_lamp_5();//往复流水灯1
void water_lamp_6();//往复流水灯2
void water_lamp_7();//往复流水灯3
void breathing_light1();//呼吸灯
void the_lamp_flashes_1();//灯闪烁1
void the_lamp_flashes_2();//灯闪烁2
/* 变量声明 */
sbit LED0 = P2^0;
sbit LED1 = P2^1;
sbit LED2 = P2^2;
sbit LED3 = P2^3;
sbit LED4 = P2^4;
sbit LED5 = P2^5;
sbit LED6 = P2^6;
sbit LED7 = P2^7;
/*
*函数名称:main()
*函数功能:执行函数
*输入参数:无
*返回参数:无
*注意事项:
*/
void main()
{
while(1)
{
the_lamp_flashes_2();
}
}
/*
*函数名称:delay_ms()
*函数功能:延时1ms
*输入参数:n
*返回参数:无
*注意事项:
*/
void delay_ms(int n)
{
int j;
while(n--)
{
for(j = 0;j <= 125;j++);
}
}
/*
*函数名称:delay_us()
*函数功能:延时10us
*输入参数:i
*返回参数:无
*注意事项:
*/
void delay_us(int i)
{
while(i--);
}
/*
*函数名称:water_lamp_1
*函数功能:位定义法流水灯
*输入参数:无
*返回参数:无
*注意事项:
*/
void water_lamp_1()
{
LED0 = 0; delay_ms(200);LED0 = 1;
LED1 = 0; delay_ms(200);LED1 = 1;
LED2 = 0; delay_ms(200);LED2 = 1;
LED3 = 0; delay_ms(200);LED3 = 1;
LED4 = 0; delay_ms(200);LED4 = 1;
LED5 = 0; delay_ms(200);LED5 = 1;
LED6 = 0; delay_ms(200);LED6 = 1;
LED7 = 0; delay_ms(200);LED7 = 1;
}
/*
*函数名称:water_lamp_2
*函数功能:总线法流水灯
*输入参数:无
*返回参数:无
*注意事项:
*/
void water_lamp_2()
{
P2 = 0xfe;//1111 1110
delay_ms(200);
P2 = 0xfd;//1111 1101
delay_ms(200);
P2 = 0xfb;//1111 1011
delay_ms(200);
P2 = 0xf7;//1111 0111
delay_ms(200);
P2 = 0xef;//1110 1111
delay_ms(200);
P2 = 0xdf;//1101 1111
delay_ms(200);
P2 = 0xbf;//1011 1111
delay_ms(200);
P2 = 0x7f;//0111 1111
delay_ms(200);
}
/*
*函数名称:water_lamp_3
*函数功能:左移右移符流水灯
*输入参数:无
*返回参数:无
*注意事项:
*/
void water_lamp_3()
{
char j;
P2 = 0xfe; //1111 1110
delay_ms(500);
for(j = 0;j < 8;j++)
{
P2 = ~P2;//取反0000 0001...
P2 = P2 << 1;//左移一位0000 0010
P2 = ~P2;//取反1111 1101...
delay_ms(200);
}
}
/*
*函数名称:water_lamp_4
*函数功能:左移右移函数流水灯
*输入参数:无
*返回参数:无
*注意事项:
*/
void water_lamp_4()
{
int i = 0;
P2 = 0xfe;
// for(i = 0;i < 8;i++)
// {
// P2 = _crol_(P2,1);//右移函数
// delay_ms(300);
// }
for(i = 0;i < 8;i++)
{
P2 = _cror_(P2,1);//左移函数
delay_ms(300);
}
}
/*
*函数名称:water_lamp_5
*函数功能:往复流水灯
*输入参数:无
*返回参数:无
*注意事项:
*/
void water_lamp_5()
{
int i;
P2 = 0xfe;
delay_ms(200);
for(i = 0;i < 8;i++)
{
P2 = P2 << 1 | 0x01;//1111 1100|0000 0001 = 1111 1101
delay_ms(200);
}
P2 = 0x7f;
for(i = 0;i < 8;i++)
{
P2 = P2 >> 1 | 0x80;//0011 1111|0111 1111 = 1011 1111
delay_ms(200);
}
}
/*
*函数名称:water_lamp_6
*函数功能:往复流水灯
*输入参数:无
*返回参数:无
*注意事项:
*/
void water_lamp_6()
{
int i = 7;
int k;
P2 = 0xfe;
delay_ms(200);
while(i--)
{
k = P2 >> 7;//0000 0001
P2 = P2 << 1 | k;//1111 1100|0000 0001=1111 1101
delay_ms(200);
}
i = 7;
while(i--)
{
k = P2 << 7;
P2 = P2 >> 1 | k;
delay_ms(200);
}
}
/*
*函数名称:water_lamp_7
*函数功能:往复流水灯
*输入参数:无
*返回参数:无
*注意事项:共阳极:对数组内的十六进制数取反
* 共阴极:直接用
*/
void water_lamp_7()
{
int n;
unsigned char str[8] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80 };
/*0000 0001
0000 0010
0000 0100
0000 1000
0001 0000
0010 0000
0100 0000
1000 0000
*/
for( n = 0;n < 8;n++)
{
P2 = ~str[n];
delay_ms(200);
}
for(n = 7;n >= 0;n--)
{
P2 = ~str[n];
delay_ms(200);
}
}
/*
*函数名称:breathing_light1()
*函数功能:呼吸灯
*输入参数:无
*返回参数:无
*注意事项:延时函数时间不能过大,过大会表现为灯闪烁
*/
void breathing_light1()
{
int i;
for(i = 0;i < 500;i++)//高电平逐渐增加,低电平逐渐减少,灯越来越暗
{
P2 = 0x00;
delay_us(i);
P2 = 0xff;
delay_us(500 - i);
}
for(i = 500;i >= 0;i--)//高电平逐渐增加,低电平逐渐减少,灯越来越暗
{
P2 = 0x00;
delay_us(i);
P2 = 0xff;
delay_us(500 - i);
}
}
/*
*函数名称:the_lamp_flashes_1()
*函数功能:灯闪烁
*输入参数:无
*返回参数:无
*注意事项:
*/
void the_lamp_flashes_1()
{
LED0 = 1;LED1 = 1;LED2 = 1;LED3 = 1;LED4 = 1;LED5 = 1;LED6 = 1;LED7 = 1;
delay_ms(200);
LED0 = 0;LED1 = 0;LED2 = 0;LED3 = 0;LED4 = 0;LED5 = 0;LED6 = 0;LED7 = 0;
delay_ms(200);
}
/*
*函数名称:the_lamp_flashes_2()
*函数功能:灯闪烁
*输入参数:无
*返回参数:无
*注意事项:
*/
void the_lamp_flashes_2()
{
P2 = 0x00;
delay_ms(200);
P2 = 0xff;
delay_ms(200);
// P2 = ~P2;
// delay_ms(200);
}
|