最新范文 方案 计划 总结 报告 体会 事迹 讲话 倡议书 反思 制度 入党

基于串口通信的LCD显示

日期:2020-05-29  类别:最新范文  编辑:一流范文网  【下载本文Word版

基于串口通信的LCD显示 本文关键词:串口,通信,显示,LCD

基于串口通信的LCD显示 本文简介:目录引言11设计任务与目的21.1设计任务:21.2设计目的:22串口通信原理22.1串行口工作原理22.3方案论证43硬件设计63.1AT89S52最小系统63.3LCD显示电路73.4max232电平转换电路84软件设计94.1主程序流程图94.2LCD显示函数104.3键盘函数105系统调试1

基于串口通信的LCD显示 本文内容:

引言1

1

设计任务与目的2

1.1

设计任务:2

1.2

设计目的:2

2

串口通信原理2

2.1

串行口工作原理2

2.3

方案论证4

3硬件设计6

3.1

AT89S52最小系统6

3.3

LCD显示电路7

3.4

max232电平转换电路8

4

软件设计9

4.1主程序流程图9

4.2

LCD显示函数10

4.3

键盘函数10

5系统调试11

5.1

硬件调试11

5.2

软件调试11

6

结论11

参考文献12

引言

51单片机内部有一个全双工串行接口。什么叫全双工串口呢?一般来说,只能接受或只能发送的称为单工串行;既可接收又可发送,但不能同时进行的称为半双工;能同时接收和发送的串行口称为全双工串行口。串行通信是指数据一位一位地按顺序传送的通信方式,其突出优点是只需一根传输线,可大大降低硬件成本,适合远距离通信。其缺点是传输速度较低。在国内外,以PC机作为上位机,单片机作为下位机的控制系统中,PC机通常以软件界面进行人机交互,以串行通信方式与单片机进行积极交互的技术得到越来越大的重视和越来越广泛的应用。LCD显示技术是一门新兴的显示技术,相对于LED显示,LCD显示有节能,能显示的更多以及更高端等优点。本次课程设计选用串行通信和LCD显示来进一步加深我们对于单片机的理解。

1

设计任务与目的

1.1

设计任务:

(1)下位机选用89S51或89S52单片机;

(2)下位机接收上位机的数据并显示在LED或LCD上

(3)下位机显示数据可以显示固定数据、以为数据、循环移位;

(4)硬件要求:制作串口线和下位机及外围电路;

(5)软件要求:keil

c或汇编编程设计,串口调试助手或labview串口通信编程。

1.2设计目的:

(1)通过串口实现下位机与上位机之间的相互通信。

(2)通过设计将串口通信的各种方式进行进一步的了解。

(3)将接收的数字与发送的数字在LCD上进行显示,从而熟悉液晶显示屏LCD1602

的具体操作。

(4)熟练掌握C语言在单片机上的编程应用。

(5)将各学科之间的的知识进行综合运用,并能够实现所需的功能设计。

2

串口通信原理

串行通信是CPU与外界交换信息的一种基本通信方式。通信时仅需一到两根传输线,且每次只能传送一位,适用于长距离传输,但速度较慢。MCS—51串行口是一个可编程的全双工串行通信接口,其对应的引脚为P3.0(10脚)和P3.1(11脚),分别为RXD和TXD,通过软件编程它可以作通用异步收发器用,也可以做同步移位寄存器使用,其帧格式有8位、10位和11位3种,并能设置各种波特率。MCS—51串行口有两个独立的缓冲器,即发送缓冲器和接收缓冲器,且共用一个地址99H(SBUF)。同时,MSC—51串行口可以用软件设置成4种不同的工作方式。

2.1

串行口工作原理

通过对特殊功能寄存器—串行口控制寄存器中SM0、SM1两位的操作,MCS—51单片机串口通信工作方式有4种,与串行口有关的特殊功能寄存器有串行口控制寄存器SCON、电源控制寄存器PCON和定时器T1,主要确定了串口通信的工作方式和波特率的计算方法。

(1)串行口数据缓冲器SBUF

SBUF是两个在物理上相互独立的接收,发送缓冲器,可同时发送,接收数据,两个缓冲器共用一个字节地址,为99H,可字节寻址,不可位寻址,复位值为00H。可通过编程对SBUF的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。CPU写SBUF,就是修改发送缓冲器;

CPU读SBUF,就是读接收缓冲器,在硬件结构上,串行口对外有两条独立的收发信号线RXD和TXD,因此可以同时发送,接收数据,实现全双工传送。

(2)串行口控制寄存器SCON

SCON寄存器用于确定串行通信的工作方式、接收和发送控制、串行口的中断状态标志,它既可以是字节寻址,也可以是位寻址,字地址为98H,其复位值为00H。

