基于51单片机控制的语音报时万年历.docx
- 文档编号:5037515
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:15
- 大小:17.05KB
基于51单片机控制的语音报时万年历.docx
《基于51单片机控制的语音报时万年历.docx》由会员分享,可在线阅读,更多相关《基于51单片机控制的语音报时万年历.docx(15页珍藏版)》请在冰豆网上搜索。
基于51单片机控制的语音报时万年历
鉴于51单片机控制的语音报时万年历
-----20/11/2013SDU(WH)
一.实验要求
运用单片机及有关外设实现以下功能:
1)万年历实时钟显示
2)时间日期可调
3)可对时间进行整点报时和随机报时
二.方案剖析
依据实验要求,采用STC企业的8051系列,STC12C5A16S2加强型51单片机。
此单片机功能强盛,拥有片内EEPROM、1T分频系数、片内ADC变换器等较为适用功能,应采用此款。
实验中,对日期和时间进行显示,显示的字符数许多,应采用12864LCD屏幕。
该屏幕
操作较为便利,外头电路相对简单,适用性较强。
为了实现要求中的时间日期可调,故按键是不行缺乏的,因此使用了许多的按键。
一方
面,单片机的I/O口较为充分;另一方面,按键许多,选择的余地较大,方便编程控制。
实验中,并未要求对时间和日期进行保留和掉电续运转,因此并未增添EEPROM和
DS12C887-RTC芯片。
实质上,对万年向来说,这是较为重要的,但为了方便实现和编程的
简单,此处并未增添,而是使用单片机的准时器控制时间,精度有差异。
且上电默认时间为
2014-01-0109:
00:
00以后需要手动调整为正确时间。
要求中的语音报时功能,这里采用ISD1760芯片的模块来帮助实现。
此模块经过软件模
拟SPI协议控制。
先将所需要的声音片段录入芯片的EEPROM地区,以后读出各段声音的地点段,而后在程序中定义出相应地点予以控制播放哪一声音片段。
三.电路硬件设计
实质成效图
四.程序代码部分
#ifndef_MAIN_H
#define_MAIN_H
#include""
#include""
#include""
#include""
#include""
#include""
#include""
#include""
#include""
#include""
externunsignedintcount;
externunsignedintkey_time[8];
externunsignedcharkey_new;
externunsignedcharkey_old;
externunsignedcharstop_flag;
externunsignedcharkey_follow[8];
externunsignedintkey_num[8];
sbitBEEP=P3^7;
sbitISD_SS=P0^7;
sbitISD_MISO=P0^4;
sbitISD_MOSI=P0^5;
sbitISD_SCLK=P0^6;
externunsignedchardate_show[];
externunsignedchartime_show[];
externunsignedcharsec;
externunsignedcharmin;
externunsignedcharhour;
externunsignedcharday;
externunsignedcharmonth;
externunsignedcharyear_f;
externunsignedcharyear_l;
externunsignedcharleap_year_flag;
externunsignedcharupdate_flag;
externunsignedcharadjust_flag;
externunsignedcharkey;
unsignedcharreport();
#endif
#include""
unsignedintcount=0;
unsignedintkey_num[8]=0;
unsignedcharkey_new=0;
unsignedcharkey_old=0;
unsignedcharstop_flag=0;
unsignedcharkey_follow[8]=0;
unsignedcharsec=1;
unsignedcharmin=0;
unsignedcharhour=9;
unsignedcharday=1;
unsignedcharmonth=1;
unsignedcharyear_f=20;
unsignedcharyear_l=14;
unsignedcharleap_year_flag=0;
unsignedchardate_show[]="2014-01-01";unsignedchartime_show[]="09:
00:
00";unsignedcharupdate_flag=1;unsignedcharkey=0;unsignedcharadjust_flag=0;
unsignedcharadjust_pos=0;
unsignedcharreport_flag=0;
voidmain()
{
unsignedchari;
P2=0XFF;
BEEP=0;
init();
initinal();{
buzy();
RW=0;
RS=DI;
DataPort=data1;
EN=1;
EN=0;
}
voiddelayms(unsignedintn)//
{
unsignedinti,j;
for(i=0;i<3*n;i++)
for(j=0;j<2000;j++);
延时10×n毫秒程序
}
voiddelay(unsignedintm)//延时程序,奇妙级
{
while(m--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
voidwrite_cmd(unsignedcharcmd)
{
RS=0;RW=0;EN=0;
P1=cmd;
delayms
(1);
EN=1;
delayms
(1);
EN=0;
}
voidwrite_dat(unsignedchardat)
{
RS=1;
RW=0;
EN=0;
P1=dat;
delayms
(1);
EN=1;
delayms
(1);
EN=0;
}
voidlcd_pos(unsignedcharx,unsignedchary)
{
unsignedcharpos;
if(x==0)
x=0x80;
elseif(x==1)
x=0x90;
elseif(x==2)
x=0x88;
elseif(x==3)
x=0x98;
pos=x+y;
write_cmd(pos);
}
voidclrram(void)
{
write_cmd(0x30);
write_cmd(0x01);
}
#ifndef_SOUND_H
#define_SOUND_H
#include""
//以下为语音信息对应播放开端地点定义
A为开始,B为结束
#definesound_0A
0x0012
#definesound_0B
0x0017
#definesound_1A
0x0019
#definesound_1B
0x0025
#definesound_2A
0x0027
#definesound_2B
0x002e
#definesound_3A
0x002f
#definesound_3B
0x0039
#definesound_4A
0x003b
#definesound_4B
0x0048
#definesound_5A
0x004a
#definesound_5B
0x004f
#definesound_6A
0x0052
#definesound_6B
0x0159
#definesound_7A0x005c
#definesound_7B
0x0062
#definesound_8A
0x0065
#definesound_8B
0x0131
#definesound_9A
0x006f
#definesound_9B
0x015F
#definesound_10A
0x0079
#definesound_10B
0x015E
#definesound_11A
0x0082
#definesound_11B
0x018A
#definesound_12A
0x0091
#definesound_12B
0x0100
#definesound_13A
0x009f
#definesound_13B
0x0100
#definesound_14A
0x00ac
#definesound_14B
0x0100
voidGetSound(unsignedcharsoundtick);
voidPlaySoundTick(unsignedcharnumber);
voiddelay_isd(unsignedinttime);
voidshort_delay();
voidlong_delay();
#endif
#include""
voidGetSound(unsignedcharsoundtick)
{
ISD_SS=0;
switch(soundtick)
{
case
0:
{
isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,
sound_0A,
sound_0B);}break;
case
1:
{
isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,
sound_1A,
sound_1B);}break;
case
2:
{
isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,
sound_2A,
sound_2B);}break;
case3:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_3A,sound_3B);}break;
case4:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_4A,sound_4B);}break;
case5:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_5A,sound_5B);}break;
case6:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_6A,sound_6B);}break;
case7:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_7A,sound_7B);}break;
case8:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_8A,sound_8B);}break;
case9:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_9A,sound_9B);}break;
case10:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_10A,sound_10B);}break;
case11:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_11A,sound_11B);}break;
case12:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_12A,sound_12B);}break;
case13:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_13A,sound_13B);}break;
case14:
{isd1700_7byte_comm(ISD1700_SET_PLAY|ISD_LED,sound_14A,sound_14B);}break;
default:
break;
}
ISD_SS=1;
}
voidPlaySoundTick(unsignedcharnumber)
{
spi_stop();
delay_isd(30000);
GetSound(number);
}
voiddelay_isd(unsignedinttime)
{
while(time--!
=0);
}
voidshort_delay()
{
delay_isd(30000);
delay_isd(30000);
delay_isd(30000);
delay_isd(30000);
delay_isd(30000);
delay_isd(30000);
delay_isd(30000);
delay_isd(30000);
delay_isd(30000);
}
voidlong_delay()
{
short_delay();
short_delay();
short_delay();
short_delay();
}
#ifndef_KEY_H
#define_KEY_H
#include""
sbitKEY1=P2^0;
sbitKEY2=P2^1;
sbitKEY3=P2^2;
sbitKEY4=P2^3;
sbitKEY5=P2^4;
sbitKEY6=P2^5;
sbitKEY7=P2^6;
sbitKEY8=P2^7;
sbitKEY_SURE=P3^6;
voidkey_delay(unsignedcharz);
unsignedcharkeyscan_nor();
#endif
#include""
unsignedcharkeyscan_nor()
{
if(!
KEY1)
{
key_delay(20);
if(!
KEY1)
{
LED1=0;
return1;
}
}
if(!
KEY2)
{
key_delay(20);
if(!
KEY2)
{
LED2=0;
return2;
}
}
if(!
KEY3)
{
key_delay(20);
if(!
KEY3)
{
LED3=0;
return3;
}
}
if(!
KEY4)
{
key_delay(20);
if(!
KEY4)
{
LED4=0;
return4;
}
}
if(!
KEY5)
{
key_delay(20);
if(!
KEY5)
{
LED5=0;
return5;
}
}
if(!
KEY6)
{
key_delay(20);
if(!
KEY6)
{
LED6=0;
return6;
}
}
if(!
KEY7)
{
key_delay(20);
if(!
KEY7)
{
LED7=0;
return7;
}
}
if(!
KEY8)
{
key_delay(20);
if(!
KEY8)
{
LED8=0;
return8;
}
}
return0;
}
voidkey_delay(unsignedcharz)
{
unsignedcharx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
五.参加制作人员
ZYL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 控制 语音 报时 万年历