单片机串口通信及液晶显示.doc

上传人:11****ws 文档编号:3189545 上传时间:2019-05-24 格式:DOC 页数:15 大小:214KB
下载 相关 举报
单片机串口通信及液晶显示.doc_第1页
第1页 / 共15页
单片机串口通信及液晶显示.doc_第2页
第2页 / 共15页
单片机串口通信及液晶显示.doc_第3页
第3页 / 共15页
单片机串口通信及液晶显示.doc_第4页
第4页 / 共15页
单片机串口通信及液晶显示.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、1、CDIO 设计目的 通过虚拟串口实现下位机与上位机之间的相互通信。 通过设计将串口通信的各种方式进行进一步的了解。 将接收的数字与发送的数字在 LCD 上进行显示,从而熟悉液晶显示屏 LCD1602 的具体操作。 熟练掌握 C 语言在单片机上的编程应用。 将各学科之间的的知识进行综合运用,并能够实现所需的功能设计。2、CDIO 设计正文2.1 串口通信原理串行通信是 CPU 与外界交换信息的一种基本通信方式。通信时仅需一到两根传输线,且每次只能传送一位,适用于长距离传输,但速度较慢。MCS 51 串行口是一个可编程的全双工串行通信接口,其对应的引脚为 P3.0(10 脚)和 P3.1(11

2、 脚) ,分别为 RXD 和 TXD,通过软件编程它可以作通用异步收发器用,也可以做同步移位寄存器使用,其帧格式有 8 位、10 位和 11 位 3 种,并能设置各种波特率。MCS51 串行口有两个独立的缓冲器,即发送缓冲器和接收缓冲器,且共用一个地址 99H(SBUF) 。同时, MSC51 串行口可以用软件设置成 4 种不同的工作方式。2.1.1 串行口的工作原理通过对特殊功能寄存器串行口控制寄存器中 SM0、SM 1 两位的操作,MCS51 单片机串口通信工作方式有 4 种,与串行口有关的特殊功能寄存器有串行口控制寄存器 SCON、电源控制寄存器 PCON 和定时器 T1,主要确定了串口

3、通信的工作方式和波特率的计算方法。(1)串行口数据缓冲器 SBUFSBUF 是两个在物理上相互独立的接收,发送缓冲器,可同时发送,接收数据,两个缓冲器共用一个字节地址,为 99H,可字节寻址,不可位寻址,复位值为 00H。可通过编程对 SBUF 的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。CPU 写 SBUF,就是修改发送缓冲器; CPU 读 SBUF,就是读接收缓冲器,在硬件结构上,串行口对外有两条独立的收发信号线 RXD 和TXD,因此可以同时发送,接收数据,实现全双工传送。(2)串行口控制寄存器 SCONSCON 寄存器用于确定串行通信的工作方式、接收和发送控制、串行口的中断

4、状态标志,它既可以是字节寻址,也可以是位寻址,字地址为 98H,其复位值为 00H。SM0,SM 1工作方式控制位,可构成 4 种通信工作方式,分别为:方式 0-同步移位寄存器;方式 1-10 位异步收发;方式 2-11 位异步收发;方式 3-11 位异步收发。SM2多机通信控制位,用于主一从式多机通信控制,因多机通信是在方式 2 和方式 3 下进行,CDIO 二级项目第 1 页 共 10 页因此 SM2 位主要用于方式 2 和方式 3。若 SM2=1,则允许多机通信。若 SM2=0,则不属于多机通信情况,接收到一帧数据后,无论第 9 位(D 8)是 0 还是 1,都置中断标志 RI=1,接收

5、到的数据装入接收/发送缓冲器(SBUF)中。在工作方式 1 时,若 SM2=1,则只有接收到有效停止位时中断标志 RI 才置 1,以便接收下一帧数据;在工作方式 0 时,SM 2 必须为 0。REN允许接收控制位,用软件置 1 或清零,REN=1,允许接收;REN=0,禁止接收。TB8发送数据位 8,在方式 2 和方式 3 时,TB 8 是要发送的第 9 位数据。在多机通信中,以TB8 位的状态表示主机发送的是地址还是数据: TB8=0 为数据, TB8=1 为地址,该位由软件置位或清零,此外,该位还可以作为数据的奇偶检验位。RB8接收数据位 8,在工作方式 2 和工作方式 3 种,它是接收到

6、的第 9 位数据位,既可以作为约定好的奇偶检验位,也可以作为多机通信时的地址帧或数据帧标志。在工作方式 1 中若SM2=0,则 RB8 是接收到的停止位,在工作方式 0 种不使用 RB8。TI发送中断标志位,在工作方式 0 中,发送完 8 位数据后,由硬件置 1,向 CPU 申请接收中断,CPU 响应中断后,必须用软件清零;在其他方式下,在发送停止位前,由硬件置位。RI接收中断标志位。在工作方式 0 种,接收完 8 位数据后,由硬件置 1,向 CPU 申请发送中断,CPU 响应中断后,必须用软件清零;在其他方式下,在接收到停止位的中间时刻由硬件置1,中断响应后也必须用软件清零。串行发送中断标志

