51单片机串行通信甲机有四个按钮控制乙机八个流水灯,甲机按钮1按下时乙机流水灯全亮,甲机按钮2按下时乙机流水灯依次点亮,甲机按钮3按下时乙机流水灯4个4个亮,甲机按钮4按下时乙机流水灯全灭 代码
时间: 2023-10-01 16:12:41 浏览: 109
以下是基于51单片机的串行通信实现甲机控制乙机八个流水灯的代码:
甲机代码:
```c
#include <REGX52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCK = P3^7; // SCK引脚定义
sbit RCK = P3^6; // RCK引脚定义
sbit SER = P3^5; // SER引脚定义
void delay_ms(uint ms) // 延时函数
{
uint i,j;
for (i=ms; i>0; i--)
for (j=110; j>0; j--);
}
void send_data(uchar dat) // 发送数据函数
{
uchar i;
for (i=0; i<8; i++)
{
SER = dat & 0x80;
dat <<= 1;
SCK = 0;
_nop_();
_nop_();
SCK = 1;
}
}
void main()
{
P1 = 0xFF; // P1口设置为输出模式
while (1)
{
if (P2 & 0x01) // 按钮1按下
{
send_data(0xFF); // 全亮
RCK = 0;
_nop_();
_nop_();
RCK = 1;
}
else if (P2 & 0x02) // 按钮2按下
{
uchar i;
for (i=0; i<8; i++)
{
send_data(1 << i); // 依次点亮
RCK = 0;
_nop_();
_nop_();
RCK = 1;
delay_ms(100);
}
}
else if (P2 & 0x04) // 按钮3按下
{
send_data(0xF0); // 4个4个亮
RCK = 0;
_nop_();
_nop_();
RCK = 1;
}
else if (P2 & 0x08) // 按钮4按下
{
send_data(0x00); // 全灭
RCK = 0;
_nop_();
_nop_();
RCK = 1;
}
}
}
```
乙机代码:
```c
#include <REGX52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SCK = P3^7; // SCK引脚定义
sbit RCK = P3^6; // RCK引脚定义
sbit SER = P3^5; // SER引脚定义
void delay_ms(uint ms) // 延时函数
{
uint i,j;
for (i=ms; i>0; i--)
for (j=110; j>0; j--);
}
void main()
{
P1 = 0xFF; // P1口设置为输出模式
while (1)
{
uchar i;
for (i=0; i<8; i++)
{
send_data(1 << i); // 流水灯依次点亮
RCK = 0;
_nop_();
_nop_();
RCK = 1;
delay_ms(100);
}
}
}
```