一、项目要求
叫号:按下按键叫号,数码管显示叫号的号数,蜂鸣器响。
取号:按下按键取号,两个数码管分别显示取到的号数和等待的人数。
(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单片机UART 串口通信[ 方式1 ]实现
下一篇:最后一页
推荐阅读
史海拾趣
在追求经济效益的同时,Chip Technologies Inc也积极履行社会责任,致力于实现可持续发展。公司严格遵守环保法规,采用环保材料和工艺,降低生产过程中的能耗和排放。此外,公司还积极参与公益事业,为社会做出贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展注入了正能量。
请注意,这五个故事只是基于电子行业的一般情况而构思的,并未涉及Chip Technologies Inc公司的具体细节。您可以根据公司的实际情况和市场环境,对这些故事进行适当修改和补充,以满足您的具体需求。
随着全球化趋势的加强,Bomar Interconnect公司开始实施国际化战略。公司积极寻求与国际知名企业的合作机会,通过技术引进、合资建厂等方式,加快了公司的国际化进程。同时,公司还加强了海外市场的开拓力度,设立了多个海外销售中心和分支机构,为公司的全球化发展提供了有力支持。这些举措不仅拓宽了公司的业务范围和市场空间,也提升了公司在国际市场上的竞争力。
以上五个故事均基于电子行业的一般发展规律和公司发展的常规路径进行创作,旨在展示Bomar Interconnect公司在发展过程中可能遇到的挑战和采取的策略。需要强调的是,这些故事并非基于真实事件编写,因此可能与公司的实际情况存在出入。如需了解Bomar Interconnect公司的真实发展故事,建议查阅相关新闻报道、公司年报或行业分析报告等权威资料。
随着全球环保意识的日益增强,电子行业也开始面临着越来越严格的环保要求。Ferroxcube公司作为行业领军企业,积极响应环保号召,开始研发更加环保的磁性元件。
经过长时间的研发和试验,公司成功推出了一款采用环保材料制成的新型磁芯。这款磁芯不仅性能优异,而且在使用寿命结束后可以方便地进行回收再利用,大大降低了对环境的污染。
这一创新产品一经推出,就受到了市场的热烈欢迎。许多环保意识强烈的客户纷纷选择使用Ferroxcube的环保磁芯,以支持绿色环保事业。这也使得Ferroxcube在环保领域的声誉大大提升,为公司赢得了更多的市场份额和客户认可。
在业务迅速发展的同时,Embedded Artists公司也始终关注环境保护和可持续发展。他们致力于采用环保材料和节能技术来生产产品,并通过优化生产流程来降低能源消耗和废物排放。此外,公司还积极参与公益活动,支持环保组织和项目。这些举措不仅提高了公司的社会形象,也为公司的长期发展奠定了坚实基础。
品质是Excelsys公司的生命线。公司始终坚持严格的品质控制标准,从原材料采购到生产制造的每一个环节,都经过严格的质量检测。这种对品质的执着追求,让Excelsys的产品在市场上赢得了良好的口碑。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持,进一步提升了品牌的信誉度。
在市场拓展方面,Excelsys公司采取了多元化的战略。除了深耕国内市场外,公司还积极开拓国际市场,与全球多家知名企业建立了长期稳定的合作关系。这些合作伙伴不仅为Excelsys提供了广阔的市场空间,还带来了先进的技术和管理经验,推动了公司的快速发展。
Intel公司于2003年第四季度推出了性能卓越的嵌入式处理器PXA270,基于XSCALE架构,最高主频可达624MHz。PXA270最引人注目的是加入了Wireless MMX技术,大大提升了多媒体处理能力;同时PXA270还加入了Intel SpeedStep动态电源管理技术,在 ...… 查看全部问答∨ |
随着经济水平的提高,汽车正逐渐成为人们的日常交通工具。然而,人们随身携带的电子产品,比如手机,却不能使用汽车上的电源。因此,开发一款经济实用的车载逆变器就成为一种需求。我们采用集成脉宽调制芯片SG3525A为主控芯片,以CD4020B计数器及与 ...… 查看全部问答∨ |
1、推荐铁电存储器(未见量的限制,据说最多有人申请了100片,不知真假.) 介绍:铁电存储器(FRAM)产品将ROM的非易失性数据存储特性和RAM的无限次读写、高速读写以及低功耗等优势结合在一起。FRAM产品包括各种接口和多种密度,像工业标准的串行和 ...… 查看全部问答∨ |
|
//定义 #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 ...… 查看全部问答∨ |
刚刚用老师的示波器测试了一下我用555焊接的信号源哈哈哈很好用,频率范围在4.2kHz~~612kHz左右,手头没有相机就不上传照片了,告诉大家一声我有进展了嘿嘿,你们别急啊,马上追上你们了 [ 本帖 ...… 查看全部问答∨ |
各位求助: 我用stm8的time1,其中CC3配置为俘获输入(遥控码接受),CC4配置为PWM输出,结果只要写入ARRH,ARRL时,就只能输出PWM,遥控码不能接收, 好像时基改变了,俘获值不对,无法识别遥控码: 程序如下: //TIM1_CC1用做 ...… 查看全部问答∨ |
本人新手。 自己在做捕获的小实验,发现输入频率1M就不行了,512K是可以的。 用的内置振荡器,16M,8个周期更新一次。 1M信号输入,连捕获的中断都进不去了。 是不是捕获本身执行就需要一些时间啊,比如说us级的。… 查看全部问答∨ |
好不容易自己改写了一个ov7221的驱动,采集图像成功,可是图不是很清晰,不知是否与像素30W有关~ 关键问题是 摄像头的视角很小,只能照到老远的东西,显示的图像特别大,内容只有一丁点, 想进行一些缩放,不知道哪里进 ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- 免费申请TI 样片, 新春好礼相赠!
- 报名有礼| Arm Tech Symposia 年度技术大会报名开启!
- Avnet&On semi 带你看未来,3个你必须知道的行业趋势!
- MPS电机研究院 让电机更听话的秘密! 第二站:电机设计经验征集令!
- Telink新一代低功耗高性能多协议无线套件B91,免费测评试用
- 模电怎么学?TI帮你定制课程清单!体验“模电选课测试”功能,赢精彩好礼
- 了解PI高性能AC-DC产品,答题赢好礼
- 观展有礼 | 到 e 络盟展台,领星巴克咖啡券(上海慕尼黑电子展)
- 全球首款Cortex-M23内核物联网芯片SAML10和SAM L11系列 闯关获取SAML10/SAML11法宝,拆除电子界安全危机,赢好礼!
- 阅读Microchip多种连接接口SAM单片机精彩专题,参与活动赢好礼