SM0,SM1—工作方式控制位,可构成4种通信工作方式,分别为:方式0-同步移位寄存器;方式1-10位异步收发;方式2-11位异步收发;方式3-11位异步收发。

SM2—多机通信控制位,用于主一从式多机通信控制,因多机通信是在方式2和方式3下进行,因此SM2位主要用于方式2和方式3。若SM2=1,则允许多机通信。若SM2=0,则不属于多机通信情况,接收到一帧数据后,无论第9位(D8)是0还是1,都置中断标志RI=1,接收到的数据装入接收/发送缓冲器(SBUF)中。

在工作方式1时,若SM2=1,则只有接收到有效停止位时中断标志RI才置1,以便接收下一帧数据;在工作方式0时,SM2必须为0。

REN—允许接收控制位,用软件置1或清零,REN=1,允许接收;REN=0,禁止接收。

TB8—发送数据位8,在方式2和方式3时,TB8是要发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0为数据,TB8=1为地址,该位由软件置位或清零,此外,该位还可以作为数据的奇偶检验位。

RB8—接收数据位8,在工作方式2和工作方式3种,它是接收到的第9位数据位,既可以作为约定好的奇偶检验位,也可以作为多机通信时的地址帧或数据帧标志。在工作方式1中若SM2=0,则RB8是接收到的停止位,在工作方式0种不使用RB8。

TI—发送中断标志位,在工作方式0中,发送完8位数据后,由硬件置1,向CPU申请接收中断,CPU响应中断后,必须用软件清零;在其他方式下,在发送停止位前,由硬件置位。

RI—接收中断标志位。在工作方式0种,接收完8位数据后,由硬件置1,向CPU申请发送中断,CPU响应中断后,必须用软件清零;在其他方式下,在接收到停止位的中间时刻由硬件置1,中断响应后也必须用软件清零。

串行发送中断标志位TI和接受中断标志位RI是同一个中断源,在全双工通信中,必须用软件来判别是发送中断请求还是接收中断请求。

(3)电源控制寄存器PCON

PCON主要是为CHMOS型单片机上实现电源控制而设置的专用寄存器,单元地址为87H其中只有一位SMOD与串行口工作有关。SMOD称为波特率选择位。在工作方式1,2,3中若SMOD=1,则波特率提高一倍;若SMOD=0,则波特率不加倍。

除了以上3种特殊功能寄存器以外,串口的工作还与定时器T1和中断允许寄存器IE有关,定时器T1主要在工作方式1,工作方式2中用于计算波特率,而IE主要用于接收/发送中断的允许控制,ES=0,禁止串行中断,ES=1,允许串行中断。

2.2串行通信的波特率

在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64或fosc/32,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD为0,波特率为focs/64,SMOD为1,波特率为focs/32。模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率。计算这两个模式的波特率可以用以下的公式去计算。

波特率=(2SMOD÷32)×定时器1溢出速率

(1)

上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2下定时器1溢出速率的计算公式如下:

溢出速率=(计数速率)/(256-TH1)

(2)

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

当晶振为11.0592MHZ时:

9600=(2÷32)×((11.0592M/12)/(256-TH1))

TH1=250

当晶振为12MHZ时:

9600=(2÷32)×((12M/12)/(256-TH1))

TH1≈249.49

上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。

本次设计中为了得到精确地波特率,采用的晶振频率为11.0592MHz,此外定时器工作在方式2,即八位自动重装载,串口工作在方式1.

2.3

方案论证

方案一:USB转串口通信实现传输数据,使用LED显示。LED显示原理简单,容易实现,但功能不强大,技术落后。

上位机

USB转串口通信信

AT89S52

LED显示

图2.1方案一系统框图

方案二:使用max232芯片来进行RS485和TTL电平之间的转换,能够更好的理解串口通信。使用LCD来进行显示,功能更加强大。使用按键来控制LCD所显示的数字进行移位显示或循环移位显示。综合考虑,方案二更能体现本次课设的内容,更能加深我们队串口通信的理解,但是考虑到现在计算机都没有串口,使用USB转串口。

按键控制

LCD1602

显示

AT89S52

单片机

系统组成框图

Max232

电平转换

上位机

串行通信

图2.2

方案二系统框图

3硬件设计

3.1

使用AT89S52作为本系统的主控机

图3.1单片机工作电路

AT89S52是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程序存储器和1000次擦写循环,数据保留时间为10年,是最好的选择。

3.2

采用按键复位电路

图1.2

按键复位电路

3.3

采用LCD显示电路

图1.3

LCD显示电路

