《LED显示及蜂鸣器.doc》由会员分享,可在线阅读,更多相关《LED显示及蜂鸣器.doc(10页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流LED显示及蜂鸣器.精品文档.沈阳航空航天大学(单片机课程设计报告) 专 业 : 班 级 : 设计题目 : LED显示及蜂鸣器 学 号 : 学生姓名 : 指导教师 : 2015年 7 月 3日设计题目:一、 要求1.了解LED点阵显示图案的原理。2. 能够在LED上显示和控制蜂鸣器的工作。3 熟悉掌握KEIL软件的使用。二、 分析 本设计使用AT89C51做为主控制模块,利用简单的外围电路来驱动LED显示。设计分为三个模块:单片机控制模块,输出显示模块和驱动模块,单片机控制模块以单片机为核心,以软件KEIL编程实现信号输出,以驱动LED及蜂鸣
2、器为目的。三、 设计1、硬件方面(1)、LED驱动模块、蜂鸣器模块本模块包括LED点阵显示汉字,数码管显示数字。蜂鸣器的控制则是利用P1.5口输出电压加在蜂鸣器引脚上,达到驱动蜂鸣器的目的,以此来控制蜂鸣器的工作。(2)、硬件设计 实验板上设计一个1616 LED点阵显示模块,可用于简单的汉字显示,以及一个简单的数码管。 2、软件编程1.电路图本软件要求实现如下要求:LED点阵显示歌曲名,数码管对数字进行计数,蜂鸣器在显示歌曲名时自动播放歌曲。图一:实验原理图2、调试说明 使用KEIL 软件编译调试代码,确保无误后下载到单片机里,硬件电路连接p2口LED的所有跳帽,单片机P1.5接口连接蜂鸣器
3、,下载生成的hex文件,即可看到LED点阵上能够出现歌曲名图案并且可以看到译码管对数字计数,而后有歌曲的伴随。3、实验结果能够在LED点阵上清晰显示汉字图案,但是LED点阵没有达到对汉字的完美显示,即蜂鸣器工作时,LED点阵显示汉字时间并没有跟随蜂鸣器工作时单拍所需要的时间同步。经努力修改程序代码得以实现。图二:实验结果图四、 总结在此次设计中,我得到以下体会:1. 这次图案设计的过程让我进一步熟悉了KEIL 软件的使用。2. 通过这次设计,重新复习并进一步学习了51单片机的优点,明确了单片机在显示生活中的应用是十分广泛的。3. 让我明白任何一件事情都必须小心谨慎,稍有差错变不会得出正确的结论
4、。就像程序代码,错一点,整个程序也就错了。所以我们应该养成严谨学习习惯。4. 自己以后要更加认真学习单片机相关知识,提高自己的编程能力。附录:#include #include #define NOP() _nop_() / 定义空指令 ,这个函数在库 中/-重定义函数变量-/#define uchar unsigned char#define uint unsigned int#define ulong unsigned longvoid chang();void main1(unsigned int q);/-定义SPI要使用的 IO-/sbit MOSIO = P34;sbit R_CL
5、K = P35;sbit S_CLK = P36;/-全局变量声明-/ulong column; /点阵列ulong row; /点阵行ulong dt;/点阵显示数组uchar code tab0 = 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; /-八-/u
6、char code tab1 = 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;/-月-/uchar code tab2 = 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;/-桂-/uchar code tab3 = 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,
7、16,0,0,0,0,0 ;/-花-/uchar code tab4 = 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 ;/-_-/uchar code tab13 = 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;/函数声明void HC595SendData( uchar BT3, uchar BT2,uchar BT1,uchar BT0);sbit Bee
8、p = P15 ; unsigned char n=0; /n为节拍常数变量 unsigned char code music_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,
9、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,
10、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,
11、0x1F, 0x05, 0x20 , 0x10, 0x1C, 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 , 0x30, 0x20, 0x30, 0x1C , 0x10, 0x18, 0x40, 0x1C , 0x20,
12、0x20, 0x20, 0x26 , 0x40, 0x13, 0x60, 0x18 , 0x20, 0x15, 0x40, 0x13 , 0x40, 0x18, 0x80, 0x00 void delayms(unsigned char a) /毫秒延时子程序 while(-a); void delayms1(unsigned char a) /毫秒延时子程序 while(-a); void int0() interrupt 1 /采用中断0 控制节拍 TH0=0xd8; TL0=0xef; n-; void HC595SendData( uchar BT3, uchar BT2,uchar
13、BT1,uchar BT0)uchar i;/-发送第一个字节-/for(i=0;i 7 ;/从高位到低位BT3 = 1;S_CLK = 0;S_CLK = 1;/-发送第一个字节-/for(i=0;i7;/从高位到低位BT2 = 1;S_CLK = 0;S_CLK = 1;/-发送第一个字节-/for(i=0;i 7;/从高位到低位BT1 = 1;S_CLK = 0;S_CLK = 1;/-发送第一个字节-/for(i=0;i 7;/从高位到低位BT0 0; ms-)for(k = 0; k 0; ms-)for(k = 0; k 0; ms-)for(k = 0; k 0; ms-)for(k = 0; k 0; ms-)for(k = 0; k 0;c-)for (b=38;b0;b-)for (a=80;a0;a-);