- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机双机通信.doc
单片机双机通信
一、 题目功能
单片机之间通信是单片机应用领域的一部分。我们此次的设计是实现单片机之间的双机通信,并实现矩阵键盘对数据进行操作和数码管输出数据的功能。
串行和并行通信是单片机的通信方式之一。而此次我们所设计的单片机双机通信是应用单片机之间的并行通信方式。 虽然串行和并行之间存在硬件和软件之间工作的区别,但是它们的目的都是实现机与机之间的性息的传送,在实际的应用方面会根基需要进行选择。
此次的双机通信分为上位机和下位机。上位机负责数据的接收与采集,同时能够自行发送数据。下位机则负责数据的接收与转换,通过数码管显示为我们人所能识别的数据。
人机接口——键盘和LED显示。键盘分为独立式键盘和矩阵式键盘,为了充分利用串口和多功能数据的采集,我们此次的使用的是矩阵式键盘。同时LED也存在两种显示方式,分别为静态和动态显示方式,因为我们的数据在变动左移,动态扫描方式更符合我们的操作流程。
二、 设计方案
1、系统组成
2、硬件设计方案
A、上位机模拟电路
a、时钟电路
这里晶振的频率可以随便选择,但是要确保两个片子的晶振频率一样。本次的晶振频率为12MHz。
同时震荡电容的值一般取10Pf~30pf之间,本次的硬件使用30pf与模拟的10pf不同。
b、复位电路
本次采用按键复位电路。当键按下时,在rst引脚产生一段时间的高电平,使系统复位。电路中各器件的一般取值跟图上一样。
c、矩阵键盘电路
片子对接口电路图如下,两图根据标号进行对接。
d、发送电路
本次的串行通信制式为——单工。只是在焊接电路时顺便把硬件电路焊成全双工制式。
B、下位机模拟电路
下位机也包含了一些上位机的电路,所以这里主要叙述下位机独特的部分电路。
a、 锁存器74HC573
真值表
H——高电平
L——低电平
X——任意电平
Z——高祖态
b、 段选电路
本次采用P2口作为数据的输出口。
C、数码管电路
数码管为共阴极。图上的共阴部分分别对着标号与位选口对接,见下图。
c、 位选口电路
因为P0口内部没有上拉电阻,为高祖态,所以不能正常地输出高/低电平。因此在使用时要加上10k左右的电阻。
C、总电路图
3、软件设计方案
A、上位机端:数据的采集与发送
发送程序流程图:
中断程序图:
代码如下:
#includereg52.h
#define uchar unsigned char
#define uint unsigned int
uchar code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void Init()
{
SM0=0;
SM1=1; //用方式1
REN=1; //允许串口接收数据
PCON=0x00; //波特率不加倍
TMOD=0x20; //定时器1以方式2运行
TH1=0xfd;
TL1=0xfd; //装入数据 设置初值 设置波特率
TR1=1; //启动定时器1
EA=1; //开启总中断
//ES=1; //串行口中断开启
}
void fasong(uchar keynum)
{
ES=0;
TI=0;
SBUF=keynum;
while(!TI);
TI=0;
return;
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i0;i--)
for(j=110;j0;j--);
}
keydown()
{
uchar temp,key;
P1=0xfe; //di yi hang
temp=P1;
temp=temp0xf0;
if(temp!=0xf0)
{
delayms(10);
temp=P1;
temp=temp0xf0;
if(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:
key=1;fasong(key);
break;
case 0xde:
key=2;fasong(key);
break;
case 0xbe:
key=3;fasong(key);
break;
case 0xe7e:
key=4;fasong(key);
文档评论(0)