历史上的今天

今天是:2024年11月25日(星期一)

2021年11月25日 | 关于两块51单片机之间的串口通信(排队叫号系统)

发布者:温柔之风 来源: eefocus关键字:51单片机  串口通信  排队叫号系统 手机看文章 扫描二维码
随时随地手机看文章

一、项目要求

叫号:按下按键叫号,数码管显示叫号的号数,蜂鸣器响。

取号:按下按键取号,两个数码管分别显示取到的号数和等待的人数。


(PS:推荐使用串口调试助手进行调试)

二、可能使用到的工具

1.串口调试助手(百度网盘自行下载)

链接:https://pan.baidu.com/s/1XmCBUDD7kF8a5393fh_bBg

提取码:znv3

三、串口通信原理

1.由51单片机引脚图可看出,P3.1(TXD)和P3.0(RXD)为串行通信口,

P3.0为串行接收口,P3.1为串行发送口。要使两块单片机板可以进行串口通信,则将两块板之间的RXD/TXD交叉连接。

在这里插入图片描述

四、设计流程图

在这里插入图片描述

五、硬件设计

在这里插入图片描述

六、界面实现

在这里插入图片描述

七、代码

主机:


#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;   //对数据类型进行声明定义

typedef unsigned char u8;

 u8 an=0;//叫号数

 u8 receiveData=0;

 sbit k1=P1^0; //定义P0.0口是k1

 sbit beep=P1^5;

 char jishu=0,t=0;

