一、三种流水灯模式
(1)板子
(2)制作流水灯
1、间断性开关法
#include<reg52.h>
// 初始化灯引脚
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit LED3=P1^2;
sbit LED4=P1^3;
sbit LED5=P1^4;
sbit LED6=P1^5;
sbit LED7=P1^6;
sbit LED8=P1^7;
#define ON 0;
#define OFF 1;
// 延迟函数
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void main()
{
while(1)
{
LED1=ON;
delay(300);
LED1=OFF;
LED2=ON;
delay(300);
LED2=OFF;
LED3=ON;
delay(300);
LED3=OFF;
LED4=ON;
delay(300);
LED4=OFF;
LED5=ON;
delay(300);
LED5=OFF;
LED6=ON;
delay(300);
LED6=OFF;
LED7=ON;
delay(300);
LED7=OFF;
LED8=ON;
delay(300);
LED8=OFF;
}
}
2、位移法
#include<reg52.h>
#define ON 0;
#define OFF 1;
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void main()
{
unsigned int i;
while(1)
{
P1 = 0xfe; // 1111 1110 初始值
for(i=0;i<8;i++)
{
delay(100); // 0.1秒 偏移一次
P1 <<= 1; // 1111 1100 此时开灯
P1 = P1|0X01; // 1111 1101 此时关灯
}
}
}
3、循环位移法(分文件)
- 包含头文件 #include<intrins.h>
i = _crol_(i,1) 表示 i 循环左移1位
i = _cror_(i,1) 表示 i 循环右移1位
main.c文件
#include<reg52.h>
#include "delay.h"
#include<intrins.h>
sbit FM = P2^3;
void main()
{
P1=0Xfe; //初始化 1111 1110
while(1)
{
delay(200);
P1 = _crol_(P1,1); // 让 P1 循环左偏移 1
}
}
delay.c文件
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
delay.h文件
// 如果没有定义 就定义这个宏,声明延迟函数
#ifndef _delay_h
#define _delay_h
void delay(unsigned int xms);
#endif
二、蜂鸣器+流水灯
- 蜂鸣器的端口引脚为
sbit FM = P2^3;
- 默认下 FM = 1 (高电平关闭蜂鸣器)
#include<reg52.h>
#define ON 0
#define OFF 1
sbit FM = P2^3;
void delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=112;j>0;j--);
}
void main()
{
unsigned int i;
while(1)
{
P1 = 0xfe;
for(i=0;i<8;i++){
delay(100);
P1 <<= 1;
P1 = P1|0X01; // 偏移后开响
FM = ON;
delay(100); // 单片机只能单独执行一次所以要延迟
FM = OFF;
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/68458.html