ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:294.77KB ,
资源ID:12374811      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12374811.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(南邮设计报告基于8155的8LED显示串口通信机设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

南邮设计报告基于8155的8LED显示串口通信机设计.docx

1、南邮设计报告基于8155的8LED显示串口通信机设计课程设计实验报告实验题目:基于8255的LCD温度显示设计学院: 通信工程 专业: 学号: 姓名: 指导老师: 第一部分 实验目的及要求1. 实验目的本课程设计是在理论课程的基础上,重点培养学生的动手能力,通过理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,为下一部结合实际的硬件系统设计准备条件。2. 实验基本要求:根据提供的参考工程,在proteus平台自己重新画出实验所需要的电气原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取、原理图的

2、电气连接、程序的编写编译以及运行,并能查出其错误等。第二部分 实验工具及实验器件1.Proteus 7.5以及Keil 4软件的使用Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是

3、目前世界上唯一将电路仿真软件、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系列单片机的软件,这从近年

4、来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件,而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成

5、环境、强大的软件仿真调试工具也会令你事半功倍。有了proteus和keil软件我们就需要在这两个软件中建立我们所需要的工程进行实验,具体步骤如下:第一步:在Keil4中建立一个新的工程,命名为“软件实验”,如图2-1。图2-1第二步:选择使用的单片机芯片,我们选择ATMEL公司生产的89C51,如图2-2。图2-2第三步:将新创建的.c文件添加到Target 1中,如图2-3。图2-3这样我们就可以在keil4的环境下对单片机的程序进行编译和运行了。2.51单片机AT89C5151单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,

6、后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。当前常用的51系列单片机主要产品有:*Intel的:80C31、80C51、87C51,80C32、80C52、87C52等;*ATMEL的:89C51、89C52、89C2051等;89C51单片机的内部结构为:单一+5V电源供

7、电;CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;五个中断源的中断控制系统;一对全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率为12M。3. RS-232电平转换芯片MAX232第一部分是电荷泵电路。由1

8、、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、R2O

9、UT输出。第三部分是供电。15脚GND、16脚VCC(+5v)。完成连接之后的电路图如图2-4所示。图2-411和12口分别连接51单片机的RxD(P3.0)、TxD(P3.1)。4. 三态输出的8D透明锁存器74HC37374HC373 的输出端 Q0Q7可直接与总线相连。 当三态允许控制端 OE 为低电平时,Q0Q7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,Q0Q7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。 当锁存允许端 LE 为高电平时,Q随数据D而变。当 LE为低电平时,Q被锁存在已建立的数据电平。5. 二线制I2C CMOS串行EEPRO

10、M 24C086.8255引脚以及功能。采用8255 A扩展并行I/O 口一、8255A的内部结构三口、两組概念 与外设接口的引脚:最多可以接3个外设 与三总线接U的引脚:1)与CB 接口的脚:RD. WR. RESETS2)与AB接口的脚:来0时选屮本片,然后 A1A0选中的寄存器 0 0 PA1 1 PB0 0 PC1 1 控制口3)与DB接U的脚7.LED液晶显示器件7seg-mpx8-ca7SEG-MPX8-CA八个共阳二极管显示器12345678是阳公共端图三LED液晶显示器件7seg-mpx8-ca数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此

11、根据数码管的驱动方式的不同,可以分为静态式和动态式两类。(1) 静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都有个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5*8=40跟I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个,实际应用时需要增加译码驱动进行驱动,增加了硬件电路的复杂性。(2) 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的八个显示比划“a,b,c,d,e,f,g,

12、h”的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立I/O线控制,当单片机输出字形码时,所有数码管都接受到相同的字形码,但究竟是哪个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通恐慌只打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动,在轮流显示过程中,每位数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就使一组稳定的显示数据,不会有闪烁感

13、,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。第三部分 实验原理图及程序代码1. 硬件部分电路设计 电路图如图:2. 软件部分设计这部分的程序如下:#include #include #include #include #define uchar unsigned char#define uint unsigned int#define pa XBYTE0x0001 /定义8155口地址#define pb XBYTE0x0002#define control8155 XBYTE0x0000sbit SCK=P10;sbit SDA=P11;sbit E=P37;

14、sbit SEND=P31;sbit REV=P30;sbit K1=P32;sbit K2=P33;sbit K3=P23;uchar table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f ;/0123456789存码表uchar pos8=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; /位选,选中数码管 data unsigned char str116=Starting.;data unsigned char str216=Recieved:;data unsigned char send16=

15、test number;uchar temp;int i;void delay(unsigned int t) unsigned int i,j; for(i=0;it;i+) for(j=0;j0;i-) ; void start () SDA=1; delay(3); SCK=1; delay(3); SDA=0; delay(3); SCK=0; delay(3);void stop () SDA=0; delay(3); SCK=1; delay(3); SDA=1; delay(3);void U4_init() SCK=1; delay(3); SDA=1; delay(3);vo

16、id responds() uchar i; i=0; SCK=1; SDA=1; delay(3); while(SDA=1&i250) i+; SCK=0; delay(3);void write_dat (uchar dat) /写一个字节 uchar i,temp; temp=dat; for(i=0;i8;i+) temp=temp1; SDA=CY; delay(3); SCK=1; delay(50); SCK=0; void write(uchar add,uchar dat) / 写一个字节dat到地址add start(); write_dat(0xa0); respond

