南邮 基于8255的8LED显示语音播放机设计
南邮微机原理实验报告
微机原理硬件实验报告实验一 I/O 地址译码一、实验目的1、掌握 I/O 地址译码电路的工作原理。
二、实验内容及原理实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。
译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,…… 当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。
根据图1-1,我们可以确定A9~A3,AEN,IOW,IOR的值。
要使译码电路正常工作,必须使处于低电平有效。
因而可以确定A6=A8=0,A7=A9=1,AEN=0,IOW与IOR不可同时为1(即不能同时读写)。
当要从Y4输出低脉冲时,A5A4A3=100;从Y5输出时,A5A4A3=101。
综上所述,Y4输出时,应设置值2A0H(A9~A0=1010100000B);Y5输出时,应设置值2A8H(A9~A0=1010101000B)。
执行下面两条指令MOV DX,2A0HOUT DX,AL(或IN AL,DX)Y4输出一个负脉冲到D触发器的CLK上,因为D=1(接了高电平+5V),所以Q被赋值为1.延时一段时间(delay);执行下面两条指令;MOV DX,2A8HOUT DX,AL(或IN AL,DX)Y5输出一个负脉冲到CD,D触发器被复位,Q=0。
再延时一段时间,然后循环上述步骤。
利用这两个个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。
三、硬件接线图与软件流程图硬件接线:Y4/IO 地址接 CLK/D 触发器Y5/IO地址接 C/D触发器D/D触发器接 SD/D角发器接+5VQ/D触发器接 L7(LED灯)或逻辑笔软件流程图:四、源程序OUTPORT1 EQU 2A0H ;预置,方便修改OUTPORT2 EQU 2A8HCODE SEGMENTASSUME CS:CODESTART: MOV DX,OUTPORT1 ;根据原理图设定A9~A0 的值(Y4)OUT DX,AL ;让译码器Y4 口输出一个负脉冲CALL DELAY ;延时MOV DX,OUTPORT2 ;根据原理图设定A9~A0 的值(Y5)OUT DX,AL ;让译码器Y5 口输出一个负脉冲CALL DELAY ;延时MOV AH,1 ;调用1 号DOS 功能,等待键盘输入INT 16HJE START ;若有键盘输入则退出程序,否继续循环MOV AH,4CHINT 21HDELAY PROC NEAR ;延时子程序MOV BX,200 ;时延长度 (200)A: MOV CX,0B: LOOP BDEC BXJN E ARETDELAY ENDPCODE ENDSEND START五、实验结果LED 灯处于闪烁状态,键盘有输入后,成功退出。
基于8255和8253的数字时钟模型设计研究
基于8255和8253的数字时钟模型设计研究作者:鲍鹏孙常东高珩邱烨来源:《硅谷》2009年第18期[摘要]向读者介绍一种用FDSJ86/88电子实验箱实现的电子数字时钟系统。
通过采用汇编语言进行软件编程,结合FDSJ86/88电子实验箱的硬件支持环境,实现电子时钟的基本功能,如时间的设置、时间的显示以及闹钟功能的设定与报警等功能。
揭示电子时钟的工作原理,有助于加深对电子时钟原理的了解与认识。
[关键词]电子时钟 FDSJ86/88 汇编语言模块分解中图分类号:TP2文献标识码:A文章编号:1671-7597(2009)0920039-01一、设计背景电子时钟在我们日常生活中有着及其广泛的应用,无论在人们的工作,学习还是生活中,电子时钟都发挥这不可或缺的作用。
在很多场所都可以看到电子时钟的身影。
为了实现电子时钟时间设置,时间显示,以及能够正确无误的运行,本文采用用硬件软件相结合的方式来完成此次电子时钟设计。
我们为电子时钟设计三个功能:时间的设置和时间的显示以及闹钟功能的设定与报警。
时间的设置是通过汇编程序来完成的,我们可以根据不同的需求设置不同的时间,并通过显示器进行显示。
二、需求分析在电子时钟的设计过程中,我们需要用到的电子芯片主要有8255和8253。
他们的工作原理和功能如下所示。
(一)8253芯片Intel8253芯片是一种可编程定时器/计数器,它可以利用硬件电路和中断方法控制定时,定时时间和范围完全由软件来确定和改变。
在8253芯片内部具有3个独立的16位计数器通道,通过对它进行编程,最高计数频率能达到2MHz。
8253还适用于许多其它的场合,如用作可编程方法频率产生器、分频率、程控单脉冲发生器等。
在本课程设计中,8253芯片的通道0和通道1工作在方式2下,提供一秒的脉冲信号,通道2工作在方式3下,进行秒的计数。
(二)8255A芯片8255A是一种通用的可编程并行I/O接口芯片,它是为Intel系列微处理器设计的配套电路,也可用于其它微处理器系统连接。
8255LCD函数信号发生器
课程设计报告课程名称51单片机课程题目基于8255的LCD显示函数信号发生器的设计专业通信工程班级学号姓名同组人指导单位南京邮电大学通达学院指导教师林建中第一部分实验目的及要求1、实验目的⑴掌握Proteus对MCS51单片机的仿真⑵学习汇编语言以及C语言在51编程上的使用⑶掌握使用Keil软件对51单片机编程根据提供的参考工程,在Proteus平台自己重新画出实验所需要的电气原理图,并在此基础上编写相对应的程序,实现其功能,学习Proteus软件的使用,其中包括原理图器件的选取、原理图的电气连接、程序的编写编译以及运行,并能查出其错误等。
2、实验设备硬件:微机(WindowsXP)软件:Proteus 7.4 sp3,Keil uVersion 33、实验基本要求基本要求:⑴用存储器或算法得到信源。
⑵用DA转换器输出一函数信号(正弦、方波、三角、锯齿等,频率1000Hz),可以用示波器进行波形观察。
⑶用LCD显示输出参数。
⑷用功能键切换各信号的输出。
动态显示格式:自定第二部分实验工具及实验器件1、Proteus 以及Keil 软件的介绍Proteus 是英国Labcenter 公司开发的电路及单片机系统设计与仿真软件。
Proteus可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能。
Proteus是目前唯一能对各种处理器进行实时仿真、调试与测试的EDA工具,真正实现了在没有目标原型时就可对系统进行调试、测试和验证。
Proteus 软件大大提高了企业的产品开发效率,降低了开发风险。
由于Proteus软件逼真、真实的协同仿真功能,它也特别适合于作为配合单片机课堂教学和实验的学习工具。
Proteus 软件提供了30多个元器件库、7000余种元器件。
元器件涉及电阻、电容、二极管、三极管、变压器、继电器、各种放大器、各种激励器、各种微控制器、各种门电路和各种终端等。
8255扩展课程设计
8255扩展课程设计一、教学目标本课程的教学目标是使学生掌握8255扩展芯片的基本原理、使用方法和编程技术,能够独立完成基于8255扩展芯片的简单系统设计。
1.了解8255扩展芯片的内部结构、工作原理和引脚功能。
2.掌握8255扩展芯片的编程方法,包括I/O指令和中断控制。
3.掌握基于8255扩展芯片的系统设计方法和步骤。
4.能够使用8255扩展芯片完成简单的输入输出操作。
5.能够编写基于8255扩展芯片的程序,实现数据的采集、处理和显示。
6.能够进行基于8255扩展芯片的系统设计和调试。
情感态度价值观目标:1.培养学生的创新意识和实践能力,提高他们对计算机硬件编程的兴趣。
2.培养学生团队合作精神,使他们能够积极参与小组讨论和项目实践。
二、教学内容本课程的教学内容主要包括8255扩展芯片的基本原理、使用方法和编程技术。
1.8255扩展芯片的基本原理:介绍8255扩展芯片的内部结构、工作原理和引脚功能,使学生了解其工作原理和应用场景。
2.8255扩展芯片的使用方法:讲解8255扩展芯片的编程方法,包括I/O指令和中断控制,使学生能够掌握其使用方法。
3.基于8255扩展芯片的系统设计:介绍基于8255扩展芯片的系统设计方法和步骤,使学生能够独立完成简单的系统设计。
三、教学方法本课程的教学方法主要包括讲授法、讨论法和实验法。
1.讲授法:通过讲解8255扩展芯片的基本原理、使用方法和编程技术,使学生掌握相关知识。
2.讨论法:通过小组讨论和项目实践,培养学生的创新意识和实践能力,提高他们对计算机硬件编程的兴趣。
3.实验法:通过实验室实践,使学生能够动手操作,加深对8255扩展芯片的理解和掌握。
四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用《计算机组成原理》等教材,为学生提供系统性的理论知识。
2.参考书:提供《8255扩展芯片编程与应用》等参考书,为学生提供丰富的实践案例。
论文利用8254设计音乐播放器设计报告
利用8254设计音乐播放器程兴安庆师范学院物理与电气工程学院安徽安庆 246011指导老师:刘娟摘要:本课题主要是通过汇编语言用软件编程的方法实现简单的音乐播放功能。
通过在《微机原理与接口技术》课程上所学的汇编知识和8253/8254芯片相关知识,用汇编程序完成键控音乐播放的,用8253/8254定时器来产生声音。
8254和8255是计算机中经常使用的两块芯片,在计算机中担负着相当重要的作用,8254用作计数器,8255可作为接口芯片。
这两块芯片可以通过汇编语言编程写入,改变它们的工作状态,实现某些特别的功能。
本文即是通过对它们的编程实现对计算机扬声器的控制,利用硬件直接播放音乐。
该播放器有若干首歌曲可以选择,开始时输出说明,要用户选择要播放的歌曲,然后根据用户按键进行播放、退出或出错提示关键词:汇编语言,音乐播放器,8253/8254定时器一、课程设计的目的和意义利用8254作为音阶频率发生器,应先对至少两段音乐进行编码后存入音符表,并建立好音阶表,每段音符长度不能少于60个,每首连续播放3遍后,自动播放下一段音乐,几段音乐播完后,循环播放,直到有键盘输入任意字符时停止,并且使用8255作为控制开关的并行输入接口,输入开关选择的音乐控制信号。
通过对电子音乐播放器的设计,从电路到汇编代码,再到对程序的调试,有助于对这些接口芯片的工作原理的理解。
同时在调试过程中对不同音阶进行调试,加深了对发声原理的理解与掌握。
从8286CPU到8255并行接口再到8254可编程计数器的使用原来和连接方法进行深入的学习,关于8255和8254相应的程序控制字进行了理解与掌握,基本熟悉了其相关的用法,在把理论知识用在了实际问题的解答之中,进一步学会了怎么将理论与实践结合起来解决问题。
二、基础理论知识2.1、8254功能1、内部结构:如图1所示,8254内部包含数据总线缓冲器、读/写控制逻辑、控制字寄存器和3个结构完全相同的计数器,这三个计数器分别称为计数器0,计数器1和计数器2。
南邮设计 基于CPU的8LED温度显示控制器的设计的程序
#include <reg52.h>#include <intrins.h>#include <string.h>#include <stdio.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define Self_Define_ISP_Download_Command 0x3D#define pb XBYTE[0xff7d]#define pa XBYTE[0xff7c]#define ps XBYTE[0xff7f]sfr IAP_CONTR=0xE7;sbit DQ = P3^5; //DS18B20接入口uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ;//0123456789 uchar send[8];uchar pos[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};char i,bai,shi,ge; //定义变量void Init_Com(void){TMOD = 0x20;SM0=0;SM1=1;REN=1;TH1 = 0xFd;TL1 = 0xFd;TR1 = 1;EA=1;ES=1;}/*延时子函数*/void delay(uint num){while(num--) ;}/*************DS18b20温度传感器函数*********************/Init_DS18B20(void) //传感器初始化{uchar x=0;DQ = 1; //DQ复位delay(10); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于480us //450DQ= 1; //拉高总线delay(20);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(30);}//读一个字节ReadOneChar(void){uchar i=0;uchar dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80;delay(8);}return(dat);}//写一个字节WriteOneChar(unsigned char dat){uchar i=0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01;delay(10);DQ = 1;dat>>=1;}delay(8);}//读取温度int ReadTemperature(void){uchar a,b;float tt;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay(150);Init_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度a=ReadOneChar();//低位b=ReadOneChar();//高位tt=(b*256+a)*0.0625*100;//2个8位合成16位t=(int)tt;/*t=b;t<<=8;t=t|a;tt=t*0.0625;t= tt*10+0.5; */return(t);}/*显示子函数*/void display(){int temp,bai,shi,ge;uchar led_bai,led_shi,led_ge;temp=ReadTemperature();//读温度bai=temp/1000;//显示百位shi=temp%1000/100;//显示十位ge=temp%100/10;//显示个位led_bai=table[bai];led_shi=table[shi];led_ge=table[ge];led_shi=led_shi|0x80;send[0]=led_bai;send[1]=led_shi;send[2]=led_ge;send[3]=0x63;send[4]=0x39;send[5]=0x00;send [6]=0x00;send[7]=0x00;ps=0x80;for(i=0;i<8;i++){P2=pos[i];//传送的位置P0=send[i];//传送的数字delay(500);//防止程序发生错误delay(5);// delay(50);}void main(){Init_Com();//初始化while(1){//ReadTemperature(); display();//显示函数}}。
南邮《光电综合设计》报告2..
课程设计报告B01060702 邓心惟A 类:课题2.设计任务:有一平面镜和曲率半径为R 的凹面镜,画出光束发散角与腔长L 的关系曲线。
一.课题要求:1. 有输入输出界面;2. 可输入不同凹面镜曲率半径值,查看结果。
参考:《激光原理》第二章二.课题分析及设计思路:1.问题分析:根据激光原理,一般稳定球面腔基模远场发散角为:12212402121212121241212(2)2[]()()()[2]{}(1)L R R L R L R L R R L g g g g g g g g λθπ--=--+-+-=-其中L 为腔长,R 为半径又由课题条件,为平-凹腔,故1R =∞ 可简化公式为:21/40222[]()L R L λθπ=-其中变量为L ,2R ,λ,常量为π2.设计思路:要求发散角与腔长L 的的关系,即需要给定2R ,λ的值,2R 要求根据输入确定,而λ可以为程序内含或者外部输入。
考虑到一般激光器的波长不是任意值,而为了使设计单元体现不同波长对发散角的影响,这里利用分离选择项作为波长输入,一般我们使用的激光器为CO 2激光器,波长10.6um ;氦氖激光器,波长632.8nm 。
因此选择支为两个。
采用MATLAB 用户界面(GUI )工具设计,输入变量为两个,R 为编辑输入,单位cm ,缺省值1m ;波长为选择输入,10.6um 或者632.8nm ,缺省值为10.6um 。
三.模型创建与编程:本题较为直观,除了在MATLAB 设计中注意矩阵元与数值的差别外,没有难点。
直接给出相应处理的程序部分:global r;r=str2double(get(hObject,'String'));% r为半径变量,从界面处获得输入半径值global bochang;contents = get(hObject,'String');bochang=str2double(contents{get(hObject,'Value')});% bochang为波长变量,从界面处获得输入波长值,因为设计实现时直接选择的就%是波长值,因此直接将其转化成双精度值即可。
基于8255的8LED显示的动态显示器
南京邮电大学学年第学期课程设计实验报告题目基于8255的8LED显示的动态显示器专业通信工程学号姓名指导老师实验日期年月日题目:基于8255的8LED显示的动态显示器一,实验目的和要求1,Proteus软件的MCS51单片机仿真学习2,根据提供的参考工程,在proteus平台自己重新设计实验电路所需要的电器原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取,原理图的电气连接,程序的编写编译以及运行,并能查出其错误等。
基本要求:1. 用数码管正常显示数字“12345678”。
2. 通过按键可改变显示方式。
3. 设计显示屏的动态效果,用10个按键,每键对应一种滚动技术。
4. 基于8255口是指显示和键盘都由8255的IO口控制发挥部分:1 设计所有动作的联合效果。
2 设计二个变速按键,可多级改变滚动速度。
3 设计一台魔术电子钟,采用自动变换,随机组合,数据每10秒变换一次。
动态显示格式:1 静止2 整体闪烁3 单字闪烁4 整体向前、向后滚动5 单字移动6 两边向中间压缩7 中间向两边扩张8 上下压缩9 文字上下滚动10组合动作(每一字符执行上述一个动作,并同时运动)二,实验仪器微型计算机三,实验原理基于8255的8LED显示的动态显示器,是由8255a做键盘控制口连接c51,并驱动8位7段数码管实现相应显示功能。
具体的,c51,p1口直接进行led数码管的位控制;p2口经74HC573译码后控制8255a的片选与内部奇存器选择;p0口连接8255a的D端口,并由它的PA口驱动7段led, PB口连接键盘,并做为I/O口与c51通信,以实现相应显示变化。
四,基本原件及其原理单片机微型计算机简称单片机,是指在一块芯片体上集成了中央处理器CPU、随机存储器RAM、程序存储器ROM或EPROM、定时器/计数器、中断控制器以及串行和并行I/O接口等部件,构成一个完整的微型计算机。
8255电子钟课程设计
8255电子钟课程设计一、课程目标知识目标:1. 理解8255可编程定时器/计数器的工作原理,掌握其在电子时钟设计中的应用。
2. 学会使用8255芯片与微控制器(如8051)的接口技术,并能正确编程控制电子钟的时、分、秒显示。
3. 掌握电子时钟的时间计数与显示的基础算法,能够运用所学知识设计简单的电子时钟程序。
技能目标:1. 培养学生动手能力,通过搭建8255电子时钟电路,提高学生的电路连接与调试技巧。
2. 培养学生编程能力,让学生能够独立编写8255控制电子时钟的程序代码,并实现功能。
3. 培养学生问题解决能力,面对电子时钟设计中的问题,能够进行故障排查和程序优化。
情感态度价值观目标:1. 培养学生对电子技术和编程的兴趣,激发学生的学习热情和创新精神。
2. 培养学生团队协作精神,通过小组合作完成课程设计,增强集体荣誉感和责任感。
3. 培养学生科学严谨的态度,在设计过程中注重细节,遵循操作规程,确保安全与可靠性。
本课程针对高年级电子信息技术或计算机科学与技术相关专业学生,结合教材内容,注重理论联系实际,旨在提高学生电子电路设计、编程及实际应用能力。
课程目标明确、具体,可衡量,为后续教学设计和评估提供依据。
二、教学内容本课程教学内容紧密围绕课程目标,结合教材以下章节:1. 8255可编程定时器/计数器原理与功能- 8255芯片内部结构- 工作模式及时序分析- 接口技术及其在微控制器中的应用2. 电子时钟基础知识- 电子时钟原理概述- 时、分、秒计数与显示方法- 电子时钟程序设计基础3. 8255电子时钟设计与实现- 电路设计与搭建- 程序编写与调试- 故障排查与优化教学内容安排与进度:第一周:8255可编程定时器/计数器原理学习,接口技术了解。
第二周:电子时钟基础知识学习,程序设计基础掌握。
第三周:分组讨论,确定电子时钟设计方案,开始电路搭建与程序编写。
第四周:电路调试,程序优化,完成8255电子时钟设计。
8255应用课程设计
8255应用课程设计一、课程目标知识目标:1. 理解并掌握8255可编程并行接口芯片的基本工作原理及应用方法;2. 学习8255芯片在微机接口电路中的应用,并能结合具体实例进行分析;3. 掌握8255芯片与其他接口设备的连接方式,了解其接口特性。
技能目标:1. 能够正确运用8255芯片进行简单的接口电路设计,实现数据输入/输出功能;2. 学会利用8255芯片进行并行通信,具备实际操作和调试能力;3. 能够针对实际问题,运用所学知识进行接口电路设计和调试,提高解决问题的能力。
情感态度价值观目标:1. 培养学生对待科学技术的严谨态度,激发学生对电子技术的兴趣和热情;2. 培养学生的团队协作精神,学会与他人共同分析问题、解决问题;3. 增强学生的创新意识,鼓励学生勇于尝试,提高学生的实践能力。
课程性质:本课程为电子技术专业课程,以实践性为主,注重理论与实践相结合。
学生特点:学生已具备一定的电子技术基础,具有较强的学习能力和动手能力。
教学要求:教师应引导学生掌握8255芯片的基本原理和应用方法,注重培养学生的实践操作能力和创新能力。
在教学过程中,关注学生的学习进度,确保课程目标的实现。
通过课程学习,使学生能够将所学知识应用于实际问题的解决中。
二、教学内容本课程教学内容主要包括以下几部分:1. 8255可编程并行接口芯片基本原理:介绍8255芯片的结构、工作模式、控制字等基本概念,使学生掌握8255芯片的基本原理。
教材章节:第二章第五节“8255可编程并行接口芯片”2. 8255芯片的应用实例:分析8255芯片在微机接口电路中的应用,如键盘输入、LED显示等,帮助学生了解8255芯片在实际电路中的应用。
教材章节:第二章第六节“8255芯片的应用实例”3. 并行通信原理及接口设计:讲解并行通信的原理,以及8255芯片在并行通信中的应用,指导学生进行接口电路设计。
教材章节:第三章第一节“并行通信原理及接口设计”4. 8255芯片与其他接口设备的连接:分析8255芯片与其他接口设备的连接方法,如ADC、DAC等,拓展学生的知识面。
微机课程设计8255
微机课程设计8255一、课程目标知识目标:1. 让学生理解并掌握8255可编程并行接口芯片的基本工作原理。
2. 让学生掌握8255芯片的编程控制方法,包括控制字的理解与设置。
3. 使学生能够运用8255芯片实现数据的输入/输出功能,理解并行通信的概念。
技能目标:1. 培养学生运用8255芯片进行微机接口设计的实践能力。
2. 培养学生阅读并理解8255相关的技术文档,提高学生的技术资料检索与应用能力。
3. 通过课程实验,提高学生的问题分析和解决能力,加强团队协作和动手操作技能。
情感态度价值观目标:1. 培养学生对微机接口技术的兴趣,激发学生主动探索微机硬件知识的热情。
2. 增强学生对技术学习的自信心,培养学生面对复杂问题时积极乐观的态度。
3. 强化学生的工程伦理观念,认识到科技发展对社会的责任和影响。
分析课程性质、学生特点和教学要求,本课程目标具体、明确,旨在通过理论讲解与实践操作相结合的方式,使学生在掌握8255接口芯片知识的同时,能够将所学应用于实际的微机接口设计之中。
课程目标分解为具体的学习成果,便于通过课堂讲解、实验操作、项目设计等教学活动,进行有效的教学设计和学习成果的评估。
二、教学内容根据课程目标,本章节教学内容主要包括以下部分:1. 8255芯片基础知识:- 8255芯片的结构与功能- 8255芯片的工作模式- 8255芯片的控制字设置2. 8255芯片编程控制:- 编程控制的原理与方法- 8255芯片的初始化编程- 8255芯片的数据输入/输出编程3. 并行通信原理与应用:- 并行通信的基本概念- 8255芯片在并行通信中的应用实例- 并行通信的接口设计4. 实践操作与课程设计:- 8255芯片的接口电路设计- 课程设计项目:基于8255的并行通信系统设计- 实践操作:8255芯片的编程与调试教学内容依据教材章节进行安排,具体包括:- 教材第3章第2节:8255可编程并行接口芯片- 教材第4章第1节:并行通信接口设计- 教材第4章第3节:8255编程及应用实例教学进度按以下顺序进行:1. 理论讲解:8255芯片基础知识及编程控制(2课时)2. 实践操作:8255芯片的初始化编程与调试(2课时)3. 理论讲解:并行通信原理及8255在并行通信中的应用(1课时)4. 实践操作:并行通信系统设计课程设计(3课时)教学内容具有科学性和系统性,结合理论教学与实践操作,旨在帮助学生扎实掌握8255接口芯片的相关知识,并能够应用于实际项目设计中。
基于8255的8LED显示录音回放机设计报告
通信与信息工程学院2016/2017学年第二学期软件设计实验报告模块名称51单片机的软件设计专业通信工程学生班级学生学号学生姓名指导教师梅霆林建中叶玲报告内容一、设计要求本软件课程设计是在理论课程的基础上,重点培养学生的动手能力,通过理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作。
在此基础上根据实验大纲提供的题目,任选一题,实现其功能。
有能力的同学可以超出题目要求发挥设计。
根据提供的参考工程,在proteus平台自己重新画出实验所需要的电气原理图,并在此基础上编写相对应的程序,实现其功能,学习proteus软件的使用,其中包括原理图器件的选取、原理图的电气连接、程序的编写编译以及运行,并能查出其错误等。
发挥部分在完成本人选题的前题下,具有新内容的自主发挥,并取得良好效果。
录音机类实验中需要录取的信源,可以用单片机或者信号发生器产生。
基本要求:1 把需要录取的信号用AD转换器采样并存储在SRAM中。
2 在一组数码管或LCD上显示采样速率和录音时间(秒),以及信号相关参数。
3 用D/A转换器回放录音信号,通过喇叭过模拟示波器显示。
4 在一组数码管或LCD上显示回放的播放时间或信号强度。
发挥部分:1 用功能键可分别设定录音和放音的采样速率。
2 多段录音管理。
3 任意组合播放。
动态显示格式:自定二、设计流程图键盘流程图三、设计原理(一)Proteus以及Keil软件使用方法(1)ProteusProteus提供了30多个元器件库、7000余种元器件。
可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能。
(2)Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
应用Keil进行软件仿真开发的主要步骤为:①编写源程序并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;②选择菜单Project-New Project…,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);③工程保存后会立即弹出一个设备选择对话框,选择CPU(89c51)后点确定返回主界面;④工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开;⑤选择Source Group1,右击鼠标弹出快捷菜单,选择“Add File to Group ‘Source Group1’”;⑥出现一个对话框,加入之前编写好的源文件,点close返回主界面;⑦展开“Source Group1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件;⑧选择工程管理窗口的Target1,再选择Project-Option for Target‘Target1’(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框;⑨在Output选项卡中选中“Creat Hex Fi”;⑩工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。
8255LCD 动态显示4X4键盘
南京邮电大学通达学院课程设计实验报告实验名称基于8255的LCD显示的动态显示器设计班级 080061 学号 08006129 姓名 _ 卓晓寒 _ _ ______ 指导老师 ___ 林建中 _____ ______ 开课时间 2011/2012学年,第一学期 _基于8255的LCD动态显示器设计一、设计要求能够学会利用Proteus软件的MCS51单片机仿真学习,根据提供的参考工程,在Proteus平台自己重新设计实验电路所需要的电气原理图,并在此基础上编写相对应的程序,实现其功能,学习Proteus软件的使用,其中包括原理图器件的选取、原理图的电气连接、程序的编写编译以及运行,并能查出其错误等。
二、实验内容设计一基于8255的LCD动态显示器三、实验要求1.用数码管或LCD正常显示数字“12345678”。
2.通过按键可改变显示方式。
3.设计显示屏的动态效果,用10个按键,每键对应一种滚动技术。
另注,实验发挥部分:1.设计所有动作的联合效果。
2.设计二个变速按键,可多级改变滚动速度。
3.设计一台魔术电子种,采用自动变换,随机组合,数据每10秒变换一次。
动态显示格式:0.静止1.整体闪烁2.单字闪烁3.整体向前、向后滚动4.单字移动5.两边向中间压缩6.中间向两边扩张7.上下压缩8.文字上下滚动9.组合动作(每一字符执行上述一个动作,并同时运动)四、实验仪器及实验环境(1)586微型计算机系统(2)proteus仿真软件(3)MEDWIN软件(4)单片机开发系统五、设计思路根据实验给出的要求,我们选择了LM016LLCD进行动态显示。
并通过按键切换不同的功能,来达到分别显示各种要求的动态效果。
实验要求进行检控式LCD动态显示。
定时器T0作为每0.01秒加一的定时器;题目中的要求是用十种动态效果,由于本人对单片机研究肤浅加之有直接可以输入的p1端口。
故将监控调为八种功能,对应的分别为:0.静止1.整体闪烁2.单字闪烁3.整体向前、向后滚动4.单字移动5.两边向中间压缩6.中间向两边扩张7.上下压缩8.文字上下滚动9.组合动作(每一字符执行上述一个动作,并同时运动)六、实验过程本次课程设计是在理论课程的基础上,目的在于培养我们的动手能力,通过电路设计、理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,并可能结合实际的实验板进行下载测试。
南京邮电大学 通达学院 51 protues 课程设计 简易电子琴 实验报告
通达学院2013 /2014 学年第一学期课程设计II实验报告模块名称PROTEUS51专业学生班级学生学号学生姓名指导教师一、本系统的目的本系统设计制作一个可演奏的电子琴。
综合应用了两项设计。
(1)键盘矩阵识别,通过按键控制播放14个音阶并显示。
(2)通过控制开关完成事先写入歌曲的播放。
二、主要芯片简介AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
8255是常用的扩展单片机IO资源的芯片,8255原理是只利用单片机的一个并行口来扩展出几个并口,使得单片机可以接入更多的设备三、系统组成本系统只要以51单片机为主控核心,8255IO外扩、与矩阵键盘、扬声器、LED显示管模块一起组合而成。
具体如下:四、系统工作原理本系统扫描键盘矩阵、显示当前状态及音阶、扬声器发出对应音符或音乐。
4X4行列式非编码键盘:键盘只简单地提供按键开关的行列矩阵。
有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。
行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。
南邮 基于8255的8LED显示语音播放机设计
南邮基于8255的8LED显示语音播放机设计设计名称:基于8255的8LED显示语音播放机设计一、设计要求实验中需要的信源,可以通过处理一段WAV文件,将其变为一段数据表进行实验。
基本要求:1 将处理过的数据通过单片机进行存储(信号固化)。
2 用D/A转换器回放存储的信号。
3 通过模拟示波器显示回放的波形。
4 在数码管或LCD上显示回放波形的参数(最大/最小幅值,波形播放时间)。
发挥部分:1 在实验允许的条件下,采用更灵活的存放方法。
2 多段信源管理和播放。
动态显示格式:自定二、设计原理声音文件已经放在程序里面,一开始运行,首先将程序里面的声音数据转存储到SRAM 里,也就是6264里,显示的话,可以显示出播放时间,和数据的最大值和最小值,最大值和最小值是自动进行切换的,1秒为间隔,从SRAM读取数据,进行DA转换就可以看出波形了。
三、设计过程流程图如下:开始显示分钟显示“:” 显示秒钟显示“:” 显示10ms 结束显示流程图开始初始化 N 有键按下? Y 开始系统初始化键盘扫描显示时间 N 延时消抖Key1按下? Y Flag1=1 开始A/D 时间清零 N Flag1 = = 1 Y A/D转换储存数据 KEY1按下? Y N Flag2=1 开始D/A 时间清零 N Flag2 = = 1 Y 读取数据 D/A转换结束系统主流程图键盘流程图对应的C语言程序如下:/*************基于8255的8LED显示语音播放机设计程序**********************/ #include #include/***********************************宏定义**********************************/ #define uint unsigned int #define ucharunsigned char/*****************************芯片端口地址定义*****************************/#define COM8255 XBYTE[0X7FFF] //8255的命令口 #define PA8255XBYTE[0X1FFF] //8255的PA #define PB8255 XBYTE[0X3FFF] //8255的PB#define PC8255 XBYTE[0X5FFF] //8255的PC #define DAC0832 XBYTE[0XEFFF]//DAC0832口uchar dis_buf[]={0xc0,0x40,0xc0,0xff,0xc0,0x40,0xc0,0xc0};//数码管显示缓存,格式为MM-NN-SSuchar code du_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, };//8段共阳极数码管显示码值uchar code bit_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//数码管显示的位值 /*********************************系统引脚定义******************************/ sbit key1=P3^0; //key1 sbit key2=P3^1;//key2 sbit CON=P3^3; //74HC573的锁存端/*********************************定义系统变量*****************************/ uchar num=0,second=0; //定义时间变量 bitflag1=0,flag2=0; //定义状态标志位 uchar count;uchar max=0,min=0; //定义幅值的最大值和最小值 uint m_x=0xe000;uchar code music[]={0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03, 0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02,0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02,0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66,0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00,0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03,0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02,0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03,0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03,0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66,0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03,0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01,0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02,0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70,0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66,0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02,0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C,0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66,0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00,0x00,0x00}; //两只蝴蝶/****************************延时子程序*******************************/void delayms(uchar x) //ms延时函数{ uchar y; for(;x>0;x--) for(y=110;y>0;y--) ; }/************************键盘扫描程序*****************************/ voidkeyscan() { if(key1==0) //判断key1是否被按下 { delayms(20); //延时消抖 if(key1==0) //判断key2是否被按下 { if(flag1==1){ if(m_x<0xFffe) TR0=~TR0; //计时开关取反 } } while(!key1);//等待key1松开 }if(key2==0) //判断key2是否被按下 { delayms(20); //延时消抖if(key2==0) //判断key2是否被按下 { flag1=~flag1; //状态标志位取反 if(flag1==1) TR0=1; else TR0=0; //计时开关 num=0;second=0; max=0; min=0; m_x=0xe000; } while(!key2); //等待key2松开 } }void trans_data() { if(flag2==0) { dis_buf[0]=du_code[max/100];dis_buf[1]=du_code[max0/10]; dis_buf[2]=du_code[max]; } else}/*************************系统初始化程序********************************/void Initial() { uint i=0; for(i=0;i<8192;i++) { XBYTE[m_x]=music[i];m_x++; } m_x=0xE000; CON=1; //锁存器地址锁存 COM8255=0x89; //定义8255的A口为输出,B口和C口为输入 CON=0; TMOD=0x11; //定义定时器的工作方式 TH0=(65536-10000)/256; TL0=(65536-10000)%6; //给T0装初值TH1=(65536-500)/256; TL1=(65536-500)%6; //给T1装初值 ET0=1;//开T0的中断 ET1=1; //开T1的中断 EA=1; //开总中断 TR0=0; //关闭T0 TR1=1; }/************************************主程序***********************************/ void main() { uchar temp; Initial(); //系统初始化 while(1) { keyscan(); trans_data();{ dis_buf[0]=du_code[min/100];dis_buf[1]=du_code[min0/10]; dis_buf[2]=du_code[min]; }dis_buf[4]=du_code[second/10];dis_buf[5]=du_code[second]&0x7f; dis_buf[6]=du_code[num/10];dis_buf[7]=du_code[num];感谢您的阅读,祝您生活愉快。
南邮微机实验报告
一、实验名称微机原理与接口技术实验二、实验目的1. 理解微机的基本工作原理和硬件组成。
2. 掌握计算机常用接口芯片的基本功能和使用方法。
3. 熟悉微机实验系统的操作流程。
4. 培养动手实践能力和分析问题、解决问题的能力。
三、实验内容1. 微机硬件系统认知- 了解微机的硬件组成,包括CPU、内存、主板、硬盘、显卡、声卡等。
- 通过实验观察微机硬件各部分的功能和连接方式。
2. 微机接口芯片实验- 学习并行接口芯片8255的使用方法和编程技巧。
- 实现键盘输入和LED显示,设计一个简单的定时显示装置。
3. 微机实验系统操作- 熟悉微机实验系统的使用方法和操作流程。
- 掌握实验软件的安装和使用。
4. 汇编语言程序设计- 学习汇编语言的基本语法和编程技巧。
- 编写简单的汇编语言程序,实现特定功能。
四、实验步骤1. 微机硬件系统认知- 观察微机硬件各部分的功能和连接方式。
- 使用实验设备观察CPU、内存、主板、硬盘等硬件的工作状态。
2. 微机接口芯片实验- 根据实验指导书,配置并行接口芯片8255。
- 编写程序实现键盘输入和LED显示功能。
- 设计定时显示装置,实现时间显示和按键控制。
3. 微机实验系统操作- 安装实验软件,熟悉实验系统的操作流程。
- 使用实验软件进行实验操作。
4. 汇编语言程序设计- 学习汇编语言的基本语法和编程技巧。
- 编写汇编语言程序,实现特定功能。
五、实验结果与分析1. 微机硬件系统认知- 通过实验观察,了解了微机硬件各部分的功能和连接方式。
- 掌握了微机实验系统的使用方法和操作流程。
2. 微机接口芯片实验- 成功实现了键盘输入和LED显示功能。
- 设计的定时显示装置能够正常工作。
3. 微机实验系统操作- 熟练掌握了微机实验系统的操作流程。
4. 汇编语言程序设计- 成功编写了汇编语言程序,实现了特定功能。
六、实验心得体会通过本次实验,我对微机原理和接口技术有了更深入的了解。
实验过程中,我学会了如何使用微机实验系统,掌握了微机接口芯片的编程技巧,提高了动手实践能力。
南邮电工电子课程设计报告
南邮电工电子课程设计报告通信与信息工程学院/ 年第 1 学期课程设计II 实验报告模块名称八只数码管动态显示单个数字专业通信工程(嵌入式系统开发)学生班级 1000学生学号 1000学生姓名指导教师报告内容摘要功能简介:1内容:利用动态扫描让八位数码管稳定的显示1、2、3、4、5、6、7、82目标:(1)掌握单片机控制八位数码管的动态扫描技术,包括程序设计和电路设计,本任务的效果是让八位数码管稳定的显示12345678。
(2)用PROTEUS进行电路设计和实时仿真3知识点链接(1)数码管动态扫描(动态扫描的定义以及与静态显示的区别)动态显示的特点是将所有位数码管的段选线s一位数码管有效。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉仿佛各位数码管同时都在显示。
(2)总线的应用元器件与总线的连线P0口的接线采用总线方式,详细如图------所示。
①选择总线按钮②绘制总线:与普通电线的绘制方法一样,选择合适的起点、终点单击。
如果终点在空白处,左键双击结束连线。
画总线的时候为了和一般的导线区分,我们一般喜欢画斜线来表示分支线。
此时我们需要自己决定走线路径,只需在想要拐点处单击鼠标左键即可。
在画斜线时,需要关闭线路自动路径功能才好绘制。
Proteus的线路自动路径功能简称WAR,当选中两个连接点后,WAR将选择一个合适的路径连线。
WAR可经过使用标准工具栏里的“WAR”命令按钮来关闭或打开,也能够在菜单栏的“Tools”下找到这个图标。
③给与总线连接的导线贴标签PART LABELS与P0口相连的线标签名依次为P00—P06,本电路中的P0口的上拉电阻经过总线与P0口相连,数码管也是经过总线与P0口相连,这些都需要标注,以表明正确的电气连接。
单击绘图工具栏中的导线标签按钮,使之处于选中状态。
将鼠标置于图形编辑窗口的欲标标签的导线上,跟着鼠标的指针就会出现一个“×”号,表明找到了能够标注的导线,单击鼠标左键,弹出编辑导线标签窗口,如图---所示。
基于8255的8LED显示电子码表设计
通达学院实验报告(2010/2011学年第一学期)题目:基于8255的8LED显示电子码表设计专业通信工程学生姓名班级学号授课教师林建中授课单位南京邮电大学日期2011年11月目录第一部分实验目的及要求:...................................................... 错误!未定义书签。
1.实验目的 ......................................................................... 错误!未定义书签。
2. 实验要求 ........................................................................ 错误!未定义书签。
第二部分实验工具及实验器件.................................................. 错误!未定义书签。
1.Proteus7.4以及Keil 2软件的使用 ................................ 错误!未定义书签。
2.51单片机AT89c51。
..................................................... 错误!未定义书签。
3.SRAM芯片6264.............................................................. 错误!未定义书签。
4.6264的操作方式 ............................................................ 错误!未定义书签。
5.可编程并行I/O接口芯片8255 A .................................. 错误!未定义书签。
6.74HC373 锁存器............................................................. 错误!未定义书签。
8255并行接口课程设计
8255并行接口课程设计一、课程目标知识目标:1. 学生能理解8255并行接口的基本原理,掌握其工作模式及编程方法。
2. 学生能掌握8255并行接口与其他外设的连接方式,了解其应用场景。
3. 学生了解并行接口与串行接口的区别,能分析并行接口的优势和局限性。
技能目标:1. 学生能运用8255并行接口进行基本的数据输入输出操作,具备一定的接口编程能力。
2. 学生能通过实验和课程设计,培养动手实践能力,提高问题解决能力。
情感态度价值观目标:1. 学生在学习过程中,培养对计算机硬件和接口技术的兴趣,激发学习热情。
2. 学生通过团队协作,培养良好的沟通能力和团队合作精神。
3. 学生认识到计算机技术在现实生活中的应用,提高对技术进步的认识,增强社会责任感。
课程性质:本课程为计算机硬件接口技术课程的一部分,强调理论与实践相结合,注重培养学生的动手能力和实际操作技能。
学生特点:学生具备一定的计算机基础知识,对硬件接口技术有一定了解,但实践经验不足。
教学要求:结合课程性质和学生特点,注重启发式教学,引导学生主动探究,提高学生的实际操作能力。
在教学过程中,注重培养学生的团队合作精神和解决问题的能力。
通过课程目标分解,使学生在掌握知识的同时,提高技能和情感态度价值观。
二、教学内容本课程教学内容主要包括以下几部分:1. 8255并行接口基本原理:讲解8255芯片的结构、工作模式、控制字等,使学生了解并行接口的基本工作原理。
2. 8255并行接口编程:介绍8255并行接口的编程方法,包括控制字配置、数据输入输出操作等,结合实例进行讲解。
3. 8255并行接口应用:分析8255并行接口在实际应用中的连接方式,如与键盘、显示器等外设的连接,了解并行接口在实际系统中的应用。
4. 并行接口与串行接口比较:分析并行接口与串行接口的优缺点,使学生了解两者在性能、应用场景等方面的差异。
教学内容安排如下:1. 第一节课:8255并行接口基本原理,包括教材第3章第1节内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计名称:基于8255的8LED显示语音播放机设计一、设计要求实验中需要的信源,可以通过处理一段W A V文件,将其变为一段数据表进行实验。
基本要求:1 将处理过的数据通过单片机进行存储(信号固化)。
2 用D/A转换器回放存储的信号。
3 通过模拟示波器显示回放的波形。
4 在数码管或LCD上显示回放波形的参数(最大/最小幅值,波形播放时间)。
发挥部分:1 在实验允许的条件下,采用更灵活的存放方法。
2 多段信源管理和播放。
动态显示格式:自定二、设计原理声音文件已经放在程序里面,一开始运行,首先将程序里面的声音数据转存储到SRAM里,也就是6264里,显示的话,可以显示出播放时间,和数据的最大值和最小值,最大值和最小值是自动进行切换的,1秒为间隔,从SRAM读取数据,进行DA转换就可以看出波形了。
三、设计过程流程图如下:显示流程图系统主流程图键盘流程图对应的C语言程序如下:/*************基于8255的8LED显示语音播放机设计程序**********************/ #include<reg52.h>#include<absacc.h>/***********************************宏定义**********************************/ #define uint unsigned int#define uchar unsigned char/*****************************芯片端口地址定义*****************************/#define COM8255 XBYTE[0X7FFF] //8255的命令口#define PA8255 XBYTE[0X1FFF] //8255的PA#define PB8255 XBYTE[0X3FFF] //8255的PB#define PC8255 XBYTE[0X5FFF] //8255的PC#define DAC0832 XBYTE[0XEFFF] //DAC0832口uchar dis_buf[]={0xc0,0x40,0xc0,0xff,0xc0,0x40,0xc0,0xc0}; //数码管显示缓存,格式为MM-NN-SSuchar code du_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, }; //8段共阳极数码管显示码值uchar code bit_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//数码管显示的位值/*********************************系统引脚定义******************************/ sbit key1=P3^0; //key1sbit key2=P3^1; //key2sbit CON=P3^3; //74HC573的锁存端/*********************************定义系统变量*****************************/ uchar num=0,second=0; //定义时间变量bit flag1=0,flag2=0; //定义状态标志位uchar count;uchar max=0,min=0; //定义幅值的最大值和最小值uint m_x=0xe000;uchar code music[]={0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x66, 0x18,0x03,0x17,0x02, 0x15,0x02, 0x16,0x01, 0x15,0x02, 0x10,0x02,0x15,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x02,0x17,0x03, 0x18,0x03, 0x19,0x02, 0x15,0x02, 0x18,0x66,0x17,0x03, 0x19,0x02, 0x16,0x03, 0x17,0x03, 0x16,0x00,0x17,0x01, 0x19,0x02, 0x1B,0x02, 0x1B,0x70, 0x1A,0x03,0x1A,0x01, 0x19,0x02, 0x19,0x03, 0x1A,0x03, 0x1B,0x02,0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x18,0x66, 0x18,0x03,0x19,0x02, 0x1A,0x02, 0x19,0x0C, 0x18,0x0D, 0x17,0x03,0x16,0x01, 0x11,0x02, 0x11,0x03, 0x10,0x03, 0x0F,0x0C,0x10,0x02, 0x15,0x00, 0x1F,0x01, 0x1A,0x01, 0x18,0x66,0x19,0x03, 0x1A,0x01, 0x1B,0x02, 0x1B,0x03, 0x1B,0x03,0x1B,0x0C, 0x1A,0x0D, 0x19,0x03, 0x17,0x00, 0x1F,0x01,0x1A,0x01, 0x18,0x66, 0x19,0x03, 0x1A,0x01, 0x10,0x02,0x10,0x03, 0x10,0x03, 0x1A,0x0C, 0x18,0x0D, 0x17,0x03,0x16,0x00, 0x0F,0x01, 0x15,0x02, 0x16,0x02, 0x17,0x70,0x18,0x03, 0x17,0x02, 0x15,0x03, 0x15,0x03, 0x16,0x66,0x16,0x03, 0x16,0x02, 0x16,0x03, 0x15,0x03, 0x10,0x02,0x10,0x01, 0x11,0x01, 0x11,0x66, 0x10,0x03, 0x0F,0x0C,0x1A,0x02, 0x19,0x02, 0x16,0x03, 0x16,0x03, 0x18,0x66,0x18,0x03, 0x18,0x02, 0x17,0x03, 0x16,0x03, 0x19,0x00,0x00,0x00}; //两只蝴蝶/****************************延时子程序*******************************/void delayms(uchar x) //ms延时函数{uchar y;for(;x>0;x--)for(y=110;y>0;y--) ;}/************************键盘扫描程序*****************************/ void keyscan(){if(key1==0) //判断key1是否被按下{delayms(20); //延时消抖if(key1==0) //判断key2是否被按下{if(flag1==1){if(m_x<0xFffe)TR0=~TR0; //计时开关取反}}while(!key1); //等待key1松开}if(key2==0) //判断key2是否被按下{ delayms(20); //延时消抖if(key2==0) //判断key2是否被按下{ flag1=~flag1; //状态标志位取反if(flag1==1) TR0=1;else TR0=0; //计时开关num=0;second=0;max=0;min=0;m_x=0xe000;}while(!key2); //等待key2松开}}void trans_data(){if(flag2==0){ dis_buf[0]=du_code[max/100];dis_buf[1]=du_code[max%100/10];dis_buf[2]=du_code[max%10];}else{ dis_buf[0]=du_code[min/100];dis_buf[1]=du_code[min%100/10];dis_buf[2]=du_code[min%10];}dis_buf[4]=du_code[second/10];dis_buf[5]=du_code[second%10]&0x7f;dis_buf[6]=du_code[num/10];dis_buf[7]=du_code[num%10];}/*************************系统初始化程序********************************/void Initial(){uint i=0;for(i=0;i<8192;i++){XBYTE[m_x]=music[i];m_x++;}m_x=0xE000;CON=1; //锁存器地址锁存COM8255=0x89; //定义8255的A口为输出,B口和C口为输入CON=0;TMOD=0x11; //定义定时器的工作方式TH0=(65536-10000)/256;TL0=(65536-10000)%256; //给T0装初值TH1=(65536-500)/256;TL1=(65536-500)%256; //给T1装初值ET0=1; //开T0的中断ET1=1; //开T1的中断EA=1; //开总中断TR0=0; //关闭T0TR1=1;}/************************************主程序***********************************/ void main(){uchar temp;Initial(); //系统初始化while(1){keyscan();trans_data();while(flag1==1) //判断状态标志位{if(TR0==1) //判断计时是否开始{temp=XBYTE[m_x]; //读取SRAM的值CON=1;DAC0832=temp; //D/A转换CON=0;delayms(1); //延时m_x++; //地址值加1if(m_x==0xfffe){m_x=0xe000; //RAM地址越界,初始化}if(temp>max)max=temp; //提取幅值最大值if(temp<min)min=temp; //提取幅值最小值}keyscan();trans_data();}}}/*********************定时器0中断程序************************************/ void timer0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256; //给定时器0装初值,定义时间精度为0.01s num++; //计数器加1if(num==100) //判断1s时间是否到{num=0; //计数器清零second++; //秒加1if(second%2)flag2=1;elseflag2=0;if(second==60) //判断1分钟是否到{second=0; //秒清零}}}void timer1() interrupt 3{TH1=(65536-500)/256;TL1=(65536-500)%256; //给T1装初值CON=1;PB8255=bit_code[count]; //显示位值PA8255=dis_buf[count]; //显示码值CON=0;count++; //计数器加1if(count==8) //判断计数器的值是否超过范围count=0;}四、设计草图各部分电路图:整体电路图:五、设计结果Proteus7.4中运行结果:示波器的显示:开始后显示的最小值:开始后显示的最大值:按下暂停键后的显示:按下开关键后关闭时的显示:六、设计小结通过两周的课程设计,通过翻阅相关资料以及学习过的知识,我学会了keil和proteus软件的使用,掌握了8255,89C51,DAC0832等芯片的管脚功能。