单片机控制LED及蜂鸣器课程设计报告.docx
《单片机控制LED及蜂鸣器课程设计报告.docx》由会员分享,可在线阅读,更多相关《单片机控制LED及蜂鸣器课程设计报告.docx(8页珍藏版)》请在冰豆网上搜索。
单片机控制LED及蜂鸣器课程设计报告
武汉**大学
单片机设计报告
课程单片机课程设计
设计题目LED灯及蜂鸣器
年级专业信息与计算科学09级
学号
学生姓名
指导教师
2012年04月170
设计题目:
一、要求
1.了解LED显示流水灯的原理。
2.能够在LED上显示和控制蜂鸣器的工作。
3.熟悉掌握ke订软件的使用。
二、分析
本设汁使用AT89C52RC做为主控制模块,利用简单的外用电路来驱动LED蝴蝶。
设计分为三个模块:
单片机控制模块,输出显示模块和驱动模块,单片机控制模块以单片机为核心,以软件KEIL编程实现信号输出,以驱动LED及蜂鸣器为LI的。
三、设计
1、硬件方面
(1)、LED驱动模块
图文显示有静态和动态两种方案,本设计•中静动态都用到了。
动态扫描的意思简单的说就是轮流点亮。
具体就图案来说,把内部同行的发光管的阳极相连在一起,先送出对应行的发光管亮灭的数据并锁存,然后选通其它行使其燃亮相同的时间,然后熄灭。
反复循环。
蜂鸣器的控制则是加入三极管接在VCC,单片机的笫20引脚和负极上,以此来控制蜂鸣器的工作。
(2)、硬件设计
实验板上设计一个蝴蝶状的LED显示,可用于简单的图形图像。
蝴蝶的图案是由74个LED绿灯、8个红灯、10个黄灯拼接而成。
其中绿灯直接接到正负极上,黃灯和红灯接到单片机的P2口,来控制其闪动。
2、软件编程(包括流程图、完整的汇编源程序及其注释)
1.电路图
Sdefineuintunsignedint
#defineDY_PORTP2〃设置LED连接的I/O组
#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
//D调7声
}
uintcodetonetab[]={
音阶3个8度
P7
64752,64837,64913,6494&65012,65070,65120,//中音
r?
65144,65186,65225,65242,65274,65303,65328//高音
r?
};
//曲谱,每个音符两项数据:
第1项为音高,第2项为节拍(以1/4拍为单位)
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,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
};
sbitPIO二P「0;
蜂鸣器
/*
sbitSDAT二P3"4;
数码的移位寄存器
sbitSCLK二P3"5;*/
volatileuchartil,thl;
定时器1定时参数
//连接无源
〃连接显示
//存控制
uintled二0x0001;
LED初始显示
数据
bitdir二0;
控制标志
voidTl_sev()interrupt3中断:
控制蜂鸣器发声频率
{TL1二til;
TH1二thl;
P10二!
P10;
}
voidINTl_serv()interrupt2
1,改变LED流水方向标志
{dir二!
dir;
标志改变
}
voidinit()_task_0始化,激活任务广3
{TM0D二Ox10;
初始化
//LED流水方向
//定时器T1
//重装定时数据
〃蜂鸣器驱动倒相
//外中断
//流水方向控制
//任务0:
初
//系统硬件
ET1二1;
//启动任务
m二1;
EXl二1;
os^create_task
(1);
/*os_create_task
(2);*/
os_create_task(3);
〃自身撤退
os_delete_task(0);
}
〃任务
voiddisledO_task_1
1:
16个LED流水显示
{unsignedinttemp;
unsignedinti;
while
(1)
{temp=0xA0;
for(i=0;i<8;i++){//8个流水灯逐个闪动
DY_P0RT二'temp;
temp<<=l;
}
temp=0xA7;
for(i=0;i<8;i++){//8个流水灯反向逐个闪动
DY_PORT="temp;
delay(DY_SPEED);//调用延时函数
temp>>=l;
}
temp=OxAO;
for(i=0;i<8;i++){//8个流水灯依次全部点壳
DY_PORT二temp;
delay(DY.SPEED);//调用延时函数
temp<<=l;
}
temp=0xA7;
for(i=0;i<8;i++){//8个流水灯依次反向全部点亮
DY_PORT二temp;
delay(DY.SPEED);//调用延时函数
temp>>=l;
}
//控制LED流
os_wait2(K_IVL,10);
水显示的节奏
}
}
//任务3:
蜂
voidmusicplay()_task_3
鸣器演奏”三十里铺”
{uchari,j;
while
(1)
{i二0;
while(notetab[i]・delay)
//音高数据为0
//音高数据不为0
//用定时
{if(!
notetab[i].tone)TRI二0;
else
{thl=THl=tonetab[notetab[i].toneT]/256;
参数控制T1的振荡频率(音高)
tll=TLl=tonetab[notetab[i].toneT]%256;
〃控制音符的
//拟换下个音符
//停奏
//奏完1遍后的等
}
for(j=0;jos_wait2(K_IVL,20);
i++;
}
TR1=O;
os_wait2(K_IVL,100);
待
}
}
3、调试说明
使用LEIL软件编译调试代码,确保无误后下载到单片机里,硬件电路连接p2口LED的所有跳帽,下载生成的hex文件,即可看到LED屏幕上能够出现明亮的蝴蝶图案并且有歌曲的伴随。
4、设讣结果及错误分析
能够在LED屏上清晰显示蝴蝶图案,但是没有达到流水灯和歌曲同时实现的
口的,经努力修改程序代码还是没能实现。
直到主动找老师询问后,才知道是因为
应该用10中断来控制程序的并发进行,以后会吸取教训,认真落实老师给的任务,不懂即问。
四、总结
在此次设计•中,我得到以下体会:
1.这次图案设计的过程让我进一步熟悉了KEIL软件的使用。
2.通过这次设计,重新复习并进一步学习了51单片机的优点,明确了单片机在显示生活中的应用是十分广泛的。