基于简单CPULCD的录音显示回放.doc

上传人:文库蛋蛋多 文档编号:2883303 上传时间:2023-03-01 格式:DOC 页数:18 大小:1.29MB
返回 下载 相关 举报
基于简单CPULCD的录音显示回放.doc_第1页
第1页 / 共18页
基于简单CPULCD的录音显示回放.doc_第2页
第2页 / 共18页
基于简单CPULCD的录音显示回放.doc_第3页
第3页 / 共18页
基于简单CPULCD的录音显示回放.doc_第4页
第4页 / 共18页
基于简单CPULCD的录音显示回放.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《基于简单CPULCD的录音显示回放.doc》由会员分享,可在线阅读,更多相关《基于简单CPULCD的录音显示回放.doc(18页珍藏版)》请在三一办公上搜索。

1、南京邮电大学实验题目:基于简单CPU LCD的录音显示回放设计学院: 专业: 学号: 姓名: 指导老师: 林建中 目录第一部分 实验目的和要求3第二部分 实验工具及实验器件31.Proteus以及Keil软件的介绍32.51单片机AT89C5143.LCD/MAX721954.三态输出的8D透明锁存器74HC37365. DAC083266. 74LS3737第三部分 实验原理图及程序代码81.硬件部分电路设计82.软件部分设计10第四部分 仿真测试26第五部分 实验小结和体会28第一部分 实验目的和要求本课程设计是在理论课程的基础上,重点培养学生的动手能力,通过理论计算、实际编程、调试、测试

2、、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,为下一部结合实际的硬件系统设计准备条件。1、 录音机类 实验中需要录取的信源,可以用单片机或者信号发生器产生。基本要求:1 把需要录取的信号用AD转换器采样并存储在SRAM中。2 在一组数码管或LCD上显示采样速率和录音时间(秒),以及信号相关参数。3 用D/A转换器回放录音信号,通过喇叭过模拟示波器显示。4 在一组数码管或LCD上显示回放的播放时间或信号强度。发挥部分:1 用功能键可分别设定录音和放音的采样速率。2 多段录音管理。3 任意组合播放。根据提供的参考工程,在proteus平台自己重新画出实验所需要的电气原理图,并在

3、此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取、原理图的电气连接、程序的编写编译以及运行,并能查出其错误等。第二部分 实验工具及实验器件1.Proteus以及Keil软件的介绍Proteus是英国Labcenter公司开发的电路及单片机系统设计与仿真软件。Proteus可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能。Proteus是目前唯一能对各种处理器进行实时仿真、调试与测试的EDA工具,真正实现了在没有目标原型时就可对系统进行调试、测试和验证。Proteus软件大大提高了企业的产

4、品开发效率,降低了开发风险。由于Proteus软件逼真、真实的协同仿真功能,它也特别适合于作为配合单片机课堂教学和实验的学习工具。Proteus软件提供了30多个元器件库、7000余种元器件。元器件涉及电阻、电容、二极管、三极管、变压器、继电器、各种放大器、各种激励器、各种微控制器、各种门电路和各种终端等。Proteus软件还提供有交直流电压表、逻辑分析仪、示波器、定时/计数器和信号发生器等测试信号工具用于电路测试。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。K

5、eil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存建立工程并添加源文件设置工程编译/汇编、连接,产生目标文件程序调试。Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇

