用stc89c52rc单片机为辅机和stc15w408as单片机为主机进行串口通信的代码,让stc89c52rc单片机通过矩阵按键1或者2发送指令,stc15w408as单片机进行接收,相对应按键后让P5^4为引脚的LED亮,让让stc89c52rc单片机中的LCD1602显示的温度数加1,相反减1
时间: 2024-01-22 19:19:06 浏览: 71
以下是stc89c52rc单片机和stc15w408as单片机之间进行串口通信的代码:
主机(stc15w408as)代码:
```c
#include <STC15W408AS.H>
#define FOSC 22118400L // System frequency
#define BAUD 9600 // UART baudrate
unsigned char temperature = 0; //温度值
void main()
{
unsigned char c;
P5M0 = 0x00; //设置P5.4为普通IO口
P5M1 = 0x00;
P5 = 0x00;
TMOD = 0x20; //设置定时器1模式2,8位自动重载
TH1 = TL1 = -(FOSC/12/32/BAUD); //计算波特率重装值
TR1 = 1; //启动定时器1
SCON = 0x50; //设置串口工作方式1
ES = 1; //开启串口中断
EA = 1; //全局中断允许
while (1)
{
if (RI) //接收到数据
{
RI = 0; //清除接收标志
c = SBUF; //读取数据
if (c == '1') //接收到1
{
P5 = 0x10; //设置P5.4为高电平,LED亮
temperature++; //温度数加1
SBUF = temperature; //发送温度数
}
if (c == '2') //接收到2
{
P5 = 0x00; //设置P5.4为低电平,LED灭
temperature--; //温度数减1
SBUF = temperature; //发送温度数
}
}
}
}
void serial() interrupt 4 using 1
{
if (TI) //发送数据完成
{
TI = 0; //清除发送标志
}
}
```
辅机(stc89c52rc)代码:
```c
#include <REG52.H>
#define FOSC 11059200L // System frequency
#define BAUD 9600 // UART baudrate
sbit k1 = P3^0; //矩阵按键1
sbit k2 = P3^1; //矩阵按键2
void delay(unsigned int i)
{
unsigned int j;
for (j = 0; j < i; j++);
}
void main()
{
unsigned char c;
unsigned char temperature = 0; //温度值
TMOD = 0x20; //设置定时器1模式2,8位自动重载
TH1 = TL1 = -(FOSC/12/32/BAUD); //计算波特率重装值
TR1 = 1; //启动定时器1
SCON = 0x50; //设置串口工作方式1
ES = 1; //开启串口中断
EA = 1; //全局中断允许
while (1)
{
if (k1 == 0) //按键1被按下
{
delay(100); //防抖动
if (k1 == 0) //防抖动后再次检测按键1是否被按下
{
while (k1 == 0); //等待按键1松开
SBUF = '1'; //发送1
while (!TI); //等待发送完成
TI = 0; //清除发送标志
while (!RI); //等待接收完成
RI = 0; //清除接收标志
temperature++; //温度数加1
// TODO: 在这里通过LCD1602显示温度数
}
}
if (k2 == 0) //按键2被按下
{
delay(100); //防抖动
if (k2 == 0) //防抖动后再次检测按键2是否被按下
{
while (k2 == 0); //等待按键2松开
SBUF = '2'; //发送2
while (!TI); //等待发送完成
TI = 0; //清除发送标志
while (!RI); //等待接收完成
RI = 0; //清除接收标志
temperature--; //温度数减1
// TODO: 在这里通过LCD1602显示温度数
}
}
}
}
void serial() interrupt 4 using 1
{
if (RI) //接收到数据
{
RI = 0; //清除接收标志
}
if (TI) //发送数据完成
{
TI = 0; //清除发送标志
}
}
```
这里的代码只是一个简单的示例,需要根据具体的硬件和需求进行修改和优化。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)