音乐倒数计数器课程设计报告.docx
《音乐倒数计数器课程设计报告.docx》由会员分享,可在线阅读,更多相关《音乐倒数计数器课程设计报告.docx(25页珍藏版)》请在冰豆网上搜索。
音乐倒数计数器课程设计报告
湖南涉外经济学院
课程设计报告
课程名称:
单片机原理及应用
报告题目:
音乐倒数计数器
学生姓名:
所在学院:
信息科学与工程学院
专业班级:
学生学号:
指导教师:
廖亦凡
2014年6月4日
课程设计任务书
报告题目
音乐倒数计数器
完成时间
学生姓名
专业班级
指导教师
廖亦凡
职称
总体设计要求和技术要点
利用数字AT89C51单片机实现倒数计数器的功能,设定时间后在LED数码管上显示相应的时间。
其功能和性能指标如下:
⑴字符型LCD(16×2)显示器,显示格式为“TIME分分:
秒秒”。
⑵用4个按键操作来设置当前想要倒计数的时间。
⑶一旦按下键则开始倒计数,当计数为0时,发出一阵音乐声。
⑷程序执行后工作指示灯LCD闪动,表示程序开始执行,按下操作键K1~K4动作如下:
●K1---可调整倒计数的时间1~60分钟。
●K2---设置倒计数的时间为5分钟,显示“0500”。
●K3---设置倒计数的时间为10分钟,显示“1000”。
●K4--设置倒计数的时间为20分钟,显示“2000”
⑸复位后LCD的画面应能显示倒计时的分钟和秒数,此时按K1键,则在LCD上显示出设置画面。
此时,若:
●按K2键---增加倒计数的时间1分钟。
●按K3键---减少倒计数的时间1分钟。
●按K4键---设置完成。
工作内容及时间进度安排
第15周:
周1---周3:
立题、论证方案设计
周4---周5:
预答辩
第16周:
周1---周3:
仿真实验7
周4---周5:
验收答辩
课程设计成果
1.与设计内容对应的软件程序
2.课程设计总结报告
摘要
单片机自20世纪70年代问世以来,以其极高的性能价格比,收到人们的重视和关注,应用很广、发展很快。
而51单片机是各单片机最为典型和最有代表性的一种。
本实验是基于MCS51系列单片机所设计的,可以实现键盘按键与数字动态显示并可以用音乐倒数的计数器。
本设计基于单片机技术原理,以单片机芯片STC89C51作为核心控制器,通过硬件电路的制作以及软件程序的编程,设计制作出一个计数器,包括以下功能:
输出时间,按下键就开始计时,并将时间显示在LCD1602显示器上。
当倒数计数为0是,蜂鸣器就发出音乐声响等等。
该计数系统主要由计数器模块、LCD显示快、蜂鸣器模块、键盘模块、复位模块等部分组成。
关键词:
STC89C51;键盘;LCD1602显示;蜂鸣器
一、概述…………………………………………………………………………1
二、方案设计与论证………………………………………………………………2
三、系统硬件电路设计与分析………………………………………………………………2
3.1主控制器—AT89S51单机…………………………………………………………2
3.2显示电路—LCD数码………………………………………………………2
4、系统软件程序设计与分析…………………………………………………………2
4.1程序流程图…………………………………………………………………………2
4.2源程序………………………………………………………………………………6
5、系统的仿真与调试………………………………………………………………………13
5.1硬件调试……………………………………………………………………………13
5.2软件调试……………………………………………………………………………13
5.3软硬件调试…………………………………………………………………………13
六、总原理图及元器件清单………………………………………………………………14
6.1总原理图……………………………………………………………………………14
6.2元器件清单………………………………………………………………14
6.2.1AT89C51芯片………………………………………………………14
6.2.2字符型LCD1602……………………………………………………………15
6.2.3按键控制模块………………………………………………………………16
6.2.4其它元件……………………………………………………………………17
7、结论与心得……………………………………………………………………………17
8、参考文献…………………………………………………………………………………18
一、概述
随着科技的发展和社会的进步,人们对数字钟的要求越来越高,多功能数字钟不管在性能还是在样式上都发生了质的变化。
数字钟实际上是一个对标准频率进行计数的计数电路,走时精度高,稳定性好,使用方便,不需要经常调校。
单片计算机即单片微型计算机,是集CPU,RAM,ROM,定时/计数和多种接口于一体的微控质器。
它体积小成本低,功能强,广泛应用于智能产品和工业自动化上。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大地方便,而且大大的扩展了钟表原先报时功能,诸如定时自动报警、0按时自动打铃、定时广播、自动启闭路灯、定时开机烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以数字化为基础的,因此研究数字钟及扩大其应用有着非常现实的意义。
本系统采用单片机作为数字钟的核心控制器,读取时钟的值,并通过LCD液晶显示器现实现实出来,而且可以通过按键电路控制执行信号,给时钟赋初值。
还可以设置闹钟,当计数为0时,发出一阵音乐声。
二、方案设计与论证
音乐倒数计数器所倒数的时间由数字显示,控制器使用单片机AT89C51。
本设计基于单片机技术原理,以单片机芯片AT89C51作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个计数器,包括以下功能:
输出时间,按下键就开始计时,并将时间显示在LCD1602显示器上。
当倒计数为0时,蜂鸣器就发出音乐声响等等。
该计数器系统主要由计数器模块、LCD显示器模块、蜂鸣器模块、键盘模块、复位模块等部分组成。
总体设计方框图如图1-1所示。
图1-1总体设计方框图
三、系统硬件电路设计与分析
3.1主控制器——AT89S51单片机
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
●与MCS-51兼容
●4K字节可编程闪烁存储器
●寿命:
1000写/擦循环
●全静态工作:
0Hz-24Hz
●三级程序存储器锁定
●128*8位内部RAM
●32可编程I/O线
●两个16位定时器/计数器
●5个中断源
●可编程串行通道
●低功耗的闲置和掉电模式
●片内振荡器和时钟电路
3.2显示电路——LCD数码管
采用静态显示,静态显示是指LCD显示某一屏字符时,时钟保持当前字符的显示,不使用移屏显示。
便于控制,同时能够满足正常的显示效果。
由于在显示中存在播放时间的动态变化,这样的话,即使是不产生整屏移动,也能给人动态感,也易于控制。
四、系统软件程序设计与分析
4.1程序流程图
主程序开始初始化,然后扫描键盘、复位电路和计数器。
当键盘按键有按下时,调整计数器值,LCD显示新值。
当复位键有按下时,计数器复位为初值,重新倒计数。
当计数器值倒计为0时,蜂鸣器发出声音,计数器停止倒计,程序结束。
主程序流程图、LCD显示流程图和按键流程图分别如下图4-1、图4-2和图4-3所示。
否
否否
是是
是
图4-1主程序流程图
是否
是否
是
否
是
否
图3-2LCD显示流程图
否
是
是否
图3-3按键流程
4.2源程序
#include
#include
#definetime100
#defineuintunsignedint
#defineucharunsignedchar
uintt,flag,flag0,flag1,flag2,flag3,flag4,flag5,minute,second=60;
ucharnum,j,i,k=0;
ucharcodetable[]="TIME00:
00";
uintcodetable1[]={64580,64684,64777,64820,64898,64968,65030};
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
sbitkey4=P1^3;
sbitkey5=P1^4;
sbitP1_5=P1^5;
sbitRS=P2^0;
sbitRW=P2^1;
sbitE=P2^2;
sbitled_red=P2^3;
voidwrite_time(uintaddr,uintdate);
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
///////延时1S////////////
voiddelay1(void)
{
uchara,b,c;
for(c=13;c>0;c--)
for(b=247;b>0;b--)
for(a=142;a>0;a--);
}
////////1602写命令函数//////
voidwrite_com(ucharcom)
{
RS=0;
P3=com;
delay(5);
E=1;
delay(10);
E=0;
}
//////1602写数据函数//////
voidwrite_date(uchardate)
{
RS=1;
P3=date;
delay(5);
E=1;
delay(10);
E=0;
}
//////按键1处理函数///////
voidKEY1()
{
while(flag1)
{
if(key2==0)
{
delay(time);
if(key2==0)
{
if(minute<=60)
minute=minute+1;
write_time(7,minute);
}
}
if(key3==0)
{
delay(time);
if(key3==0)
{
if(minute>0)
minute=minute-1;
write_time(7,minute);
}
}
if(key4==0||key5==0)
{
delay(150);
if(key4==0||key5==0)
{
flag1=0;
flag=1;
TR0=1;
}
}
}
}
//////按键2处理函数//////
voidKEY2()
{
minute=5;
write_time(7,minute);
while(flag2)
{
if(key5==0)
{
delay(time);
if(key5==0)
{
flag2=0;
flag=1;
TR0=1;
}
}
}
}
//////按键3处理函数//////
voidKEY3()
{
minute=10;
write_time(7,minute);
while(flag3)
{
if(key5==0)
{
delay(time);
if(key5==0)
{
flag3=0;
flag=1;
TR0=1;
}
}
}
}
//////按键4处理函数//////
voidKEY4()
{
minute=20;
write_time(7,minute);
while(flag4)
{
if(key5==0)
{
delay(150);
if(key5==0)
{
flag4=0;
flag=1;
TR0=1;
}
}
}
}
voidwrite_time(uintaddr,uintdate)
{
uintge,shi;
ge=date%10;
shi=date/10;
write_com(0x80+addr);
write_date(0x30+shi);
write_date(0x30+ge);
if(addr==7&&date==0)
j=1;
if(j==1&&addr==10&&date==0)
{
flag0=1;
TR0=0;
TR1=1;
flag5=1;
}
}
//////初始化函数//////
voidinit()
{
P1=0xff;
RW=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0xfc;
TL1=0x44;
ET1=1;
ET0=1;
//TR1=1;
//TR0=1;
EA=1;
flag0=1;
for(num=0;num<12;num++)
{
write_date(table[num]);
delay(20);
}
}
voidstart()
{
if(key1==0)
{
delay(time);
if(key1==0)
{
flag0=0;
flag1=1;
KEY1();
}
}
if(key2==0)
{
delay(time);
if(key2==0)
{
flag0=0;
flag2=1;
KEY2();
}
}
if(key3==0)
{
delay(time);
if(key3==0)
{
flag0=0;
flag3=1;
KEY3();
}
}
if(key4==0)
{
delay(150);
if(key4==0)
{
flag0=0;
flag4=1;
KEY4();
}
}
}
voidwrite_time0()
{
minute=minute-1;
write_time(7,minute);
write_time(10,59);
flag=0;
}
voidcounter()
{
if(t==20)
{
led_red=led_red^1;
if(flag==1)
write_time0();
t=0;
second=second-1;
write_time(10,second);
if(k==1&&second==59)
{
if(minute>0)
minute=minute-1;
write_time(7,minute);
}
if(second==0)
{
k=1;
second=60;
}
}
}
intmain()
{
init();
while
(1)
{
while(flag0)
start();
counter();
while(flag5)
{
delay1();
i++;
if(i>7)
i=0;
}
}
return0;
}
voidinter0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
}
voidiniter1()interrupt3
{
TH1=table1[i]/256;
TL1=table1[i]%256;
P1_5=~P1_5;
if(key5==0)
{
delay(100);
if(key5==0)
{
TR1=0;
flag5=0;
k=0;
j=0;
}
}
}
五、系统的仿真与调试
5.1硬件调试
硬件调试分为静态调试和动态调试,对于硬件调试而言,只要认真焊接,硬件一般不会出现什么问题的。
静态调试一般采用的工具是万用表,它是在用户系统未工作时的一种硬件检测。
动态调试是在用户系统工作的情况下发现和排查错误的一种硬件检测。
调试步骤是:
首先把电路分为若干模块,调试过程中与该模块无关的元件可以不加考虑,这样可把故障限定在一定的范围内;故障清除后,把各个模块合在一起进行联调,即可完成整个硬件调试工作。
5.2软件调试
软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。
5.3软硬件调试
软硬件联调是指把调试无误的软件程序烧制进单片机芯片内部,通上电源后,检查硬件工作是否有预期的效果,如果没有则需要检测软件是否在实现功能上有欠缺。
若有错误,通过改写软件来调试,直至达到预期效果,则设计圆满成功。
本课程设计调试结果如下图4-1所示。
图4-1课程设计调试结果
六、总原理图及元器件清单
6.1总原理图
图6-1总原理图
6.2元器件清单
6.2.1AT89C51芯片
AT89C51芯片图如下图6-2所示。
图6-2AT89C51芯片
①简介:
AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
②主要特性:
与MCS-51兼容;4K字节可编程闪烁存储器;寿命:
1000写/擦循环;数据保留时间:
10年;全静态工作:
0Hz-24MHz;三级程序存储器锁定;128×8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。
6.2.2字符型LCD1602
字符型LCD1602如下图6-3所示。
图6-3字符型LCD1602
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。
VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,各引脚符号及其功能表如下表6-1所示。
引脚
符号
功能说明
1
VSS
一般接地
2
VDD
接电源(+5V)
3
V0
液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
4
RS
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5
R/W
R/W为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
6
E
E(或EN)端为使能(enable)端,下降沿使能。
7
DB0
底4位三态、双向数据总线0位(最低位)
8
DB1
底4位三态、双向数据总线1位
9
DB2
底4位三态、双向数据总线2位
10
DB3
底4位三态、双向数据总线3位
11
DB4
高4位三态、双向数据总线4位
12
DB5
高4位三态、双向数据总线5位
13
DB6
高4位三态、双向数据总线6位
14
DB7
高4位三态、双向数据总线7位(最高位)(也是busyflag)
15
BLA
背光电源正极
16
BLK
背光电源负极
表6-1LCD各引脚及其功能表
6.2.3按键控制模块
按键用于控制数码显示、LCD显示、扬声器等模块的工作。
通过扫描按键是否按下,来设定各模块的工作情况,使各模块可以在按键的控制下,有序地进行工作。
设计中使用单个按键实现单个功能,属于较为简单的控制方式。
在多功能系统设计的试验中我们使用五个按键分别与单片机的p1.0、p1.1、p1.2、p1.3、p1.4相连。
通过按下相应的按键来处理相应的程序。
如下图6-4所示。
图6-4按键控制模块图
6.2.4其它元件
其它元件图如下图6-5所示。
图6-5其它元件图
七、结论与心得
经过这次的的课程设计,简单带有LCD显示的音乐倒数计数器基本完成,系统基本功能基本实现,测试运行也基本正常。
该系统基本上完成了日期的显示与计数的功能。
当然这个系统还存在许多有待完善的地方:
▲功能相对较少,有待于添加,比方说时钟与闹钟功能;
▲界面设计得不够精致完美;
这次课程设计的时间虽然不算很长,但使我对很多东西有了更深刻的认识。
总结如下:
●查阅资料和阅读相关文献的重要性。
●向同学请教的重要性,团结协作的重要性。
●勤动手的重要性,自己动手,丰衣足食!
在一次次调试代码的过程中,我才明白“代码不是写出来的,是调出来的”的道理。
●对待任何事情都要有耐心和恒心,