【51单片机】【protues仿真】基于51单片机主从串行通信系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶显示

2、矩阵按键​,独立按键设置采集模式

3、主机显示从机采集的电压数据

4、从机采集电压数据传送到主机

5、可以设置采集显示的时间0.5s或1s

二、使用步骤

基于51单片机的主从串行通信系统通常采用主从式多机通信架构,主机通过串口控制多个从机,实现数据交互与设备协同。

三、硬件资源

1、51单片机核心模块

2、按键模块

3、数模转换模块

4、LCD1602显示模块

四、软件设计

#include<reg51.h>

#include <INTRINS.H>

#include"lcd.h"

#define GPIO_KEY P1

char KeyValue;

sbit key_1 = P2^0;

sbit key_2 = P2^1;

unsigned char receiveData=0;

unsigned int V_A = 0;

unsigned int V_B = 0;

unsigned char rec6;

char r = 0;

int count = 0;

bit start = 0;

int time = 10; //默认1s时间

void delay10ms(unsigned char d) //误差 0us

{

unsigned char a, b,c;

for (c=d;c>0;c--)

{

for (b=38;b>0;b--)

{

for (a=130;a>0;a--);

}

}

}

void display(void)

{

if(start)

{

if(count<10)

{

LcdWriteCom(0x80); //清屏

LcdWriteData('A');

LcdWriteData('-');

LcdWriteData('0'+V_A/100);

LcdWriteData('.');

LcdWriteData('0'+(V_A%100)/10);

LcdWriteData('0'+V_A%10);

LcdWriteData('V');

LcdWriteCom(0xc0);

LcdWriteData('B');

LcdWriteData('-');

LcdWriteData('0'+V_B/100);

LcdWriteData('.');

LcdWriteData('0'+(V_B%100)/10);

LcdWriteData('0'+V_B%10);

LcdWriteData('V');

}

else

{

LcdWriteCom(0x80);

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteCom(0xc0);

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

LcdWriteData(' ');

}

LcdWriteCom(0x8b);

LcdWriteData('S');

LcdWriteData('T');

LcdWriteData('A');

LcdWriteData('R');

LcdWriteData('T');

}

else

{

LcdWriteCom(0x80);

LcdWriteData('A');

LcdWriteData('-');

LcdWriteData('0'+V_A/100);

LcdWriteData('.');

LcdWriteData('0'+(V_A%100)/10);

LcdWriteData('0'+V_A%10);

LcdWriteData('V');

LcdWriteCom(0xc0);

LcdWriteData('B');

LcdWriteData('-');

LcdWriteData('0'+V_B/100);

LcdWriteData('.');

LcdWriteData('0'+(V_B%100)/10);

LcdWriteData('0'+V_B%10);

LcdWriteData('V');

LcdWriteCom(0x8b);

LcdWriteData('S');

LcdWriteData('T');

LcdWriteData('O');

LcdWriteData('P');

LcdWriteData(' ');

}

}

void main(void)

{

LcdInit();

UsartConfiguration();

LcdWriteCom(0xcb);

LcdWriteData('1');

LcdWriteData('.');

LcdWriteData('0');

LcdWriteData('S');

while(1)

{

KeyValue = 99;

KeyDown();

if(KeyValue==14)

{

time = time - 5; //

}

if(KeyValue==15)

{

time = time + 5;

}

if(time<5)

time = 5;

else if(time>990)

time = 990;

LcdWriteCom(0xca);

LcdWriteData('0'+time/100);

LcdWriteData('0'+time%100/10);

LcdWriteData('.');

LcdWriteData('0'+time%10);

LcdWriteData('S');

if(start==0)

{

if(KeyValue==1)

senddata(1);

else if(KeyValue==2)

senddata(2);

}

else

{

if(count>time*2)

{

senddata(1);

delay10ms(10);

if(rec0==1)

{

V_A = rec1*2;

}

else if(rec0==2)

{

V_B = rec1*2;

}

senddata(2);

delay10ms(10);

if(rec0==1)

{

V_A = rec1*2;

}

else if(rec0==2)

{

V_B = rec1*2;

}

count = 0;

}

}

if(rec0==1)

{

V_A = rec1*2;

}

else if(rec0==2)

{

V_B = rec1*2;

}

if(key_1==0)

{

while(key_1==0);

start = 0;

//senddata(1);

}

if(key_2==0)

{

while(key_2==0);

start = 1;

}

display();

delay10ms(10);

}

}

void delay1s(void) interrupt 1

{

TH0 = (65536-45000)/256;

TL0 = (65536-45000)%256;

count++;

}

五、实验现象

演示视频:

相关推荐
飞猿_SIR9 小时前
RK3288 Android11平台移植RTL8733BU-WiFi模组
android·嵌入式硬件
国产化创客9 小时前
嵌入式视觉完整技术体系--ESP32/K230/RDK-X5/树莓派四层架构全解析
嵌入式硬件·物联网·架构·开源·智能硬件
cft56200_ln9 小时前
TDA4时间同步3 网卡添加虚拟时间戳
c语言·开发语言·arm开发·驱动开发·嵌入式硬件·网络协议
HAPPY酷9 小时前
STM32 两种烧录方式对比:Keil Load vs FlyMCU 串口下载
stm32·单片机·嵌入式硬件
清风66666610 小时前
基于单片机的汽车胎压与温度监控系统
单片机·嵌入式硬件·汽车·毕业设计·课程设计·期末大作业
济61710 小时前
ROS开发专栏---ROS2 机械臂应用入门(2)---机械臂自动抓取物品实验---适配Ubuntu 22.04
嵌入式硬件·嵌入式·ros2·机器人开发·机器人方向
✎ ﹏梦醒͜ღ҉繁华落℘10 小时前
产品研发----点型光电感烟火灾探测器(三)
单片机
济61710 小时前
ROS开发专栏---家庭服务机器人饮料递送实验---适配Ubuntu 22.04
嵌入式硬件·嵌入式·ros2·机器人方向
点灯小铭10 小时前
基于单片机控制的多模式智能冰箱设计—冷藏、速冷、省电与自动化霜功能实现
单片机·mongodb·自动化·毕业设计·课程设计·期末大作业
清风66666610 小时前
基于单片机的自动路灯监控系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业