智能仪器课程设计报告Word格式文档下载.docx

上传人:b****5 文档编号:19738671 上传时间:2023-01-09 格式:DOCX 页数:24 大小:159.27KB
下载 相关 举报
智能仪器课程设计报告Word格式文档下载.docx_第1页
第1页 / 共24页
智能仪器课程设计报告Word格式文档下载.docx_第2页
第2页 / 共24页
智能仪器课程设计报告Word格式文档下载.docx_第3页
第3页 / 共24页
智能仪器课程设计报告Word格式文档下载.docx_第4页
第4页 / 共24页
智能仪器课程设计报告Word格式文档下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

智能仪器课程设计报告Word格式文档下载.docx

《智能仪器课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《智能仪器课程设计报告Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。

智能仪器课程设计报告Word格式文档下载.docx

根据题意,主机由于只需使用到两个按键,所以主机的按键可

使用独立式按键方式,即两个按键接入单片机的两个io口,通过判断高低电平

判断哪个键被按下;

从机则需要使用矩阵式键盘,本组使用4X4的矩阵式键盘,并用线反转法进行键值扫描。

(4)显示单元:

由于需要显示的信息比较简单,所以可以简单的使用LED数码管来显示,本组使用的单片机开发板上集成了4个数码管,共用一个译码器,可以通过循环点亮的方式显示多个数字。

3、硬件设计

1主机和从机通过MAX485连接的电气图:

h?

mi!

:

d恤氏

F3IA£

>

I*nWr?

WalAEO旳Z4

b

■mm

mr

陀¥

ia

w

垃u

FWP

Zb"

啣M

□ER

Imdi:

.

喊irtxu

pi工

"

ham

Miai

*3_Fii1i

piw

piL*ni

HI9

Id^11

Pif

FOfflaJH

P>

9

■5UTli

hrn

iz」-T--T-壬土

3」」—-Ftxz

Wg]r32K:

2

*asiuiF3LAZ>

L旳3耐F3fiXZ€

“L

■阳沖

p?

r>

n

Kg

WFk

flIF

吃如J叫MFd

PILTI2

Pl翊気毗

2irnr

PIT

Pi.車

F5.MU

Pi»

F?

*TI

PE

円3廂

PH

□『fir

jiinik^-u

1

z:

UA7e2

*13

*14

■IS

VIA

*?

吟FZStMT

圧Z2・?

!

■■P上WPflAK

炖耳匸

nJUTXL_

P?

JP^

r.?

冲i

Mjjyii

f^jMiiiS-

B-JTJfe:

图4主机和从机通过MAX485连接的电气图

2主机和按键、数码管的连接图

KT&

dl-WOiFIWW-■■amFlUKaMB

Z

■Mg

K!

M

FTW

■F7J*■M霍

*Ji*W

Pi.inb

哼仲鼻m/rcii

ruFlJ*

叭rfTT

IIA

FlLF

*11

nyrt

Wl.

Ml®

-

肝M"

llm

3从机和键盘、数码管的连接图

图5主机和按键、数码管的连接图

[-凶日一±

13可3"

⑥B②回“•■ID・

■PCIH

on

PkE

44-&

R

3E-VP?

■UW

f?

itcm*

f:

»

H

t-3jQirl

咗测鼻

■■:

=科I*

iJJSMi

mqQiii

nlipa

ET3

IW*

町s?

T

nifcr

图6从机和键盘、数码管的连接图

4、软件设计

1led数码管显示子程序:

单片机开发板上的LED数码管是共阳极连接方式,数码管的a-h脚分别连

到P0.0-P0.7,四个LED的控制角分别接到P2.0-P2.3;

在数码管上需要显示的

数字或字符的共阳极代码如下:

显示

内容

共阳极

代码

C0H

3

B0H

6

82H

9

6FH

d

A1H

F9H

4

99H

7

F8H

E

79H

A4H

5

92H

8

80H

N

C8H

程序代码:

#defineucharunsignedchar

ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,

0xf8,0x80,0x90};

//液晶查询表

voiddisplay_1(unsignedintnumber);

voiddisplay_2(unsignedintnumber);

voiddisplay_3(unsignedintnumber);

voiddisplay_4(unsignedintnumber);

/***********************************

函数名:

voiddisplay_1

参数:

(unsignedintnumber)

作用:

根据输入的数字点亮显示数码管1

************************************/

voiddisplay_1(unsignedintnumber)

{P0=table[number];

P2_0=0;

}

voiddisplay_2

(unsignedintnumber)作用:

根据输入的数字点亮显示数码管2************************************/voiddisplay_2(unsignedintnumber)

P2_1=0;

voiddisplay_3

根据输入的数字点亮显示数码管3

voiddisplay_3(unsignedintnumber)

P2_2=0;

voiddisplay_4

根据输入的数字点亮显示数码管4

voiddisplay_4(unsignedintnumber)

P2_3=0;

2键盘扫描子程序

使用线反转法扫描键盘,矩阵键盘的1-4行接入P1.7-P1.4,1-4列接入P1.3-P1.0,同时P1.3-P1.0接上拉电阻,线反转法的步骤:

1、将列线作为输出线,行线作为输入线,置输出线全部为0,此时行线中呈低电平0的为按键所在行,如果全部都不是0,则没有按键按下;

2、将第一步反过来,即将行线作为输出线,列线作为输入线,置输出线全部为0,此时列线中呈低电平0的为按键所在列,至此便确定了按键的位置,可根据行列参数查询实现写好的键值表,获

取键值。

线反转法扫键流程图:

r

幵祐

记录刮号

跟菲行斥拓列壬

堂词谨值表得到

禪-自

图7键盘子程序流程图

扫描键盘子程序代码:

#include<

stdio.h>

inthang;

//定义行号

intlie;

//定义列号

unsignedintKey_Val=1;

〃保存键值

设置键盘逻辑键

unsignedintkeymap[]={1,2,3,0,4,5,6,0,7,8,9,0,0,0,0,0};

intKeyScan();

〃扫键子函数

voidDelay();

//延时

***********************************

key_Val对应键值

列:

[p13]

[p12]

[p11]

[p10]

J

行:

[p17]

1

(1)

2

(2)

3(3)

4(A)

[p16]

f

5(4)

6(5)

7(6)

8(B)

[p15]

9(7)

10(8)

11(9)

12(C)

[p14]

13(*)

14(0)

15(#)

16(D)

************************************

voidDelay()//延时子函数

{

longi;

for(i=1000;

i>

0;

i--);

intKeyScan()//扫键子函数

P1=0xF0;

//列输出全0;

if((P1&

0xF0)!

=0xF0)//扫描行,如果不全为0,则进入

switch(P1)//获得行号

case0x70:

hang=1;

break;

case0xB0:

hang=2;

case0xD0:

hang=3;

case0xE0:

hang=4;

default:

Delay();

//延时去抖动

P1=0x0F;

//行输出全0

0x0F)!

=0x0F)//扫描列,如果不全为0,则确认按键按下{

switch(P1)//获得列号

case0x07:

lie=1;

case0x0B:

lie=2;

case0x0D:

lie=3;

case0x0E:

lie=4;

return1;

//扫描到按键按下,则返回1

else

return0;

//未扫描到按键按下,返回0}

3主机程序:

在主机主程序中首先进行串口的配置,需要将串口置为模式3;

然后程序直循环查询是否有按键按下(K1或K2),如果有按键按下,则进入与从机通信的子程序。

主机主程序流程图:

执行与腻札?

連低子程妄

fun

E子程辛

图8主机主程序流程图

主机与从机通信的子程序是主机程序的最关键部分,负责主机与从机建立联

系、数据通信和终止连接的任务。

以按下按键K1为例,按下K1表示应与从机1通信,程序进入通信子程序,首先主机向所有从机发送从机1的地址“0x01”然后主机等待从机1的回应(从机1收到请求会发回本机的地址信号0x01作为回应),接收到回应则继续进行通信;

然后主机一直处于接收状态,循环接收从机发送的数据,并将数据通过数码管显示,直到接收到数据0,则退出子程序;

注意由于单片机外接MAX485进行通信,所以在发送或接收前需要改变控制脚

RE、DE改变MAX485的收发状态

L—

i_iRE.id11101远鋼

2冷4站丑.巧

摆应狀走

蒂霰临到的a■拥在檢昏管上显示

計軒菅县示'

■END-畫示

图9主机与子程序通信流程图

主机程序代码:

//主机程序

reg51.h>

string.h>

ye_jing_xian_shi.h>

sbitRE=P3A2;

//MAX485的控制脚RE和DE

sbitDE=P3A3;

II发送时置高,接收时置地

unsignedchartemp=0xff;

sbitKEY1=P2A4;

IIP2.4,P2.5是两个按键

sbitKEY2=P2A5;

II

II延时1ms函数

voiddelay_1ms(unsignedintt)

unsignedintx,y;