u8 code smgduan[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//显示0~F的值

void UsartInit()

{

SCON=0X50; //设置为串口工作方式1

TMOD=0X20; //设置定时器工作方式2

PCON=0X00; //波特率不加倍 PCON第一位是SMOD与波特率的倍数有关

TH1=0XF3; //计数器初始值设置,波特率是2400的

TL1=0XF3;

ES=1; //打开接收中断

EA=1; //打开总中断

TR1=1;     //打开计数器

}  

void delay(u16 i)

{

int j=0;


for(j=0;j

}

void beepx()

{

 beep=0;

  delay(10000);

  beep=1;

 } 

void sendchar()

{

   TI=0;

   SBUF=an;

    while(!TI); //等待发送数据完成

TI=0;

}  

 void CallNum(u16 k) //叫号函数

 {

   P2=smgduan[k];

 }

 void Usart() interrupt 4

{  

   if(RI==1)

   {

receiveData=SBUF;//出去接收到的数据

RI = 0;//清除接收中断标志位

}

    

void main()

{

  P2=smgduan[0];

UsartInit();  // 串口初始化

while(1)

{

   if(k1==0)

   {

     delay(100000);

if(k1==0);

{

  if(receiveData>an)

  {   

     an++;

        CallNum(an);

beepx();

     sendchar();  

   }

    while(!k1);

delay(1000);

    }

  }

}

}


从机:


#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;   //对数据类型进行声明定义

typedef unsigned char u8;

  u8 quhao=0;  //取号

 u8 receiveData=0;    //接收到的数据

 sbit k1=P1^0; //定义P1.0口是k1

u8 code smgduan[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//显示0~F的值

void UsartInit()

{

SCON=0X50; //设置为串行工作方式1  

TMOD=0X20; //设置计数器工作方式2(8位自动重装定时器/计数器)

PCON=0X00; //波特率不加倍  最高位为SMOD决定波特率是否加倍

TH1=0XF3; //定时器初始值设置,波特率是2400

TL1=0XF3;

ES=1; //打开串口中断

EA=1; //打开总中断

TR1=1; //打开定时器1

}  

void delay(u16 i)

{

int j=0;

for(j=0;j

}

 void sendchar()

{

   TI=0;  

   SBUF=quhao;

    while(!TI); //等待发送数据完成

TI=0; //发送标志位清零,等待下次中断

}  

void getnum(u16 k)//取到的号

 {

 P0=smgduan[k];

 }

 void waitnum(u16 k) //等候的人数

 {

   P2=smgduan[k];

 }

 void Usart() interrupt 4  //4为串口中断号

{  

   if(RI==1)

   {

receiveData=SBUF;//出去接收到的数据

RI = 0;//清除接收中断标志位

}

}  

void main()

{

  P0=smgduan[0];

  P2=smgduan[0];

UsartInit();  // 串口初始化

while(1)

{

   if(k1==0)

   {

     delay(100000);

if(k1==0);

if(quhao<15)

{

    quhao++;

      getnum(quhao);

  sendchar();

waitnum(quhao-receiveData-1);

}

while(!k1);

delay(1000);

}  

  } 

  /*if(quhao-receiveData-1==-1)

  {

    waitnum(0);

  }

  else{

   waitnum(quhao-receiveData-1);

   }  */

}

}

关键字:51单片机  串口通信  排队叫号系统 引用地址:关于两块51单片机之间的串口通信(排队叫号系统)

上一篇:51单片机UART 串口通信[ 方式1 ]实现
下一篇:最后一页

推荐阅读

工业机器人大厂KUKA的自动化生产系统名闻国际,除了是电动车制造商sla旗下车款Model 3生产线机器人的主要供应商,近日KUKA透露接获一笔来自美国汽车制造商的大订单,预计在2020开始进行生产。 KUKA近年不断透过收购或是与不同领域的产业合作来优化机器人自动化生产流程,在2016年被大陆企业美的收购后,更加速了在亚太地区的发展,而这次来自美国的大...
11月18日,国网天津市电力公司在天津市区6家电力客户集中启动智慧用能控制系统(CPS)建设。这是CPS项目部署成功后首次大规模推广应用,该公司以CPS为核心技术的电力需求响应管理全面实践运营。 智慧用能控制系统是能源区块链的末端组成单元,通过集成先进的感知、计算、通信、控制等信息技术和自动控制技术,构建基于物理空间、信息空间中客户、设备...
ONLYOFFICE协作平台集成了一个开源办公套件,可为用户提供日常业务所需的全部工具,包括文档管理、项目计划和进度安排、客户关系和电子邮件。这个通用的开源平台既可以在公共云中使用,也可以在私有网络上启动。 在这个完整ONLYOFFICE平台的重大更新中,Ascensio System SIA将发布三款更新产品,其新名称为: ONLYOFFICE Workspace (ONLYOFFICE工作区:...
1.实现代码代码如下(示例):#include <reg52.h>#include <stdio.h> //printf头文件#define uc unsigned char #define uint unsigned int uc flag,i,flag_t,s[50]="",j=0,flag_n=0;uc code table[]="单片机接收了:"; void init(){ TMOD=0x20; //定时器工作方式,选择了定时器1,工作方式2 八位初值自动重...

史海拾趣

问答坊 | AI 解惑

芯片巨头比拼PMP市场

Intel公司于2003年第四季度推出了性能卓越的嵌入式处理器PXA270,基于XSCALE架构,最高主频可达624MHz。PXA270最引人注目的是加入了Wireless MMX技术,大大提升了多媒体处理能力;同时PXA270还加入了Intel SpeedStep动态电源管理技术,在 ...…

查看全部问答∨

一种实用的车载逆变器的设计(图)

随着经济水平的提高,汽车正逐渐成为人们的日常交通工具。然而,人们随身携带的电子产品,比如手机,却不能使用汽车上的电源。因此,开发一款经济实用的车载逆变器就成为一种需求。我们采用集成脉宽调制芯片SG3525A为主控芯片,以CD4020B计数器及与 ...…

查看全部问答∨

关于“天华杯”

和大家分享一下!…

查看全部问答∨

免费样片申请全集(全网最全最有效)

1、推荐铁电存储器(未见量的限制,据说最多有人申请了100片,不知真假.) 介绍:铁电存储器(FRAM)产品将ROM的非易失性数据存储特性和RAM的无限次读写、高速读写以及低功耗等优势结合在一起。FRAM产品包括各种接口和多种密度,像工业标准的串行和 ...…

查看全部问答∨

救命啊,关于ceRapiInvoke函数调用

//定义 #ifdef PhoneBookData_EXPORTS #define PhoneBookData_API __declspec(dllexport) #else #define PhoneBookData_API __declspec(dllimport) #endif PhoneBookData_API int Invoke_GetSIMNumber(DWORD cbInput, BYTE* pInput, ...…

查看全部问答∨

问一下ADCSequenceDataGetData()获取数据的顺序

  我的理解判断是否采样完成用ADCIntStatus()函数,而这个函数的中断状态由 ADCSequenceStepConfigure ()来配置。 问题是这样的 ADCSequenceConfigure(ADC_BASE,0,ADC_TRIGGER_PROCESSOR,0);//配置ADC,基准源是处理器发生 ADCSequen ...…

查看全部问答∨

LC测量小工具工作进展中(持续更新中)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 刚刚用老师的示波器测试了一下我用555焊接的信号源哈哈哈很好用,频率范围在4.2kHz~~612kHz左右,手头没有相机就不上传照片了,告诉大家一声我有进展了嘿嘿,你们别急啊,马上追上你们了 [ 本帖 ...…

查看全部问答∨

stm8tim1cc3配置为俘获输入cc4比较输出

各位求助:   我用stm8的time1,其中CC3配置为俘获输入(遥控码接受),CC4配置为PWM输出,结果只要写入ARRH,ARRL时,就只能输出PWM,遥控码不能接收, 好像时基改变了,俘获值不对,无法识别遥控码: 程序如下: //TIM1_CC1用做 ...…

查看全部问答∨

STM8能捕获的最高频率

本人新手。 自己在做捕获的小实验,发现输入频率1M就不行了,512K是可以的。 用的内置振荡器,16M,8个周期更新一次。 1M信号输入,连捕获的中断都进不去了。 是不是捕获本身执行就需要一些时间啊,比如说us级的。…

查看全部问答∨

CMOS ov7221采集图像的范围很小

  好不容易自己改写了一个ov7221的驱动,采集图像成功,可是图不是很清晰,不知是否与像素30W有关~ 关键问题是  摄像头的视角很小,只能照到老远的东西,显示的图像特别大,内容只有一丁点,   想进行一些缩放,不知道哪里进 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved