南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx

上传人:b****1 文档编号:1541358 上传时间:2023-04-30 格式:DOCX 页数:17 大小:823.18KB
下载 相关 举报
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第1页
第1页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第2页
第2页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第3页
第3页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第4页
第4页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第5页
第5页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第6页
第6页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第7页
第7页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第8页
第8页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第9页
第9页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第10页
第10页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第11页
第11页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第12页
第12页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第13页
第13页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第14页
第14页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第15页
第15页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第16页
第16页 / 共17页
南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx

《南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx(17页珍藏版)》请在冰点文库上搜索。

南邮基于8255的8LED显示语音播放机设计Word格式文档下载.docx

#include<

reg52.h>

absacc.h>

/***********************************宏定义**********************************/

#defineuintunsignedint

#defineucharunsignedchar

/*****************************芯片端口地址定义*****************************/

#defineCOM8255XBYTE[0X7FFF]//8255的命令口

#definePA8255XBYTE[0X1FFF]//8255的PA

#definePB8255XBYTE[0X3FFF]//8255的PB

#definePC8255XBYTE[0X5FFF]//8255的PC

#defineDAC0832XBYTE[0XEFFF]//DAC0832口

uchardis_buf[]={0xc0,0x40,0xc0,0xff,0xc0,0x40,0xc0,0xc0};

//数码管显示缓存,格式为MM-NN-SS

ucharcodedu_code[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};

//8段共阳极数码管显示码值

ucharcodebit_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

//数码管显示的位值

/*********************************系统引脚定义******************************/

sbitkey1=P3^0;

//key1

sbitkey2=P3^1;

//key2

sbitCON=P3^3;

//74HC573的锁存端

/*********************************定义系统变量*****************************/

ucharnum=0,second=0;

//定义时间变量

bitflag1=0,flag2=0;

//定义状态标志位

ucharcount;

ucharmax=0,min=0;

//定义幅值的最大值和最小值

uintm_x=0xe000;

ucharcodemusic[]={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};

//两只蝴蝶

/****************************延时子程序*******************************/

voiddelayms(ucharx)//ms延时函数

{

uchary;

for(;

x>

0;

x--)

for(y=110;

y>

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;

elseTR0=0;

//计时开关

num=0;

second=0;

max=0;

min=0;

m_x=0xe000;

key2);

//等待key2松开

voidtrans_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];

/*************************系统初始化程序********************************/

voidInitial()

uinti=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;

//关闭T0

TR1=1;

/************************************主程序***********************************/

voidmain()

{

uchartemp;

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++;

//地址值加1

if(m_x==0xfffe)

{

m_x=0xe000;

//RAM地址越界,初始化

}

if(temp>

max)

max=temp;

//提取幅值最大值

if(temp<

min)

min=temp;

//提取幅值最小值

keyscan();

}

/*********************定时器0中断程序************************************/

voidtimer0()interrupt1

//给定时器0装初值,定义时间精度为0.01s

num++;

//计数器加1

if(num==100)//判断1s时间是否到

num=0;

//计数器清零

second++;

//秒加1

if(second%2)

flag2=1;

else

flag2=0;

if(second==60)//判断1分钟是否到

//秒清零

voidtimer1()interrupt3

//给T1装初值

PB8255=bit_code[count];

//显示位值

PA8255=dis_buf[count];

//显示码值

count++;

if(count==8)//判断计数器的值是否超过范围

count=0;

四、设计草图

各部分电路图:

整体电路图:

五、设计结果

Proteus7.4中运行结果:

示波器的显示:

开始后显示的最小值:

开始后显示的最大值:

按下暂停键后的显示:

按下开关键后关闭时的显示:

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2