6、编、连接等操作。工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。首先选择菜单File-New,在源程序编辑器中输入汇编语言或C语言源程序(或选择File-Open,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜单Project-New Project,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择Source Group1,右

7、击鼠标弹出快捷菜单,选择“Add File to Group Source Group1”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。加入文件后点close返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。紧接着对工程进行设置,选择工程管理窗口的Target1,再选择Project-Option for TargetTarget1(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug选

8、项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“Creat Hex Fi”;其它选项卡内容一般可取默认值。工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。成功编译/汇编、连接后,选择菜单Debug-Start/Stop Debug Session(或按Ctrl+F5键)进入程序调试状态,Keil提供对程序的模拟调试功能,内建一个功能强大的仿真CPU以模拟执行程序。Keil能以单步执行(按F11或选择Debug-Step)、过程单步执行(按F10或选择Debug-Step Over)、全速执行等多种运行方式进行程序调试。如果发现程序有错,

9、可采用在线汇编功能对程序进行在线修改(Debug-Inline Assambly),不必执行先退出调试环境、修改源程序、对工程重新进行编译/汇编和连接、然后再次进入调试状态的步骤。对于一些必须满足一定条件(如按键被按下等)才能被执行的、难以用单步执行方式进行调试的程序行,可采用断点设置的方法处理(Debug-Insert/Remove Breakpoint或Debug-Breakpoints等)。在模拟调试程序后,还须通过编程器将.hex目标文件烧写入单片机中才能观察目标样机真实的运行状况。在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:*.HEX,可以在PROTEUS的原理图中看

10、到模拟的实物运行状态和过程。2.51单片机AT89C51 51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。当前常用的51系列单片机主要产品有:*Intel的:8

11、0C31、80C51、87C51,80C32、80C52、87C52等;*ATMEL的:89C51、89C52、89C2051等;89C51单片机的内部结构为:单一+5V电源供电;CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM:用以存放程序、一些原始数据和表格;I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;五个中断源的中断控制系统;一对全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之

12、间或单片机与微机之间的串行通信;片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率为12M。3.LCD /MAX7219MAX7219/MAX7221是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接条线图显示器或者64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。 MAX7221与SPI、 QSPI以及 MICROWIRE相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。 一个方便的四

13、线串行接口可以联接所有通用的微处理器。 每个数据可以寻址在更新时不需要改写所有的显示。MAX7219/MAX7221同样允许用户对每一个数据选择编码或者不编码。 整个设备包含一个150A的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。 在应用时要求3V的操作电压或segment blinking,1 三态输出的8D透明锁存器74HC37374HC373 的输出端 Q0Q7可直接与总线相连。 当三态允许控制端 OE 为低电平时,Q0Q7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,Q0Q7呈高阻态,即不驱动总线,也不

14、为总线的负载,但锁存器内部的逻辑操作不受影响。 当锁存允许端 LE 为高电平时,Q随数据D而变。当 LE为低电平时,Q被锁存在已建立的数据电平。2.DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。3 LM016L是一个2*16的点阵式字符液晶显示模块,每个字符由5*7个点组成的;内部带有HD44780控制器;采用5V电源供电;内建有192个字符,8个用户自建字符。74LS373为三态输出的八 D 透明锁

15、存器,共有 54S373 和 74LS373 两种线路 结构型式,其主要电器特性的典型值如下(不同厂家具体值有差别): 型号 tPd PD 54S373/74S373 7ns 525mW 引脚图54LS373/74LS373 17ns 120mW 373 的输出端 O0O7 可直接与总线相连。 当三态允许控制端 OE 为低电平时,O0O7 为正常逻辑状态,可用来驱动负载或总线。当 OE 为高电平时,O0O7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。 当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。当 L

16、E 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。 引出端符号: D0D7 数据输入端 OE 三态允许控制端(低电平有效) LE 锁存允许端 O0O7 输出端 真值表: DnLEOEOnHHLHLHLLXLLQ0XXH高阻态第三部分 实验原理图及程序代码1. 硬件部分电路设计 由于本次实验设计的是一个单片机的串口通信实验,所以我们应当使用51单片机的通信串口进行数据的收发,51单片机的通信串口主要是P3.0和P3.1两个端口。在实验要求中提出了使用RS-232标准进行通信,因为单片机的输出电平为TTL标准,所以我们要使用一个芯片将TTL标准转换成RS-232标准,即M

17、AX232芯片。通过MAX232芯片的接收端和发送端相连来构成自发自收电路。因为实验要求要能够通信10组数据,所以我们使用了基于I2C总线的EEPROM存储器24C08B,该存储器具有1K的存储空间,我们需要对这种串行存储器进行读写操作,我们采用单片机上的P1.0与P1.1进行读写操作,通过程序的编写,我们在仿真开始时向存储器中输入10组预先设定好的数据,然后要传输进行通信时从存储器中按照存储地址将需要的数据串提取出来进行传输。对于电路的输出部分,我们使用了简单的I/O口 ,即使用74HC373芯片,并将该芯片用作锁存器,即把该芯片的LE口连接到单片机的ALE口作为控制口,通过该芯片驱动总线,

18、来完成该电路的显示部分。该电路的显示部分按要求则使用型号为LM016的LCD液晶显示器,通过P0口传送数据然后由LCD显示出来。另外,电路中还设计了两个按键,分别是选择和发送键,选择键用来选择要发送的数据串,发送键则用来发送数据。基于8255口是指显示和键盘都由8255的I/O口控制,使用8255可编程并行口芯片,设定为工作方式0, PC口做输入,PA口做输出,使得达到控制通过按键选择发送,显示正确的数据串。完整电路原理图如下:(补充一下,由于验收的时候发现了问题,没有在8255上设置按键,所以改正了电路图和程序,已经达到了键盘的要求。上图就是改正以后的图,下面的程序也是改正后的程序。)2.软

19、件部分设计在程序中后面注释了我对程序功能的理解,所以就没有分块分析。下面是整个设计代码和我对设计的认识和理解。/*基于CPU的LCD显示录音回放机设计程序*/#include#include/*宏定义*/#define uint unsigned int#define uchar unsigned char/*芯片端口地址定义*/#define DAC0832 XBYTE0XBFFF /DAC0832口#define ADC0804 XBYTE0X77FF /ADC0804口 /*系统引脚定义*/sbit RS=P30; /1602的数据/命令控制口口sbit RW=P31; /1602的读写

20、控制端sbit EN=P32; /1602的使能控制端sbit key1=P33; /key1sbit key2=P34; /key2/*定义系统变量*/uchar num=0,second=0,minute=0; /定义时间变量bit flag1=0,flag2=0; /定义状态标志位/*延时子程序*/void delayms(uchar x) /ms延时函数uchar y;for(;x0;x-)for(y=110;y0;y-) ;/*1602液晶驱动程序*/1602写命令程序void WriteCom(uchar COM)RS=0;EN=0;P0=COM;delayms(5);EN=1;d

21、elayms(5);EN=0;/1602写数据程序void WriteData(uchar x,uchar y,uchar DATA)if(x=1)WriteCom(0x80+y-1);if(x=2)WriteCom(0x80+0x40+y-1); /向1602写坐标信息RS=1;EN=0;P0=DATA;delayms(5);EN=1;delayms(5);EN=0;/*键盘扫描程序*/void keyscan() if(key1=0)/判断key1是否被按下delayms(20); /延时消抖if(key1=0)/判断key2是否被按下flag1=1; /key1被按下,进入采样状态TR0

22、=TR0; /开始/暂停计时if(flag2=1) /判断上一个状态是否为回放状态flag2=0;num=0;second=0;minute=0; /时间信息清零while(!key1);/等待key1松开if(key2=0)/判断key2是否被按下delayms(20); /延时消抖if(key2=0) /判断key2是否被按下flag2=1; /key2被按下,进入回放状态TR0=TR0; /开始/暂停计时if(flag1=1) /判断上一个状态是否为采样状态flag1=0; /采样状态标志位清零num=0;second=0;minute=0; /时间信息清零while(!key2); /

23、等待key2松开/*1602液晶显示时间程序*/void display()WriteData(1,6,minute/10+0);WriteData(1,7,minute%10+0); /向1602写分钟信息WriteData(1,8,:);WriteData(1,9,second/10+0);WriteData(1,10,second%10+0); /向1602写秒钟信息WriteData(1,11,:);WriteData(1,12,num/10+0);WriteData(1,13,num%10+0); /向1602写ms信息/*系统初始化程序*/void Initial() TMOD=0

24、x01; /定义定时器工作方式ET0=1; /开定时器0的中断EA=1;/开总中断TH0=(65536-50000)/256;TL0=(65536-50000)%256;/给定时器0装初值TR0=0;/关定时器0RW=0;/1602液晶读写端清零WriteCom(0x38);WriteCom(0x0c);WriteCom(0x06);WriteCom(0x01);/清屏WriteData(1,1,T); /在1602上显示字符“T”WriteData(1,2,I); /在1602上显示字符“I”WriteData(1,3,M); /在1602上显示字符“M”WriteData(1,4,E);

25、/在1602上显示字符“E”WriteData(1,5,:); /在1602上显示字符“:”WriteData(2,1,S); /在1602上显示字符“S”WriteData(2,2,P); /在1602上显示字符“P”WriteData(2,3,E); /在1602上显示字符“E”WriteData(2,4,E); /在1602上显示字符“E”WriteData(2,5,D); /在1602上显示字符“D”WriteData(2,6,:); /在1602上显示字符“:”WriteData(2,11,K); /在1602上显示字符“K”WriteData(2,12,B); /在1602上显示字

26、符“B”WriteData(2,13,/); /在1602上显示字符“/”WriteData(2,14,S); /在1602上显示字符“S”/*主程序*/void main()uint x=0xE000; /定义SRAM地址变量uint max;uchar temp; /定义系统临时变量Initial(); /系统初始化while(1)keyscan();display();x=0xE000; /将地址清零 while(flag1=1)/采样循环 if(TR0=1)/判断是否正在进行采样ADC0804=0xff;/将口置1,启动ADdelayms(1);/延时temp=ADC0804;/读取A

27、D转换的数据XBYTEx=temp; /将AD转换的数据存入SRAM中x+;max=x; /地址加1if(x=0xFFFF) /判断SRAM的地址范围x=0xE000;WriteData(2,7,1);WriteData(2,8,.);WriteData(2,9,0);WriteData(2,10,0); /显示采样率keyscan(); /键盘扫描display(); /显示时间x=0xE000; /将地址清零WriteData(2,7, );WriteData(2,8, );WriteData(2,9, );WriteData(2,10, ); /清空采样率显示区域while(flag2=

28、1) /回放循环 if(TR0=1) /判断是否正在进行回放 temp=XBYTEx; /从SRAM中读取数据 x+; /6264地址加1 if(x=max) /判断地址范围 x=0xE000; TR0=0; DAC0832=temp; /将SRAM中读取的数据进行DA转换delayms(1);keyscan(); /键盘扫描程序 display(); /显示时间程序 /*定时器0中断程序*/void timer0() interrupt 1TH0=(65536-10000)/256;TL0=(65536-10000)%256; /给定时器0装初值,定义时间精度为0.01snum+; /计数器

29、加1if(num=100)/判断1s时间是否到num=0; /计数器清零second+; /秒加1if(second=60) /判断1分钟是否到second=0; /秒清零minute+; /分钟加1if(minute=60) /判断1小时是否到minute=0; /分钟清零第四部分 仿真测试第五部分 实验小结和体会 本次课程设计的题目是基于简单CPU的LCD录音显示回放的设计。因为我们前面的课程没有学习过单片机,所以这次课程设计对我的挑战很大。拿到题目以后,通过在图书馆的书籍查阅和网上资料阅读,初步了解了单片机的基础知识以及单片机通信功能的使用,学到了许多平时课程上没有学到的知识。这次设计的重点在于数据的发送与接收,通过对单片机中的通信寄存器SBUF的读写来进行数据传输。通过发送函数和main函数中的接收函数将数据存储并显示出来。另一个实验的重点就是录音回放的设计。当然在实验中遇到了不少难题,尤其是在第一次检查的时候老师对波形的要求我们没有达到。经过思考、修改、调试,终于实现了波形完全输出的要求,这种锻炼是有很意义的,很让人成长的。我希望自己不管在以后的学习还是实验设计中都要有这种不懈改正自己错误的态度。谢谢软件课程设计(proteus)的老师的指点和帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号