for(x=t;

x>

x--)

for(y=110;

y>

y--);

II串口初始化函数

voidserial_init()

TMOD=0x20;

II定时器1工作于方式2

TH1=0xfd;

TL1=0xfd;

II波特率为9600

PCON=0;

SCON=0xd0;

II串口工作于方式3

TR1=1;

II开启定时器

TI=0;

RI=0;

//向指定从机地址发送数据

//和从机通信

voidADDR_data(unsignedaddr)

intj=0;

while(temp!

=addr)//主机等待从机返回其地址作为应答信号

RE=1;

//发送状态

DE=1;

//发送从机地址

TB8=1;

//发送地址帧

SBUF=addr;

while(!

TI);

RE=0;

//接收状态

DE=0;

//接收从机应答信号

RI);

temp=SBUF;

//从机会发送自己的地址作为回应

}//选通从机后跳出循环

display_1(addr);

//接通后在数码管上显示1或2

//主机循环接收从机发过来的数字信号并在数码管上显示,直到接收到0

do{

//接收状态

display_1(temp);

//在数码管上显示数字

}while(temp!

=0);

//接收到0,表示此次通信结束,数码管闪烁表示

for(j=0;

j<

50;

j++)

delay_1ms(10);

P2_0=1;

P0=0x86;

delay_1ms(10);

P2_1=1;

P0=0xc8;

P2_2=1;

P0=0xa1;

P2_3=1;

voidmain()

//初始为发送状态

serial_init();

while

(1)

if(KEY1==0)

delay_1ms(5);

//消抖if(KEY1==0)

KEY1);

ADDR_data(0x01);

if(KEY2==0)

KEY2);

ADDR_data(0x02);

//重置为发送状态

4从机程序:

从机首先进行串口初始化,然后处于循环接收状态,即等待主机的请求,如果接收缓存区有数据,判断是否等于本机地址,等于则表明有主机请求,则再向主机发送本机地址作为回应;

然后从机进入读键子程序,循环读出键值并将键值发送到主机,直到有0键按下,从机将0发送后退出子程序,即结束此次通信,重新开始主循环。

注意由于单片机外接MAX485进行通信,所以在发送或接收前需要改变控制脚RE、DE改变MAX485的收发状态。

从机主程序流程图:

从机程序代码(从机1):

//从机1程序

#include<

string.h>

ye_jing_xian_shi.h>

jian_pan.h>

#defineaddr0x01//从机2的地址

//MAX485的控制脚RE和DE

sbitDE=卩3人3;

//发送时置高,接收时置地

unsignedcharaa=0xff;

//主机与从机之间通信标志

//延时1ms函数

//串口初始化函数

//定时器1工作于方式2TH1=0xfd;

//波特率为9600

//串口工作于方式3

//开启定时器

unsignedintKey;

unsignedintj;

//初始为接收状态

SM2=1;

//接收地址帧while(aa!

=addr)//从机等待主机请求自己的地址

aa=SBUF;

//发送状态

//一旦被请求,从机返回自己地址作为应答,等待接收数据

TB8=0;

SM2=0;

//接收数据帧

5;

display_1

(1);

delay_1ms(500);

P2_0=1;

//连接成功则进入扫键程序

do//循环扫描键盘

Key=KeyScan();

if(Key==1)//如果扫描到按键按下

计算得到键值

Key_Val=keymap[(hang-1)*4+lie-1];

//

display_1(Key_Val);

//从机上显示

//将按下的数字发送到主机

SBUF=Key_Val;

}while(Key_Val!

=0x00);

Key_Val=1;

aa=0xff;

//重置为接收状态

5、系统调试及测试

系统实物图:

首先按下主机的K1按钮,主机显示“1”从机1闪烁显示“1”表示已经

接通,然后在从机1键盘上按下任何键,从机和主机同时显示键值,按下0键,

则主机显示“1END”表示结束,从机数码管灯灭,再按下键盘无反应;

再测试从机2,按下主机的K2按钮,主机显示“2”从机2闪烁显示“2”,表示已经接通,然后在从机2键盘上按下任何键,从机和主机同时显示键值,按下0键,则主机显示“2END”表示结束,从机数码管灯灭,再按下键盘无反应;

在某个从机与主机通信时,按下主机另一从机按钮或在另一从机上按下键盘,不影响通信。

6、结论

测试结果表明设计的系统满足题目要求,完成了RS-485标准的主从式多机系统设计任务。

但是本设计并没有体现出通信接口的识别功能这一

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1