单片机控制LED及蜂鸣器毕业课程设计报告Word文档格式.docx
- 文档编号:14741821
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:7
- 大小:103.35KB
单片机控制LED及蜂鸣器毕业课程设计报告Word文档格式.docx
《单片机控制LED及蜂鸣器毕业课程设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机控制LED及蜂鸣器毕业课程设计报告Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
3.熟悉掌握keil软件的使用。
二、分析
本设计使用AT89C52RC做为主控制模块,利用简单的外围电路来驱动LED蝴蝶。
设计分为三个模块:
单片机控制模块,输出显示模块和驱动模块,单片机控制模块以单片机为核心,以软件KEIL编程实现信号输出,以驱动LED及蜂鸣器为目的。
三、设计
1、硬件方面
(1)、LED驱动模块
图文显示有静态和动态两种方案,本设计中静动态都用到了。
动态扫描的意思简单的说就是轮流点亮。
具体就图案来说,把内部同行的发光管的阳极相连在一起,先送出对应行的发光管亮灭的数据并锁存,然后选通其它行使其燃亮相同的时间,然后熄灭。
反复循环。
蜂鸣器的控制则是加入三极管接在VCC,单片机的第20引脚和负极上,以此来控制蜂鸣器的工作。
(2)、硬件设计
实验板上设计一个蝴蝶状的LED显示,可用于简单的图形图像。
蝴蝶的图案是由74个LED绿灯、8个红灯、10个黄灯拼接而成。
其中绿灯直接接到正负极上,黄灯和红灯接到单片机的P2口,来控制其闪动。
2、软件编程(包括流程图、完整的汇编源程序及其注释)
1.电路图
本软件要求实现如下要求:
外圈绿灯亮度明亮,红灯和黄灯都不停地闪动,蜂鸣器自动播放歌曲。
电路图如下:
2.主程序
本设计的系统软件能使系统LED各点亮度均匀,充足,可显示清晰图案,并且闪动。
系统主程序开始后,首先是对系统环境初始化,包括设置串口,中断和端口;
然后闪动红黄灯,由于单片机没有停机指令,所以可以设置系统程序不断循环。
3.序代码如下:
#include<
reg51.h>
rtx51tny.h>
absacc.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineDY_PORTP2设置LED连接的IO组
#defineDY_SPEED100设置每一个明亮级的停留时间(值域:
0~65535)
structmusic_type
{uchartone;
uchardelay;
};
voiddelay(unsignedinta){1ms延时程序
unsignedinti;
while(--a!
=0){
for(i=0;
i<
600;
i++);
STC单片机在外部晶振为12MHz时i值上限为600
}AT89C51单片机在外部晶振为12MHz时i值上限为125
}
uintcodetonetab[]={D调7声音阶3个8度
64704,低音1~7
65120,中音1~7
65328高音1~7
曲谱,每个音符两项数据:
第1项为音高,第2项为节拍(以14拍为单位)
structmusic_typecodenotetab[]={”三十里铺”曲谱
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,
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定时参数
uintled=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)
{temp=0xA0;
for(i=0;
i<
8;
i++){8个流水灯逐个闪动
DY_PORT=~temp;
delay(DY_SPEED);
调用延时函数
temp<
<
=1;
}
temp=0xA7;
i++){8个流水灯反向逐个闪动
temp>
>
}
temp=0xA0;
i++){8个流水灯依次全部点亮
DY_PORT=temp;
temp=0xA7;
for(i=0;
i++){8个流水灯依次反向全部点亮
os_wait2(K_IVL,10);
控制LED流水显示的节奏
}
voidmusicplay()_task_3任务3:
蜂鸣器演奏”三十里铺”
{uchari,j;
while
(1)
{i=0;
while(notetab[i].delay)
{if(!
notetab[i].tone)TR1=0;
音高数据为0
else音高数据不为0
{th1=TH1=tonetab[notetab[i].tone-1]256;
用定时参数控制T1的振荡频率(音高)
tl1=TL1=tonetab[notetab[i].tone-1]%256;
TR1=1;
该音符发声
}
for(j=0;
j<
notetab[i].delay;
j++)控制音符的持续时间(节拍)
os_wait2(K_IVL,20);
i++;
拟换下个音符
TR1=0;
停奏
os_wait2(K_IVL,100);
奏完1遍后的等待
3、调试说明
使用LEIL软件编译调试代码,确保无误后下载到单片机里,硬件电路连接p2口LED的所有跳帽,下载生成的hex文件,即可看到LED屏幕上能够出现明亮的蝴蝶图案并且有歌曲的伴随。
4、设计结果及错误分析
能够在LED屏上清晰显示蝴蝶图案,但是没有达到流水灯和歌曲同时实现的目的,经努力修改程序代码还是没能实现。
直到主动找老师询问后,才知道是因为应该用IO中断来控制程序的并发进行,以后会吸取教训,认真落实老师给的任务,不懂即问。
四、总结
在此次设计中,我得到以下体会:
1.这次图案设计的过程让我进一步熟悉了KEIL软件的使用。
2.通过这次设计,重新复习并进一步学习了51单片机的优点,明确了单片机在显示生活中的应用是十分广泛的。
3.让我明白任何一件事情都必须小心谨慎,稍有差错变不会得出正确的结论。
就像程序代码,错一点,整个程序也就错了。
所以我们应该养成严谨学习习惯。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 控制 LED 蜂鸣器 毕业 课程设计 报告