7、位 TI 和接受中断标志位 RI 是同一个中断源,在全双工通信中,必须用软件来判别是发送中断请求还是接收中断请求。(3)电源控制寄存器 PCONPCON 主要是为 CHMOS 型单片机上实现电源控制而设置的专用寄存器,单元地址为 87H 其中只有一位 SMOD 与串行口工作有关。SMOD 称为波特率选择位。在工作方式 1,2,3 中若SMOD=1,则波特率提高一倍;若 SMOD=0,则波特率不加倍。除了以上 3 种特殊功能寄存器以外,串口的工作还与定时器 T1 和中断允许寄存器 IE 有关,定时器 T1 主要在工作方式 1,工作方式 2 中用于计算波特率,而 IE 主要用于接收/发送中断的允许

8、控制,ES=0,禁止串行中断,ES=1,允许串行中断。2.1.2 串行通信的波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。51 芯片的串口工作模式 0 的波特率是固定的,为 fosc/12,以一个 12M 的晶振来计算,那么它的波特率可以达到 1M。模式 2 的波特率是固定在 fosc/64 或 fosc/32,具体用那一种就取决于 PCON 寄存器中的 SMOD 位,如 SMOD 为 0,CDIO 二级项目第 2 页 共 10 页波特率为 focs/64,SMOD 为 1,波特率为 focs/3

9、2。模式 1 和模式 3 的波特率是可变的,取决于定时器 1 或 2(52 芯片)的溢出速率。计算这两个模式的波特率可以用以下的公式去计算。波特率(2 SMOD32)定时器 1 溢出速率 (1)上式中如设置了 PCON 寄存器中的 SMOD 位为 1 时就可以把波特率提升 2 倍。通常会使用定时器1 工作在定时器工作模式 2 下,这时定时值中的 TL1 做为计数,TH1 做为自动重装值,这个定时模式下,定时器溢出后,TH1 的值会自动装载到 TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式 2 下定时器 1 溢出速率的计算公式如下:溢出速率(计数速率)/(256TH

10、1) (2) 上式中的“计数速率”与所使用的晶体振荡器频率有关,在 51 芯片中定时器启动后会在每一个机器周期使定时寄存器 TH 的值增加一,一个机器周期等于十二个振荡周期,所以可以得知 51 芯片的计数速率为晶体振荡器频率的 1/12,一个 12M 的晶振用在 51 芯片上,那么 51 的计数速率就为 1M。通常用 11.0592M 晶体是为了得到标准的无误差的波特率。如我们要得到 9600 的波特率,晶振为 11.0592M 和 12M,定时器 1 为模式 2,SMOD 设为 1,分别看看那所要求的 TH1 为何值。代入公式:11.0592M9600(232)(11.0592M/12)/(

11、256-TH1)TH1250 12M9600(232)(12M/12)/(256-TH1)TH1249.49上面的计算可以看出使用 12M 晶体的时候计算出来的 TH1 不为整数,而 TH1 的值只能取整数,这样它就会有一定的误差存在不能产生精确的 9600 波特率。本次设计中为了得到精确地波特率,采用的晶振频率为 11.0592MHz,此外定时器工作在方式2,即八位自动重装载,串口工作在方式 1.2.2 接收与发送数据显示下位机发送的数据与上位机接受的数据都是通过 LCD1602 来进行显示的,其引脚图如图 1 所示。CDIO 二级项目第 3 页 共 10 页图 1 LCD1602 引脚图下

12、位机发送的数据与上位机接受的数据都是通过 LCD1602 来进行显示的。1602LCD 采用标准的 14 脚(无背光)或 16 脚(带背光)接口,各引脚接口说明如表 1 所示: 表 1:引脚接口说明表编号 符号 引脚说明 编号 符号 引脚说明1 VSS 电源地 9 D2 数据2 VDD 电源正极 10 D3 数据3 VL 液晶显示偏压 11 D4 数据4 RS 数据/命令选择 12 D5 数据5 R/W 读/写选择 13 D6 数据6 E 使能信号 14 D7 数据7 D0 数据 15 BLA 背光源正极8 D1 数据 16 BLK 背光源负极第 1 脚:VSS 为地电源。第 2 脚:VDD

13、接 5V 正电源。第 3 脚:VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 RS 和 R/W 共同为低电平时可以写入指令或者显示地址,当 RS 为低电平 R/W 为高电平时可以读忙信号,当 RS为高电平 R/W 为低电平时可以写入数据。第 6 脚:E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。第 714 脚:D0 D

14、7 为 8 位双向数据线。第 15 脚:背光源正极。第 16 脚:背光源负极。2.2.1 1602LCD 的指令说明及时序1602 液晶模块内部的控制器共有 11 条控制指令,如表 2 所示:CDIO 二级项目第 4 页 共 10 页表 2:控制命令表序号 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D01 清显示 0 0 0 0 0 0 0 0 0 12 光标返回 0 0 0 0 0 0 0 0 1 *3 置输入模式 0 0 0 0 0 0 0 1 I/D S4 显示开/关控制 0 0 0 0 0 0 1 D C B5 光标或字符移位 0 0 0 0 0 1 S/C R/L

