南邮设计报告基于8155的8LED显示串口通信机设计.docx
《南邮设计报告基于8155的8LED显示串口通信机设计.docx》由会员分享,可在线阅读,更多相关《南邮设计报告基于8155的8LED显示串口通信机设计.docx(26页珍藏版)》请在冰豆网上搜索。
![南邮设计报告基于8155的8LED显示串口通信机设计.docx](https://file1.bdocx.com/fileroot1/2022-11/14/8d9a9adc-c60a-4139-a157-a1479a68ad66/8d9a9adc-c60a-4139-a157-a1479a68ad661.gif)
南邮设计报告基于8155的8LED显示串口通信机设计
课程设计实验报告
实验题目:
基于8255的LCD温度显示设计
学院:
通信工程
专业:
学号:
姓名:
指导老师:
第一部分实验目的及要求
1.实验目的
本课程设计是在理论课程的基础上,重点培养学生的动手能力,通过理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,为下一部结合实际的硬件系统设计准备条件。
2.实验基本要求:
根据提供的参考工程,在proteus平台自己重新画出实验所需要的电气原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取、原理图的电气连接、程序的编写编译以及运行,并能查出其错误等。
第二部分实验工具及实验器件
1.Proteus7.5以及Keil4软件的使用
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:
*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。
而*.HEX文件则由Keil软件编译后生成。
Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件,而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
有了proteus和keil软件我们就需要在这两个软件中建立我们所需要的工程进行实验,具体步骤如下:
第一步:
在Keil4中建立一个新的工程,命名为“软件实验”,如图2-1。
图2-1
第二步:
选择使用的单片机芯片,我们选择ATMEL公司生产的89C51,如图2-2。
图2-2
第三步:
将新创建的.c文件添加到Target1中,如图2-3。
图2-3
这样我们就可以在keil4的环境下对单片机的程序进行编译和运行了。
2.51单片机AT89C51
51单片机是对目前所有兼容Intel8031指令系统的单片机的统称。
该系列单片机的始祖是Intel的8031单片机,后来随着Flashrom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。
目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。
51单片机是基础入门的一个单片机,还是应用最广泛的一种。
需要注意的是52系列的单片机一般不具备自编程能力。
当前常用的51系列单片机主要产品有:
*Intel的:
80C31、80C51、87C51,80C32、80C52、87C52等;
*ATMEL的:
89C51、89C52、89C2051等;
89C51单片机的内部结构为:
单一+5V电源供电;
CPU:
由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:
用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:
用以存放程序、一些原始数据和表格;
I/O口:
四个8位并行I/O口,既可用作输入,也可用作输出;
T/C:
两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一对全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。
最高振荡频率为12M。
3.RS-232电平转换芯片MAX232
第一部分是电荷泵电路。
由1、2、3、4、5、6脚和4只电容构成。
功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。
15脚GND、16脚VCC(+5v)。
完成连接之后的电路图如图2-4所示。
图2-4
11和12口分别连接51单片机的RxD(P3.0)、TxD(P3.1)。
4.三态输出的8D透明锁存器74HC373
74HC373的输出端Q0~Q7可直接与总线相连。
当三态允许控制端OE为低电平时,Q0~Q7为正常逻辑状态,可用来驱动负载或总线。
当OE为高电平时,Q0~Q7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。
当锁存允许端LE为高电平时,Q随数据D而变。
当LE为低电平时,Q被锁存在已建立的数据电平。
5.二线制I2CCMOS串行EEPROM24C08
6.8255引脚以及功能。
采用8255A扩展并行I/O口
一、8255A的内部结构
》三口、两組概念
》与外设接口的引脚:
最多可以接3个外设
》与三总线接U的引脚:
1)与CB接口的脚:
RD.WR.RESETS
2)与AB接口的脚:
来0时选屮本片,然后A1A0选中的寄存器
00PA
11PB
00PC
11控制口
3)与DB接U的脚
7.LED液晶显示器件7seg-mpx8-ca
7SEG-MPX8-CA八个共阳二极管显示器12345678是阳公共端
图三LED液晶显示器件7seg-mpx8-ca
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
(1)静态显示驱动:
静态驱动也称直流驱动。
静态驱动是指每个数码管的每一个段码都有个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5*8=40跟I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时需要增加译码驱动进行驱动,增加了硬件电路的复杂性。
(2)动态显示驱动:
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的八个显示比划“a,b,c,d,e,f,g,h”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立I/O线控制,当单片机输出字形码时,所有数码管都接受到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通恐慌只打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动,在轮流显示过程中,每位数码管的点亮时间为1—2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就使一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
第三部分实验原理图及程序代码
1.硬件部分电路设计
电路图如图:
2.软件部分设计
这部分的程序如下:
#include
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#definepaXBYTE[0x0001]//定义8155口地址
#definepbXBYTE[0x0002]
#definecontrol8155XBYTE[0x0000]
sbitSCK=P1^0;
sbitSDA=P1^1;
sbitE=P3^7;
sbitSEND=P3^1;
sbitREV=P3^0;
sbitK1=P3^2;
sbitK2=P3^3;
sbitK3=P2^3;
uchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0123456789存码表
ucharpos[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选,选中数码管
dataunsignedcharstr1[16]={"Starting...."};
dataunsignedcharstr2[16]={"Recieved:
"};
dataunsignedcharsend[16]={"testnumber"};
uchartemp;
inti;
voiddelay(unsignedintt)
{
unsignedinti,j;
for(i=0;ifor(j=0;j<10;j++)
;
}
voiddelayXus(ucharx)//微秒延时
{
while(--x);
}
voiddelayXms(ucharx)//毫秒延时
{
uchari;
while(x--)
{
for(i=250;i>0;i--)
{
;
}
}
}
voidstart()
{
SDA=1;
delay(3);
SCK=1;
delay(3);
SDA=0;
delay(3);
SCK=0;
delay(3);
}
voidstop()
{
SDA=0;
delay(3);
SCK=1;
delay(3);