基于单片机串口控制显示系统袁蜀怀.docx
《基于单片机串口控制显示系统袁蜀怀.docx》由会员分享,可在线阅读,更多相关《基于单片机串口控制显示系统袁蜀怀.docx(15页珍藏版)》请在冰点文库上搜索。
![基于单片机串口控制显示系统袁蜀怀.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/74939832-f858-4829-80ae-a5da081ec609/74939832-f858-4829-80ae-a5da081ec6091.gif)
基于单片机串口控制显示系统袁蜀怀
课程设计
课程名称:
单片机原理与应用
课题名称:
基于串口控制的显示系统设计
专业:
测控技术与仪器
班级:
测控11—02班
学号:
201152030219
姓名:
袁蜀怀
指导老师:
李凤玲
设计日期:
2014.01.05—2014.01.18
1前言(引言)
1.设计背景
随着MCS-51单片机的发展,它的应用已经从单机逐渐转向多机,而串行通信是一种能把二进制数据按位传送的通信,所需传输线少,特别适用于分级、分层和分布式控制系统以及远程通信中,是单片机之间的主要通信方式。
51单片机除了含有4个并行I/O接口外,还有一个全双工的串行接口。
在计算机技术和电子技术的飞速发展和广泛应用的同时,电器设备的输出显示技术也变得复杂多样,诸如CRT显示、LCD显示、多位LED显示及发光二极管显示等应运而生。
在这些显示当中,LED显示电路较为简单,成本也较低,在功能单一的仪器仪表与机电设备中应用较广。
但当设备显示的点或位较多时,就需要采用一定的驱动电路与相应的驱动方式。
在数码管数目较少时,我们通常用单片机并口控制,但是当显示需要较多的数码管时,如果改用串口控制,就会使系统硬件电路得以简化,降低了传送的成本,体积也会相对减小,而可靠性也会得到提高。
同时系统的更改和扩充也更为容易。
通过我们所学的MCS-51单片机的相关知识,综合其他软件的学习,设计一个基于单片机串口控制的显示系统(基于所学知识以及实际情况,决定采用数码管来做显示系统)。
模拟还原并显示传感器传输的数据。
让我们所学的知识能够得到应用,同时也能锻炼我们的动手和解决实际问题的能力,也为以后的学习做好准备。
2.设计的功能以及技术指标
设计功能:
本次设计主要由五个模块组成。
包括:
AT89C51单片机,8位数码管,74HC595锁存器,74HC573锁存器,按键模块。
利用单片机的串口将单片机内的段选信号发送,经74HC595锁存器将串口转化为并口,并将MCS-51发送的段选信号输入至8位数码管的段选端。
与此同时,利用MCS-51的P0口控制8位数码管的位选端。
使得8位数码管能够显示随着电阻值增大的电压值。
电压表最大量程为5V,精度为0.02V。
P1.0和P1.1分别和按键K1和K2连接,按键K1表示电阻值增大,按键K2表示电阻值减小。
技术指标:
(1)数码管能够准确显示电阻值以及最小精度。
(2)要求显示最大量程为5V,最小精度为0.02V。
(3)可以通过调整实现电阻值快速或减缓变化。
(4)电路设计以及驱动程序均要求简洁方便。
3.硬件系统设计
3.1根据设计功能及要求,硬件系统主要由四个模块组成:
AT89C51单片机,8位数码管,74HC595移位寄存器,74HC573锁存器,按键模块。
经过构思和实际过程中的实验,得到系统的硬件连接关系,可以画出系统的硬件框图如下:
3.2单片机的选择
本次设计采用8位字
长的MCS-51单片机,内含一个片内振荡时钟周期和一个时钟电路,4KB的片内程序ROM和128BRAM,4个I/O端口,5个中断源,且具有很强的拓展功能。
本次主要用到P0端口和P3.0、P3.1以及P3.5等引脚。
每个I\O均有两种读入方法,即读锁存器和读引脚,其中P3口具有第二功能。
在本次设计中,我们主要用到的就是P3.0和P3.1的串行数据通信功能。
3.3复位电路和时钟电路的设计
复位是指单片机的初始化操作,其作用是使CPU和系统中其它部件都处于一个确定的初始状态,并从这个状态开始工作,以防止电源系统不稳定造成的CPU工作环境不正常,并给外部提供一个复位的CPU的接口。
MCS-51单片机的复位电路有上电复位和按键复位两种形式,由于按键上电复位比较适合于样品制作和实验调试,所以我们在本次设计中采用按键上电复位。
MCS-51单片机内部有一个用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是反相放大器的输入端和输出端,通常经由片外晶体振荡器或陶瓷谐振器与两个匹配的电容一起构成一个自激振荡电路,为单片机提供时钟电源,即内部时钟方式。
本次设计我们所采用的时钟电路就是内部时钟方式。
3.4数码管显示电路
数码管显示电路由8位数码管和74HC573锁存器组成。
3.4.1数码管简介
常用的LED显示器由8个发光二极管组成,也称8段LED显示器。
它由7个字符段和一个小数点段组成,其中字符段发光二极管亮暗的不同组合可以显示多种数字、字母以及其他符号,小数点段dp用于显示小数点。
为了使LED显示器显示不同的数字或符号,就要将不同段的发光二极管点亮,这样就要为LED显示器提供显示字形代码。
这些代码可使LED相应的段发光,从而显示不同的字形,简称段码(或称为字形码)
LED显示器中的发光二极管共有两种连接方法:
共阳极接法和共阴极接法。
在本次设计中我们使用的是8个共阴极的发光二极管。
3.4.274HC573简介
74HC573包含八进制3态非反转透明锁存器,是一种高性能的硅门器件。
74HC573包含八路D型透明锁存器,每个锁存器具有独立的D型输入,以及适用于面向总线的应用的三态输出。
所有锁存器共用一个锁存使能(LE)端和一个输出使能(OE)端。
OEˉ
LE
D
Q
L
H
H
H
L
H
L
L
L
L
X
Q0
H
X
X
Z
当LE为高时,数据从Dn输入到锁存器,在此条件下,锁存器进入透明模式,也就是说,锁存器的输出状态将会随着对应的D输入每次的变化而改变。
当LE为低时,锁存器将存储D输入上的信息一段就绪时间,直到LE的下降沿来临。
当OE为低时,8个锁存器的内容可被正常输出;当OE为高时,输出进入高阻态。
OE端的操作不会影响锁存器的状态。
74HC573与以下型号逻辑功能相同:
74HC563,但输出为反相
74HC373,但引脚布局不同
如上图所示,数码管的段选信号通过74HC573锁存器与寄存器74HC595相连,串行数据通过74HC595传输至该锁存器中,而上拉电阻则使得数输入端为高电平。
当数据输入使得数码管电位变化,当输入为1时,共阴极数码管有电位差,从而将数码管点亮。
通过数码管每一段亮灭不同,从而显示数字或字符。
3.574HC595简介
74HC595是硅结构的CMOS器件,兼容低电压TTL电路,是具有8位移位寄存器和一个存储器,三态输出功能。
移位寄存器和存储器是分别的时钟。
数据在SHcp(移位寄存器时钟输入)的上升沿输入到移位寄存器中,在STcp(存储器时钟输入)的上升沿输入到存储寄存器中去。
如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。
移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
它能将串行输入的8位数字,转变为并行输出的8位数字。
在本设计中,由于串口工作在方式0,所以将74HC595的SER数据输入端口与P3.1(RXD)连接,SRCLK端口与P3.1端口连接。
数码管位选数据通过P3.1引脚从单片机输出,经该寄存器转化为并行数据,输入到数码管的位选端。
3.6按键模块
独立键盘为非编码键盘,单片机可以通过按键闭合检测高低电平。
在本次设计中我们将按键K1和K2分别和单片机P1端口的P1.0和P1.1引脚连接,其中K1和K2分别模拟电路中电阻值的增大和减小。
由于电阻值的变化而影响电阻上分压的变化。
3.7整体电路图
4.软件系统设计
4.1初始化程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voidbuttom();
sbitRCLK=P3^5;//P3.0接P3.4P3.1接P3.6
sbitK0=P2^0;
sbitK1=P2^1;
ucharLEDW[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管位选
ucharLEDD[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchari,j;
intk,R;
定义P3.5为同步脉冲输入端,P3.0为段选数据输入端,由于实验板将SER连接P3.4,故将P3.0接P3.4。
P3.1为移位脉冲输入端,同理接P3.6。
K0和K1均为独立按键。
LEDD[]为数码管段选编码表,LEDW[]为数码管位选编码表。
其中i,j为延时子程序变量。
4.2独立按键驱动程序
voidbuttom()
{
uchard=300;
if(K0==0)
{
delay(70);
while(K0==0&&d--);
k++;
if(k==255)
k=0;
}
if(K1==0)
{
delay(70);
while(K1==0&&d--);
k--;
if(k==-1)
k=255;
}
R=(int)(100*k/51);
}
按键驱动流程图:
4.3延时子程序
voiddelay(intz)
{
inti,j;
for(i=0;i<100;i++)
for(j=0;j}
4.3主程序
voidmain()
{
SCON=0x00;//REN=1允许串行接受状态,串口工作模式0
while
(1)
{
buttom();
SBUF=LEDD[R/100]|0x80;//SUBF接受/发送缓冲器百位
while(TI==0);//判断数据是否发送完成
TI=0;//关闭发送端
RCLK=0;//提供一个上升沿,使595工作
_nop_();
_nop_();
RCLK=1;
P0=LEDW[5];//数字表的百位
delay
(1);
SBUF=LEDD[R/10%10];//SUBF接受/发送缓冲器十位
while(TI==0);
TI=0;
RCLK=0;//提供上升沿
_nop_();
_nop_();
RCLK=1;
P0=LEDW[6];//十位
delay
(1);
SBUF=LEDD[R%10];//SUBF接受/发送缓冲器个位
while(TI==0);
TI=0;
RCLK=0;
_nop_();
_nop_();
RCLK=1;
P0=LEDW[7];
delay
(1);
}
}