分别使用P2.0,P2.1,P2.2作为LCD的控制端,P0口作为数据的输入端,使用一个10K的滑动变阻器来调节LCD的对比度。

3.4

max232电平转换电路

图1.4

串行通信电路

插座的2脚接电脑的数据发送端,插座的三脚接电脑的接收端。

3.5

按键电路

图1.5

按键电路

通过读取P2口的电平来判断是否有键按下。

4

软件设计

4.1主程序流程图

开始

初始化液晶

初始化串口

接收到数据

接收数据

接收完

调用键盘扫描函数

键值为0x40,数据右移一位

键值为0x80,数据循环右移

键值为0,调显示函数

返回

图4.1主程序流程图

本程序采用模块化设计,使用函数来实现要实现的功能。主要的几个函数有LCD显示函数,按键扫描函数和串口中断函数。通过串口中断函数来改变字符串的内容,调用按键函数确定键值,根据键值来确定固定显示,循环显示和移位显示。最后调用LCD显示函数吧字符串显示出来。

4.2

LCD显示字符串函数和显示字符函数。

要显示的字符,地址作为实参

要显示的字符串作为实参

是否在第一行

调用显示一个字符函数

地址加c0

地址加80

是否显示完

写入数据

结束

图4.2显示函数流程图

显示字符串是通过调用显示函数来实现的,有三个参数,分别为要显示的字符,横坐标,纵坐标。显示字符是先确定地址,再把数据写入。

4.3

键盘函数判定有键按下

调用键盘处理函数

去抖动

返回键值

图4.3键盘函数

键值处理函数是把P2口的值取反,然后屏蔽低四位得到键值。

5系统调试

普遍情况下一个系统只有经过调试才会正常工作,在调试过程中我们能加深对系统的理解,发现自己的错误。

5.1

硬件调试

硬件要实现的有LCD能正常显示,按键正常工作,串口能正常通信。

5.1.0

LCD

调试

使用KEIL3写一个简单的LCD显示函数生成HEX文件,首先我在proteus

ISIS7中对实验进行了仿真,确定程序是可行的。但将程序拷进单片机中后LCD不能正常显示,经过询问同学我得知可能是我的电位器没调好,经过调试电位器LCD能正常显示。

5.1.1

按键调试

使用万用表分别检测按键没按下和按下时的电位,发现能达到预期的目标。但编程时发现我的P2.0,P2.1,P2.2口已经在LCD上用了。只能把先断开,再跳线到P2.5,P2.6,P2.7,能够正常实现按键功能。

5.1.2

串行通信调试

一开始总是不能正常通信,经过耐心的检查发现时串行线连接错误。

5.2

软件调试

软件调试采用仿真和现场调试相结合的方法,先一个个函数实现,再把所有的程序整合起来实现预期的功能。

6

结论

经过调试,本次设计住实现了上位机与下位机之间简单的通信,上位机通过LABVIEW程序发送一个十六进制的数经过串口,可以被下位机接收,并在LCD进行显示,而且实现根据按键来控制固定显示、移位显示和循环移位显示。,通过本次设计,对单片机串口通信这部分的内容进行了更深层次的学习,知道了很多书本上学不到的东西。并且在本次设计中采用LCD显示,开始觉得LCD很高端,但通过查阅资料和询问同学老师很轻松的就掌握了它的使用。本次设计所要求的移位显示,一开始使用移位指令。结果发现显示的时候会有残影,使用没显示一次清屏一次的办法解决了这个问题。

总之,通过本次设计锻炼了我查找错误时的耐力,锻炼了我调试软硬件的能力,也是我对与C语言在单片机上的编程变得更加熟练,为以后进一步学习打下了坚实的基础。

参考文献

[1]谭浩强,C程序设计[M]北京:清华大学出版社,2010.6:25~30

[2]白驹珩、雷晓平,单片计算机及其应用[M]北京:高等教育出版社,2005.9:30~50

[3]王选民,智能仪器原理及设计[M]北京:清华大学出版社,2008.7:123~140

[4]黄冰,微机原理及应用[M]重庆:重庆大学出版社,2003.1:229~231

[5]史志举,PC机与AT89C51单片机的串行通信系统设计[D]江苏:河海大学

附图一:原理图

附图二:PCB图

附图三:仿真电路图

16

    以上《基于串口通信的LCD显示》范文由一流范文网精心整理,如果您觉得有用,请收藏及关注我们,或向其它人分享我们。转载请注明出处 »一流范文网»最新范文»基于串口通信的LCD显示
‖大家正在看...
设为首页 - 加入收藏 - 关于范文吧 - 返回顶部 - 手机版
Copyright © 一流范文网 如对《基于串口通信的LCD显示》有疑问请及时反馈。All Rights Reserved