IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> [51单片机]灯闪烁及流水灯 -> 正文阅读

[嵌入式][51单片机]灯闪烁及流水灯

麻了...为什么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);
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-15 15:45:24  更:2021-08-15 15:45:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:50:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计