17、s(); write_dat(add); responds(); write_dat(dat); responds(); stop();uchar read_dat () /读一个字节 uchar a,r,temp; SDA=1; /接收前记得释放数据线,即拉高sda。 delay(3); for(a=0;a8;a+) /循环八次以此接收一字节数据 SCK=1; /sck置高,使接收数据稳定。 delay(3); r=r1; /接收数据处理,存入i2c_r变量中。 temp=SDA; r=r|temp; SCK=0; /sck置低,准备接受下个数据位。 delay(3); return r;u

18、char read (uchar add) /从地址add中读取一个字节 uchar dat; start(); write_dat(0xa0); responds(); write_dat(add); responds(); start(); write_dat(0xa1); responds(); dat=read_dat(); delayXus(2); stop(); return dat; void writedata()uchar i;uchar str8=0xf9,0xa4,0xb0,0xc0,0xf9,0xa4,0xb0,0xc0;for(i=0;i8;i+)write(i,st

19、ri); str0=0xa4;str1=0xb0;str2=0x99;str3=0xf9;str4=0xa4;str5=0xb0;str6=0x99;str7=0xf9;for(i=8;i16;i+)write(i,stri-8);str0=0x4f;str1=0x5b;str2=0x4f;str3=0x66;str4=0x66;str5=0x4f;str6=0x5b;str7=0x06;for(i=16;i24;i+)write(i,stri-16);str0=0x99;str1=0x92;str2=0x82;str3=0xb0;str4=0x99;str5=0x92;str6=0x82;s

20、tr7=0xb0;for(i=24;i32;i+)write(i,stri-24);str0=0x92;str1=0x82;str2=0xf8;str3=0x99;str4=0x92;str5=0x82;str6=0xf8;str7=0x99;for(i=32;i40;i+)write(i,stri-32);str0=0x82;str1=0xf8;str2=0x80;str3=0x92;str4=0x82;str5=0xf8;str6=0x80;str7=0x92;for(i=40;i48;i+)write(i,stri-40);str0=0xf8;str1=0x80;str2=0x90;st

21、r3=0x82;str4=0xf8;str5=0x80;str6=0x90;str7=0x82;for(i=48;i56;i+)write(i,stri-48);str0=0x80;str1=0x90;str2=0xc0;str3=0xf8;str4=0x80;str5=0x90;str6=0xc0;str7=0xf8;for(i=56;i64;i+)write(i,stri-56);str0=0x90;str1=0xc0;str2=0x88;str3=0x80;str4=0x90;str5=0xc0;str6=0x88;str7=0x80;for(i=64;i72;i+)write(i,st

22、ri-64);str0=0xc0;str1=0x88;str2=0x83;str3=0x90;str4=0xc0;str5=0x88;str6=0x83;str7=0x90;for(i=72;i80;i+)write(i,stri-72);void send_char(uchar temp1)SBUF=temp1;while(!TI);TI=0;void MAX232_init()TMOD=0x20;TH1=252;TL1=252;TR1=1;PCON=0x80;SCON=0x50;void main()int i,j,set;char b,t;uchar word16,recv8;U4_in

23、it();writedata();delay(50);set=0;while(1)control8155=0x03;for(i=0;i10)set=0;MAX232_init();while(!K2);control8155=0x03; delay(30); switch(set)case 1: for(i=0;i8;i+) sendi=read(i); for(i=0;i8;i+) send_char(sendi); delay(50); if(RI=1) RI=0; temp=SBUF; recvi=temp; delay(100); while(K3) /show for(i=0;i8;

24、i+) pa=posi; pb=sendi; delay(5); delay(5);delay(5);while(!K3);pa=0x00;pb=0xff;break;break;case 2: for(i=8;i16;i+) sendi-8=read(i); for(i=0;i8;i+) send_char(sendi); delay(50); if(RI=1) RI=0; temp=SBUF; recvi=temp; delay(100); break;case 3: for(i=16;i24;i+) sendi-16=read(i); for(i=0;i8;i+) send_char(s

25、endi); delay(50); if(RI=1) RI=0; temp=SBUF; recvi=temp; delay(100); break;case 4:for(i=24;i32;i+) sendi-24=read(i); for(i=0;i8;i+) send_char(sendi); delay(50); if(RI=1) RI=0; temp=SBUF; recvi=temp; delay(100); break;case 5: for(i=32;i40;i+) sendi-32=read(i); for(i=0;i8;i+) send_char(sendi); delay(50

26、); if(RI=1) RI=0; temp=SBUF; recvi=temp; delay(100); break;case 6:for(i=40;i48;i+) sendi-40=read(i); for(i=0;i8;i+) send_char(sendi); delay(50); if(RI=1) RI=0; temp=SBUF; recvi=temp; delay(100); break;case 7: for(i=48;i56;i+) sendi-48=read(i); for(i=0;i8;i+) send_char(sendi); delay(50); if(RI=1) RI=0; temp=SBUF; recvi=temp; delay(100); break;case 8:for(i=56;i64;i+) sendi-56=read(i); for(i=0;i8;i+) send_char(sendi); delay(50); if(RI=1) RI=0; temp=SBUF; recvi=temp; delay(100); break;case 9:for(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1