下载此文档

LED显示及蜂鸣器.docx


文档分类:通信/电子 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
该【LED显示及蜂鸣器 】是由【fengruiling】上传分享,文档一共【12】页,该文档可以免费在线阅读,需要了解更多关于【LED显示及蜂鸣器 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。沈阳航空航天大学
(单片机课程设计报告)
专业:
班 级:
设计题目: LED显示及蜂鸣器
学 号:
学生姓名:
指导教师:
2015年7月3日
设计题目:
一、 要求
了解LED点阵显示图案的原理。
能够在LED上显示和控制蜂鸣器的工作。
3・熟悉掌握KEIL软件的使用。
二、 分析
本设计使用AT89C51做为主控制模块,利用简单的外围电路来驱动LED显示。设计分为三个模块:单片机控制模块,输出显示模块和驱动模块,单片机控制模块以单片机为核心,以软件KEIL编程实现信号输出,以驱动LED及蜂鸣器为目的。
三、 设计
1、 硬件方面
(1)、LED驱动模块、蜂鸣器模块
本模块包括LED点阵显示汉字,数码管显示数字。
,达
到驱动蜂鸣器的目的,以此来控制蜂鸣器的工作。
⑵、硬件设计
实验板上设计一个16X16LED点阵显示模块,可用于简单的汉字
显示,以及一个简单的数码管。
2、 软件编程
电路图
本软件要求实现如下要求:LED点阵显示歌曲名,数码管对数字
进行计数,蜂鸣器在显示歌曲名时自动播放歌曲。
图一:实验原理图
2、 调试说明
使用KEIL软件编译调试代码,确保无误后下载到单片机里,硬件电路连接p2口LED的所有跳帽,,下载生成的hex文件,即可看到LED点阵上能够出现歌曲名图案并且可以看到译码管对数字计数,而后有歌曲的伴随。
3、 实验结果
能够在LED点阵上清晰显示汉字图案,但是LED点阵没有达到对汉字的完美显示,即蜂鸣器工作时,LED点阵显示汉字时间并没有跟随蜂鸣器工作时单拍所需要的时间同步。经努力修改程序代码得以实
现。
图二:实验结果图
四、总结在此次设计中,我得到以下体会:
这次图案设计的过程让我进一步熟悉了KEIL软件的使用。
通过这次设计,重新复习并进一步学习了51单片机的优点,明确了单片机在显示生活中的应用是十分广泛的。
让我明白任何一件事情都必须小心谨慎,稍有差错变不会得出正确的结论。就像程序代码,错一点,整个程序也就错了。所以我们应该养成严谨学习习惯。
自己以后要更加认真学习单片机相关知识,提高自己的编程能力。
附录:
#include〈〉
#include〈〉
#defineNOP()_nop_() //定义空指令,这个函数在库<>中
//--重定义函数变量一//
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
voidchang();
voidmain1(unsignedintq);
//—定义SPI要使用的I0—〃
sbitMOSIO=P3"4;
sbitR_CLK=P3"5;
sbitS_CLK=P3飞;
//-—全局变量声明--〃
ulongcolumn; //点阵列
ulongrow; //点阵行
ulongdt;
〃点阵显示数组
ucharcodetab0[]={0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,
0x10,0x00,0x20,0x00,0x40,0x00,0x80,
0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,
0x00,0x20,0x00,0x40,0x00,0x80,0x00};
//—八一〃
ucharcodetab1[] =
{0,0,128,0,128,0,64,2,64,2,64,4,64,4,32,4,32,8,16,16,8,32,4,32,2,64,0,0,0,0,0,0};
//—月一〃
ucharcodetab2[] =
{0,0,248,31,8,16,8,16,232,23,8,16,8,16,8,16,232,23,8,16,8,16,12,16,4,16,2,16,1,20,0,24};
〃一桂一//
ucharcodetab3[] =
{0,0,16,0,16,8,16,8,126,127,16,8,16,127,24,8,56,62,84,8,18,8,16,255,16,0,16,0,0,0,0,0};
〃一花一//
ucharcodetab4[] =
{16,4,16,4,252,63,16,4,96,0,48,9,16,5,24,3,148,1,82,1,16,1,16,1,16,1,16,33,16,63,0,0};
//—n』一〃
ucharcodetabl3[] =
{0,0,0,0,60,240,102,156,67,130,0,0,0,0,0,0,0,0,0,0,48,24,96,8,192,7,0,0,0,0,0,0};
〃函数声明
voidHC595SendData(ucharBT3,ucharBT2,ucharBT1,ucharBT0);sbitBeep=P「5;
unsignedcharn=0; //n为节拍常数变量
unsignedcharcodemusic_tab[]={
0x18,0x30,0x1C,
0x10,〃格式为:频率常数,节拍常数,频率常数,节拍常
数,
0x20,
0x40,
0x1C,
0x10,
0x18,
0x10,
0x20,
0x10,
0x1C,
0x10,
0x18,
0x40,
0x1C,
0x20,
0x20,
0x20,
0x1C,
0x20,
0x18,
0x20,
0x20,
0x80,
0xFF,
0x20,
0x30,
0x1C,
0x10,
0x18,
0x20,
0x15,
0x20,
0x1C,
0x20,
0x20,
0x20,
0x26,
0x40,
0x20,
0x20,
0x2B,
0x20,
0x26,
0x20,
0x20,
0x20,
0x30,
0x80,
0xFF,
0x20,
0x20,
0x1C,
0x10,
0x18,
0x10,
0x20,
0x20,
0x26,
0x20,
0x2B,
0x20,
0x30,
0x20,
0x2B,
0x40,
0x20,
0x20,
0x1C,
0x10,
0x18,
0x10,
0x20,
0x20,
0x26,
0x20,
0x2B,
0x20,
0x30,
0x20,
0x2B,
0x40,
0x20,
0x30,
0x1C,
0x10,
0x18,
0x20,
0x15,
0x20,
0x1C,
0x20,
0x20,
0x20,
0x26,
0x40,
0x20,
0x20,
0x2B,
0x20,
0x26,
0x20,
0x20,
0x20,
0x30,
0x80,
0x20,
0x30,
0x1C,
0x10,
0x20,
0x10,
0x1C,
0x10,
0x20,
0x20,
0x26,
0x20,
0x2B,
0x20,
0x30,
0x20,
0x2B,
0x40,
0x20,
0x15,
0x1F,
0x05,
0x20,
0x10,
0x1C,
0x10,
0x20,
0x20,
0x26,
0x20,
0x2B,
0x20,
0x30,
0x20,
0x2B,
0x40,
0x20,
0x30,
0x1C,
0x10,
0x1&
0x20,
0x15,
0x20,
0x1C,
0x20,
0x20,
0x20,
0x26,
0x40,
0x20,
0x20,
0x2B,
0x20,
0x26,
0x20,
0x20,
0x20,
0x30,
0x30,
0x20,
0x30,
0x1C,
0x10,
0x1&
0x40,
0x1C,
0x20,
0x20,
0x20,
0x26,
0x40,
0x13,
0x60,
0x18,
0x20,
0x15,
0x40,
0x13,
0x40,
0x18,
0x80,
0x00
};
voiddelayms(unsignedchara)〃毫秒延时子程序
{
while(—a);
}
voiddelayms1(unsignedchara)〃毫秒延时子程序
{
while(—a);
}
voidint0()interrupt1 〃采用中断0控制节拍
{ TH0=0xd8;
TL0=0xef;
n--;
}
voidHC595SendData(ucharBT3,ucharBT2,ucharBT1,ucharBT0){
uchari;
//—发送第一个字节一//
for(i=0;i〈8;i++)
{
MOSIO= BT3>>7;//从高位到低位
BT3〈〈= 1;
S_CLK= 0;
S_CLK= 1;
}
//—发送第一个字节一//
for(i=0;i<8;i++)
{
MOSIO= BT2〉〉7;〃从高位到低位
BT2<<= 1;
S_CLK= 0;
S_CLK= 1;
}
//—发送第一个字节--〃for(i=0;i〈8;i++)
{
MOSIO= BT1〉〉7;//从高位到低位
BT1〈〈= 1;
S_CLK= 0;
S_CLK= 1;
}
//—发送第一个字节--//for(i=0;i〈8;i++)
{
MOSIO=BT0〉〉7; 〃从高位到低位
BT0〈〈=1;
S_CLK=0;
S_CLK=1;
}
//—输出一//
R_CLK=0;//setdatalinelow
R_CLK=1;//片选
R_CLK=0;//setdatalinelowdelaymsl(lOOOO);
}
voiddelay(unsignedcharm) //控制频率延时
{
unsignedi=3*m;
while(—i);
}
voidmain(void)
{
intk,j,ms;
unsignedcharp,m;//m为频率常数变量unsignedchari=0;
j=6;
TMOD&=0x0f;
TM0D|=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(l)
{
a:p=music_tab[i];
if(p==OxOO) {i=0;
delaymsl(lOOO);
gotoplay;
}//如果碰到结束符,延时1秒,回到开始再来一遍
elseif(p==0xff){i=i+1; delayms(100),TR0=0;gotoa;} 〃若碰到休止符,
延时100ms,继续取下一音符
else{m=music_tab[i++],n=music_tab[i++];}〃取频率常数和节拍常数
TR0=1; 〃开定时器1
while(n!=0)Beep=~Beep,delay(m); 〃等待节拍完成,通过P1口输出音频
TR0=0;〃关定时器1
main1(1);
//—显示〃八〃一//
for(ms=j;ms>0;ms—)
{
for(k=0;k<16;k++)
{
HC595SendData(~tab1[2*k+1],~tab1[2*k],tab0[2*k],tab0[2*k+1]);
}
}
p=music_tab[i];
if(p==0x00)
{i=0;
delayms1(1000);
gotoplay;
elseif(p==0xff)
{i=i+1;
delayms(100),
TR0=0;
gotoa;
}else
{m=music_tab[i++],
n=music_tab[i++];
}
TR0=1;
while(n!=0)Beep=~Beep,delay(m);
TR0=0;
main1(2);
//—显示“月”--//
for(ms=j;ms>0;ms—)
{
for(k=0;k<16;k++)
{
HC595SendData(~tab2[2*k+1],~tab2[2*k],tab0[2*k],tab0[2*k+1]);
}
}
p=music_tab[i];
if(p==OxOO) {i=0;
delayms1(1000);
gotoplay;}
elseif(p==0xff)
{
i=i+1;
delayms(100),
TR0=0;
gotoa;
}
else
{
m=music_tab[i++],
n=music_tab[i++];
}
TR0=1;
while(n!=0)Beep=~Beep,delay(m);
TR0=0;
main1(3);
//—显示“桂”一//
for(ms=j;ms>0;ms—)
{
for(k=0;k<16;k++)
{
HC595SendData(~tab3[2*k+1],~tab3[2*k],tab0[2*k],tab0[2*k+1]);
}
}
p=music_tab[i];
if(p==0x00) {i=0;
delayms1(1000);
gotoplay;}
elseif(p==0xff)

LED显示及蜂鸣器 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数12
  • 收藏数0 收藏
  • 顶次数0
  • 上传人fengruiling
  • 文件大小238 KB
  • 时间2022-10-18