版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计名称:基于8255的8显示语音播放机设计一、设计要求 实验中需要的信源,可以通过处理一段WAV文件,将其变为一段数据表进行实验。基本要求:1 将处理过的数据通过单片机进行存储(信号固化)。2 用D/A转换器回放存储的信号。3 通过模拟示波器显示回放的波形。4 在数码管或LCD上显示回放波形的参数(最大/最小幅值,波形播放时间)。发挥部分:1 在实验允许的条件下,采用更灵活的存放方法。2 多段信源管理和播放。动态显示格式:自定二、设计原理声音文件已经放在程序里面,一开始运行,首先将程序里面的声音数据转存储到SRAM里,也就是6264里,显示的话,可以显示出播放时间,和数据的最大值和最小值,最
2、大值和最小值是自动进行切换的,1秒为间隔,从SRAM读取数据,进行DA转换就可以看出波形了。三、设计过程流程图如下:开始显示分钟显示10ms显示秒钟显示“:”显示“:”结束显示流程图开始系统初始化键盘扫描显示时间储存数据读取数据A/D转换Flag1 = = 1YNFlag2 = = 1D/A转换YN开始初始化有键按下?Key1按下?Flag1=1YKEY1按下?延时消抖Flag2=1开始D/A结束NNNYY开始A/D时间清零时间清零系统主流程图 键盘流程图对应的C语言程序如下:/*基于8255的8LED显示语音播放机设计程序*/#include<reg52.h>#include&l
3、t;absacc.h>/*宏定义*/#define uint unsigned int#define uchar unsigned char/*芯片端口地址定义*/#define COM8255 XBYTE0X7FFF /8255的命令口#define PA8255 XBYTE0X1FFF /8255的PA#define PB8255 XBYTE0X3FFF /8255的PB#define PC8255 XBYTE0X5FFF /8255的PC#define DAC0832 XBYTE0XEFFF /DAC0832口uchar dis_buf=0xc0,0x40,0xc0,0xff,0x
4、c0,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=P30; /key1sbit key2=P31; /key2sbit CON=P33; /74HC573的锁存端/*定义系统变量*/uchar num=0,second=
5、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,0x0
6、3, 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,
7、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, 0x1
8、0,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,0
9、x03, 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;/计时开关取反
10、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_buf0=du_codemax/100;dis_buf1=du_codemax%100/10;dis_buf2=du_cod
11、emax%10;else dis_buf0=du_codemin/100;dis_buf1=du_codemin%100/10;dis_buf2=du_codemin%10;dis_buf4=du_codesecond/10;dis_buf5=du_codesecond%10&0x7f;dis_buf6=du_codenum/10;dis_buf7=du_codenum%10; /*系统初始化程序*/void Initial()uint i=0;for(i=0;i<8192;i+)XBYTEm_x=musici;m_x+;m_x=0xE000;CON=1; /锁存器地址锁存COM
12、8255=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();whil
13、e(flag1=1)/判断状态标志位if(TR0=1)/判断计时是否开始temp=XBYTEm_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 1TH0=(65536-10000)/256;TL0=(65536-10000)%256; /给定时器0装初值,定义时间精度为0.01snum+; /计数器加1if(num=100)/判断1s时间是否到num=0; /计数器清零second+; /秒加1if(second%2)flag2=1;elseflag2=0;if(second=60) /判断1分钟是否到second=0; /秒清零void timer1() interrupt 3TH1=(65536-500)/256;TL1=(65536-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广告宣传合同广告合同协议书
- 设备维保的预测性维护与故障预测技术
- 数字经济助力“双碳”目标的内在机理及路径
- 机电事故案例汇编
- 基于水下感应耦合原理的数据传输系统优化研究
- 基于人体姿态的人物交互检测算法研究
- 高光谱微波辐射探测关键技术研究
- 高速公路隧道维修工程招标合同三篇
- 消息驱动跳频通信抗干扰技术研究
- 2025年西师新版选修历史下册阶段测试试卷
- 标准作文稿纸模板(A4纸)
- 中小学校园突发事件应急与急救处理课件
- 2024年山东省普通高中学业水平等级考试生物真题试卷(含答案)
- 2024年青海省西宁市选调生考试(公共基础知识)综合能力题库汇编
- 2024年湖南高速铁路职业技术学院单招职业技能测试题库及答案解析
- 广州绿色金融发展现状及对策的研究
- 《近现代史》义和团运动
- 时间的重要性英文版
- 2024老旧小区停车设施改造案例
- 灰坝施工组织设计
- 韩国《寄生虫》电影鉴赏解读
评论
0/150
提交评论