与PC机的远程通信.docx
- 文档编号:10685261
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:33
- 大小:286.28KB
与PC机的远程通信.docx
《与PC机的远程通信.docx》由会员分享,可在线阅读,更多相关《与PC机的远程通信.docx(33页珍藏版)》请在冰点文库上搜索。
与PC机的远程通信
与PC机的远程通信
学院:
信息工程学院
专业班级:
自动化0905
学生姓名:
陈明星
学号:
20096248
任课教师:
聂诗良
恒温箱温度计算机控制系统
1设计要求
采用单片机、MAX232和MAX485等器件设计制作一个可与PC机远程通信的模块,模块上可显示PC机下发的字符,模块上的按键号可在PC机上显示;
2系统方案设计
单片机将DS18B20传感器和键盘输入的信号进行处理,然后通过串口将数据发送出去。
单片机端的MAX485将单片机发送的TTL电平的信号转换成差分电平进行远距离传输,在计算机这端的MAX485再将传过来的差分电平转换为TTL电平,然后通过MAX232将TTL电平转换为计算机能识别的RS-232电平。
PC机通过串口助手工具将从串口接收的数据显示出来。
同理,计算机也可以用相反的方式将数据发送到单片机,单片机在经过处理送LCD显示。
3硬件设计
3.1单片机的选型
单片机AT89S51具有低电压供电和体积小等特点,四个端口就足够能满足电路系统的设计需要,最重要的是它可以通过P1.5,P1.6,P1.7直接下载程序到单片机,而且还广泛应用,自己也比较熟悉了,购买也方便。
3.2显示器的选型
由于需要显示计算机下发的字符数据,但是数据量不大,因此选用LCD1602A,它最多能显示16×2个字符。
从P0口输出显示数据,用P2.0,P2.1,P2.2口来控制位选。
3.2.11602LCD的基本参数及引脚功能
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。
1602LCD主要技术参数:
显示容量:
16×2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×4.35(W×H)mm
引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表3-1所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
V0
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
A
背光源正极
8
D1
数据
16
K
背光源负极
表3-1:
引脚接口说明表
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
3.2.21602LCD的指令说明及时序
3.2.2.11602液晶模块内部的控制器共有11条控制指令,如表3-2所示:
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAM或DDRAM)
1
0
要写的数据内容
11
从CGRAM或DDRAM读数
1
1
读出的数据内容
表3-2:
控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
与HD44780相兼容的芯片时序表如下:
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
输入
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
输出
无
读数据
输入
RS=H,R/W=H,E=H
输出
D0—D7=数据
写数据
输入
RS=H,R/W=L,D0—D7=数据,E=高脉冲
输出
无
表3-3:
基本操作时序表
读写操作时序如图3-4和3-5所示:
图3-4读操作时序
图3-5写操作时序
3.2.2.21602LCD的RAM地址映射及标准字库表
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图10-57是1602的内部显示地址。
图3-61602LCD内部显示地址
例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?
这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。
每次输入指令前都要判断液晶模块是否处于忙的状态。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
图3-7字符代码与图形对应图
3.2.2.31602LCD的一般初始化(复位)过程
延时15mS
写指令38H(不检测忙信号)
延时5mS
写指令38H(不检测忙信号)
延时5mS
写指令38H(不检测忙信号)
以后每次写指令、读/写数据操作均需要检测忙信号
写指令38H:
显示模式设置
写指令08H:
显示关闭
写指令01H:
显示清屏
写指令06H:
显示光标移动设置
写指令0CH:
显示开及光标设置
3.3键盘的选型
由于要在PC机上显示按键号,所以选用4×4的矩阵键盘,从P1口输入。
3.4温度传感器的选型
由于上个系统有DS18B20,所以就加了个输入,将实时温度送计算机显示。
3.4.1DS18B20内部结构
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可据实际要求通过简单的编程实现9~12位的数字值读数方式。
图1DS18B20的内部结构
64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。
温度报警触发器TH和TL,可通过软件写入户报警上下限。
DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
高速暂存RAM的结构为8字节的存储器,结构如图3所示。
头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。
该字节各位的定义如图3所示。
低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分率。
由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。
因此,在实际应用中要将分辨率和转换时间权衡考虑。
3.4.2DS18B20的工作参数设置
高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。
第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。
当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。
单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。
当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。
表2是一部分温度值对应的二进制温度数据。
DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。
若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。
因此,可用多只DS18B20同时测量温度并进行报警搜索。
在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。
主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。
DS18B20的测温原理是这这样的,器件中低温度系数晶振的振荡频率受温度的影响很小,用于产生固定频率的脉冲信号送给减法计数器1;高温度系数晶振随温度变化其振荡频率明显改变,所产生的信号作为减法计数器2的脉冲输入。
器件中还有一个计数门,当计数门打开时,DS18B20就对低温度系数振荡器产生的时钟脉冲进行计数进而完成温度测量。
计数门的开启时间由高温度系数振荡器来决定,每次测量前,首先将-55℃所对应的一个基数分别置入减法计数器1、温度寄存器中,计数器1和温度寄存器被预置在-55
℃所对应的一个基数值。
减法计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当减法计数器1的预置值减到0时,温度寄存器的值将加1,减法计数器1的预置将重新被装入,减法计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到减法计数器计数到0时,停止温度寄存器的累加,此时温度寄存器中的数值就是所测温度值。
其输出用于修正减法计数器的预置值,只要计数器门仍关闭就重复上述过程,直到温度寄存器值大致被测温度值。
3.5硬件电路
4软件设计
4.1软件功能设计
4.1.1存储器及I/O口地址分配
整个程序由主程序、显示子程序、键盘子程序、读取DS18B20数据子程序、发送数据程序、接收中断程序等组成。
读取的数据在RAM的29H和28H
分别定义str[16](暂存接收字符),string[8](存发送的温度数据),string2[16](存接收的字符),string3[6](存键号)四个字符串数组。
P0口作为显示数据输出口。
P1口作为矩阵键盘输入口。
P2.0,P2.1,P2.2作为LCD显示的控制信号输出。
P2.6作为发送控制信号输出,P2.7作为接收控制信号输出。
P3.0和P3.1作为串行通信的数据输出口。
4.1.24×4矩阵键盘的键值与键号
键号键值键号键值
10xEE80xEB
20xDE90xDB
30xBE100xBB
40x7E110x7B
50xED120xE7
60xDD130xD7
70xBD140xB7
80x7D150x77
4.1.3系统读取DS18B20中的两个字节的数据0x29高位)和0x28(低位)中,在读取到的二进制的数据转换为十进制的数据分别保存在LED_One,LED_Two,LED_Three。
4.1.4分别字符串string,string2,string3的数据送LCD和计算机显示
4.2软件流程设计
4.3程序清单
4.3.1主程序
#include
#include
#include
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitRS=P2^0;
sbitRW=P2^1;
sbitEN=P2^2;
sbitTMPort=P3^7;
sbitsend=P2^6;
sbitreceive=P2^7;
sbitSPEAKER=P3^5;
sbitjdq=P3^6;
bitDS1820ON=0;
staticbitdataflag=0;
staticuchardatastr[16]={'\0'};
staticuchardatastring2[16];
staticuchardatastring3[6]={"kd:
"};
staticuchardatastring[8]={"t:
"};
staticuchardatadatalength_at_0x0030;
staticucharbdataTLV_at_0x0029;//温度变量高低位
staticucharbdataTHV_at_0x0028;
staticsignedcharTMV;//转换后的温度值
staticucharLED_One,LED_Two,LED_Three;
//时间延时
voidtime(uintms)
{
uchari;
while(ms--)
{
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
//初始化设置
voidinitUart(void)
{
TMOD=0x20;//定时器T1PCON&=0xef;
SCON=0x50;
TH1=0xfd;//波特率设置为9600
TL1=0xfd;
TR1=1;//开定时器T1运行控制位
send=0;
receive=1;
SPEAKER=0;
jdq=0;
}
//向PC机发送字符串
voidsendString(uchar*ucString)
{
uchari,stringLength=strlen(ucString);
send=1;
receive=0;
REN=0;
for(i=0;i { SBUF=ucString[i];while(TI==0);TI=0; } SBUF=0x0d;while(TI==0);TI=0; stringLength=strlen(string2); for(i=0;i { SBUF=string2[i];while(TI==0);TI=0; } SBUF=0x0d;while(TI==0);TI=0; stringLength=strlen(string3); for(i=0;i { SBUF=string3[i];while(TI==0);TI=0; } SBUF=0x0d;while(TI==0);TI=0; SBUF=0x0d;while(TI==0);TI=0; REN=1; send=0; receive=1; } //向PC机发数据 voidsenddata(uchardata1) {send=1; receive=0; REN=0; SBUF=data1;while(TI==0);TI=0; SBUF=0x0d;while(TI==0);TI=0; SBUF=0x0a;while(TI==0);TI=0; SBUF=0x0a;while(TI==0);TI=0; time (1); REN=1; send=0; receive=1; } //************************** voiddelay_ms(uintz)//延时 { uintx,y; for(x=z;x>0;x--) for(y=124;y>0;y--); } bitcheck_busy()//查忙 { bitresult; RS=0; RW=1; EN=1; delay_ms (2); result=(bit)(P0&0x80); EN=0;//一定要拉低,否则后面不能使能 returnresult; } voidwrite_com(charcom)//写命令 { while(check_busy());//等于1就等待 EN=0; RS=0; RW=0; delay_ms (1); EN=1; P0=com; delay_ms (1); EN=0; } voidwrite_dat(uchardate)//写数据 { while(check_busy()); EN=0; RS=1; RW=0; delay_ms (1); EN=1; P0=date; delay_ms (1); EN=0; } voidlcd_dis_char(ucharx,uchary,uchardat)//液晶定位和写单个的字符 { ucharaddress; if(y==1) address=0x80+x;//0<=x<16; else address=0x80+0x40+x; write_com(address); write_dat(dat); } voidlcd_dis_str(ucharx,uchary,uchar*str)//定位并写字符串 { ucharaddress; if(y==1) address=0x80+x;//0<=x<16; else address=0x80+0x40+x; write_com(address); while(*str! ='\0') { write_dat(*str); str++; } } voidlcd_int()//1602的初始化 { write_com(0x38); delay_ms (1); write_com(0x0c); delay_ms (1); write_com(0x06); delay_ms (1); write_com(0x01); delay_ms (1); } voidlcd_clean()//清屏 { write_com(0x01); delay_ms (1); } voidDelay_6n5_8us(ucharnUs)//4微秒级延时<255us { uchari=nUs; while(i)i--; } /*------------------------------------------------------ 初始化DS1820 -------------------------------------------------------*/ voidInitDS1820(void) { TMPort=1; _nop_(); TMPort=0; Delay_6n5_8us(77);//延时DS1820复位时间要500US的抵电平 TMPort=1; Delay_6n5_8us(16);//延时112US等待DS1820的回应 if(! TMPort){DS1820ON=1;}//检测是否有DS1820 else{DS1820ON=0;} Delay_6n5_8us(55); TMPort=1; } /*------------------写数据-------------------*/ voidWrite_Data(ucharT_DATA) { uchari,DATA_T; DATA_T=T_DATA; for(i=0;i<=7;i++) { TMPort=0; Delay_6n5_8us (1);//延时15微秒 if(DATA_T&0x01)TMPort=1; elseTMPort=0; DATA_T>>=1; Delay_6n5_8us(7);//延时54微秒 TMPort=1; _nop_(); } TMPo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PC 远程 通信