您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机控制LED及蜂鸣器课程设计报告
武汉**大学单片机设计报告课程单片机课程设计设计题目LED灯及蜂鸣器年级专业信息与计算科学09级学号学生姓名指导教师2012年04月17日1设计题目:一、要求1.了解LED显示流水灯的原理。2.能够在LED上显示和控制蜂鸣器的工作。3.熟悉掌握keil软件的使用。二、分析本设计使用AT89C52RC做为主控制模块,利用简单的外围电路来驱动LED蝴蝶。设计分为三个模块:单片机控制模块,输出显示模块和驱动模块,单片机控制模块以单片机为核心,以软件KEIL编程实现信号输出,以驱动LED及蜂鸣器为目的。三、设计1、硬件方面(1)、LED驱动模块2图文显示有静态和动态两种方案,本设计中静动态都用到了。动态扫描的意思简单的说就是轮流点亮。具体就图案来说,把内部同行的发光管的阳极相连在一起,先送出对应行的发光管亮灭的数据并锁存,然后选通其它行使其燃亮相同的时间,然后熄灭。反复循环。蜂鸣器的控制则是加入三极管接在VCC,单片机的第20引脚和负极上,以此来控制蜂鸣器的工作。(2)、硬件设计实验板上设计一个蝴蝶状的LED显示,可用于简单的图形图像。蝴蝶的图案是由74个LED绿灯、8个红灯、10个黄灯拼接而成。其中绿灯直接接到正负极上,黄灯和红灯接到单片机的P2口,来控制其闪动。2、软件编程(包括流程图、完整的汇编源程序及其注释)1.电路图本软件要求实现如下要求:外圈绿灯亮度明亮,红灯和黄灯都不停地闪动,蜂鸣器自动播放歌曲。电路图如下:32.主程序本设计的系统软件能使系统LED各点亮度均匀,充足,可显示清晰图案,并且闪动。系统主程序开始后,首先是对系统环境初始化,包括设置串口,中断和端口;然后闪动红黄灯,由于单片机没有停机指令,所以可以设置系统程序不断循环。3.序代码如下:#includereg51.h#includertx51tny.h#includeabsacc.h#includeintrins.h#defineucharunsignedchar4#defineuintunsignedint#defineDY_PORTP2//设置LED连接的I/O组#defineDY_SPEED100//设置每一个明亮级的停留时间(值域:0~65535)structmusic_type{uchartone;uchardelay;};voiddelay(unsignedinta){//1ms延时程序unsignedinti;while(--a!=0){for(i=0;i600;i++);//STC单片机在外部晶振为12MHz时i值上限为600}//AT89C51单片机在外部晶振为12MHz时i值上限为125}uintcodetonetab[]={//D调7声音阶3个8度63967,64138,64291,64360,64489,64603,64704,//低音1~764752,64837,64913,64948,65012,65070,65120,//中音1~765144,65186,65225,65242,65274,65303,65328//高音1~7};//曲谱,每个音符两项数据:第1项为音高,第2项为节拍(以1/4拍为单位)structmusic_typecodenotetab[]={//”三十里铺”曲谱51+14,0x02,2+14,0x04,2+14,0x02,5+14,0x02,1+14,0x04,6+7,0x02,5+7,0x03,6+7,0x01,5+7,0x02,2+7,0x02,5+7,0x08,1+14,0x02,2+14,0x04,2+14,0x02,5+14,0x02,1+14,0x04,6+7,0x02,5+7,0x03,6+7,0x01,5+7,0x02,2+7,0x02,5+7,0x08,1+14,0x02,4+7,0x04,5+7,0x02,1+14,0x02,1+14,0x04,6+7,0x02,5+7,0x03,6+7,0x01,5+7,0x02,2+7,0x02,5+7,0x08,4+7,0x03,4+7,0x01,3+7,0x02,2+7,0x02,1+7,0x03,2+7,0x01,5+7,0x02,2+7,0x02,1+7,0x08,1+14,0x02,2+14,0x04,2+14,0x02,5+14,0x02,1+14,0x04,6+7,0x02,5+7,0x03,6+7,0x01,5+7,0x02,2+7,0x02,5+7,0x08,1+14,0x02,2+14,0x04,2+14,0x02,5+14,0x02,1+14,0x04,6+7,0x02,5+7,0x03,6+7,0x01,5+7,0x02,2+7,0x02,5+7,0x08,1+14,0x02,4+7,0x04,5+7,0x02,1+14,0x02,1+14,0x04,6+7,0x02,5+7,0x03,6+7,0x01,5+7,0x02,2+7,0x02,5+7,0x08,4+7,0x03,4+7,0x01,3+7,0x02,2+7,0x02,1+7,0x03,2+7,0x01,5+7,0x02,2+7,0x02,1+7,0x08,0,0x00};sbitP10=P1^0;//连接无源蜂鸣器/*sbitSDAT=P3^4;//连接显示数码的移位寄存器sbitSCLK=P3^5;*/volatileuchartl1,th1;//存控制定时器1定时参数6uintled=0x0001;//LED初始显示数据bitdir=0;//LED流水方向控制标志voidT1_sev()interrupt3//定时器T1中断:控制蜂鸣器发声频率{TL1=tl1;//重装定时数据TH1=th1;P10=!P10;//蜂鸣器驱动倒相}voidINT1_serv()interrupt2//外中断1,改变LED流水方向标志{dir=!dir;//流水方向控制标志改变}voidinit()_task_0//任务0:初始化,激活任务1~3{TMOD|=0x10;//系统硬件初始化ET1=1;IT1=1;EX1=1;os_create_task(1);//启动任务1~3/*os_create_task(2);*/os_create_task(3);os_delete_task(0);//自身撤退}voiddisled()_task_1//任务1:16个LED流水显示{unsignedinttemp;unsignedinti;while(1)7{temp=0xA0;for(i=0;i8;i++){//8个流水灯逐个闪动DY_PORT=~temp;delay(DY_SPEED);//调用延时函数temp=1;}temp=0xA7;for(i=0;i8;i++){//8个流水灯反向逐个闪动DY_PORT=~temp;delay(DY_SPEED);//调用延时函数temp=1;}temp=0xA0;for(i=0;i8;i++){//8个流水灯依次全部点亮DY_PORT=temp;delay(DY_SPEED);//调用延时函数temp=1;}temp=0xA7;for(i=0;i8;i++){//8个流水灯依次反向全部点亮DY_PORT=temp;delay(DY_SPEED);//调用延时函数temp=1;}os_wait2(K_IVL,10);//控制LED流水显示的节奏}}8voidmusicplay()_task_3//任务3:蜂鸣器演奏”三十里铺”{uchari,j;while(1){i=0;while(notetab[i].delay){if(!notetab[i].tone)TR1=0;//音高数据为0else//音高数据不为0{th1=TH1=tonetab[notetab[i].tone-1]/256;//用定时参数控制T1的振荡频率(音高)tl1=TL1=tonetab[notetab[i].tone-1]%256;TR1=1;//该音符发声}for(j=0;jnotetab[i].delay;j++)//控制音符的持续时间(节拍)os_wait2(K_IVL,20);i++;//拟换下个音符}TR1=0;//停奏os_wait2(K_IVL,100);//奏完1遍后的等待}}3、调试说明使用LEIL软件编译调试代码,确保无误后下载到单片机里,硬件电路连接p2口LED的所有跳帽,下载生成的hex文件,即可看到LED屏幕上能够出现明亮的蝴蝶图案并且有歌曲的伴随。94、设计结果及错误分析能够在LED屏上清晰显示蝴蝶图案,但是没有达到流水灯和歌曲同时实现的目的,经努力修改程序代码还是没能实现。直到主动找老师询问后,才知道是因为应该用IO中断来控制程序的并发进行,以后会吸取教训,认真落实老师给的任务,不懂即问。四、总结在此次设计中,我得到以下体会:1.这次图案设计的过程让我进一步熟悉了KEIL软件的使用。2.通过这次设计,重新复习并进一步学习了51单片机的优点,明确了单片机在显示生活中的应用是十分广泛的。3.让我明白任何一件事情都必须小心谨慎,稍有差错变不会得出正确的结论。就像程序代码,错一点,整个程序也就错了。所以我们应该养成严谨学习习惯。10
本文标题:单片机控制LED及蜂鸣器课程设计报告
链接地址:https://www.777doc.com/doc-2606522 .html