15、 * *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 读出的数据内容1602 液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1 为高电平、0 为低电平)指令 1:清显示,指令码 01H,光标复位到地址 00H 位置。指令 2:光标复位,光标返回到地址 00H。指令 3:光标和显示模式设置 I/D:光标移动

16、方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令 4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令 5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。CDIO 二级项目第 5 页 共 10 页指令 6:功能设置命令 DL:高电平时为 4 位总线,低电平时为 8 位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示 5x7 的点阵字符,高电平时显示 5x10 的点阵字

17、符。指令 7:字符发生器 RAM 地址设置。指令 8:DDRAM 地址设置。指令 9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令 10:写数据。指令 11:读数据。表 3:基本操作时序表读状态 输入 RS=L,R/W=H,E=H 输出 D0D7=状态字写指令 输入RS=L,R/W=L ,D0D7=指令码,E= 高脉冲输出 无读数据 输入 RS=H,R/W=H,E=H 输出 D0D7=数据写数据 输入 RS=H, R/W=L,D0D7=数据, E=高脉冲 输出 无对 LCD 进行些操作时的时序图如图 2 所示图 2 写操作时序2.

18、2.2 1602LCD 的 RAM 地址映射液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图 3 是 1602 的内部显示地址。CDIO 二级项目第 6 页 共 10 页例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的

19、初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。图 3 1602LCD 内部显示地址例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所以实际写入的数据应该是 01000000B(40H)+10000000B(80H)=11000000B(C0H)。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。2.2

20、.3 1602LCD 的一般初始化过程延时 15mS写指令 38H(不检测忙信号)延时 5mS写指令 38H(不检测忙信号)延时 5mS写指令 38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号写指令 38H:显示模式设置写指令 08H:显示关闭写指令 01H:显示清屏写指令 06H:显示光标移动设置CDIO 二级项目第 7 页 共 10 页写指令 0CH:显示开及光标设置2.3 软件设计本次设计过程中当接收到数据后 CPU 响应中断,对接接收到得数据进行显示后退出中断,主函数以及中断函数的流程图如图 4 与图 5 所示。图 4 主函数流程图 图 5 中断流程图2.4 硬件仿

21、真及调试是开始初始化液晶初始化串口将下位机发送的数转换为ASCII,并送入 LCD 显示将要发送的数,送入单片机的 SBUFTI 是否为1?否将原来发送的数加 1将 TI 置 0进入中断将 SBUF 的值赋给 temp将 temp 转换为 ASCII 并送 LCD 显示将 RI 清 0退出中断CDIO 二级项目第 8 页 共 10 页图 6 硬件设计总体仿真电路图由于本次设计只是仿真,并没有进行硬件电路的搭建,因此仿真时采用的是虚拟串口,通过软件增加了一对虚拟串口 COM1,COM4,其设置界面如图 7 所示。图 7 虚拟串口调试设置界面当仿真开始后下位机发送的数进过虚拟串口发送上位机通过串口

22、调试助手进行数据的发送与接收,其,仿真时下位机与上位机的波特率均设置为 9600,串口调试助手工作时界面如图 8 所示。图 8 串口调试助手仿真界面3、CDIO 设计总结本次设计住实现了上位机与下位机之间简单的通信,上位机通过串口调试助手发送一个十六进制的数经过虚拟串口,可以被下位机接收,并在 LCD 进行显示。在老师讲述单片机课程的时候,对单片机的串口通信知识进行了原理上的简单了解,对实际应用过程中应考虑的一些问题并没有过多的了解,通过本次设计,对单片机串口通信这部分的内容进行了更深层次的学习,知道了很多可是跟你学不到的东西。另外本次设计中,对收发的数据进行显示时用到了 LCD 液晶 160

23、2,刚开始学习是觉得液晶显示很神奇,再设计过程中,通过自己看教学视频进行学习,对液晶的原理,以及CDIO 二级项目第 9 页 共 10 页操作命令等有了比较详细的了解。一开始进行操作时由于对液晶显示的时序不是很清楚,知识把液晶显示的代码简单的堆在了一起,结果运行时,液晶不能显示。后来,自己仔细对 1602 的时序图进行学习后,才发现液晶初始化时,每条命令都是有先后顺序的。总之,通过本次设计锻炼了我查找错误时的耐力,也是我对与 C 语言在单片机上的编程变得更加熟练,为以后进一步学习打下了坚实的基础。4、参考文献1 康华光主编,电子技术基础(数字部分)M北京:高等教育出版社,2000.62 谢自美主编,电子线路设计/实验/测试M武汉:华中科技大学出版社,2000.73胡汉才单片机原理与其接口技术(第二版)M北京:清华大学出版社,20044彭伟,单片机C语言程序设计实例100例.电子工业出版社.2009,06CDIO 设计评 语课程设计成 绩指导教师(签字) 年 月 日代码:#include#define uchar unsigned char#define uint unsigned intuchar table10=“send data:“;uchar table113=“receive data:“;sbit lcden=P22;sbit lcdrs=P20;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 精品笔记

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。