基于51单片机控制的语音报时万年历课程设计本科论文.docx

上传人:b****1 文档编号:13388476 上传时间:2023-06-13 格式:DOCX 页数:51 大小:148.79KB
下载 相关 举报
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第1页
第1页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第2页
第2页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第3页
第3页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第4页
第4页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第5页
第5页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第6页
第6页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第7页
第7页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第8页
第8页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第9页
第9页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第10页
第10页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第11页
第11页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第12页
第12页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第13页
第13页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第14页
第14页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第15页
第15页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第16页
第16页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第17页
第17页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第18页
第18页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第19页
第19页 / 共51页
基于51单片机控制的语音报时万年历课程设计本科论文.docx_第20页
第20页 / 共51页
亲,该文档总共51页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于51单片机控制的语音报时万年历课程设计本科论文.docx

《基于51单片机控制的语音报时万年历课程设计本科论文.docx》由会员分享,可在线阅读,更多相关《基于51单片机控制的语音报时万年历课程设计本科论文.docx(51页珍藏版)》请在冰点文库上搜索。

基于51单片机控制的语音报时万年历课程设计本科论文.docx

基于51单片机控制的语音报时万年历课程设计本科论文

基于51单片机控制的语音报时万年历

-----20/11/2013SDU(WH)

1.实验要求

运用单片机及相关外设实现以下功能:

1)万年历及时钟显示

2)时间日期可调

3)可对时间进行整点报时和随机报时

2.方案分析

根据实验要求,选用STC公司的8051系列,STC12C5A16S2增强型51单片机。

此单片机功能强大,具有片内EEPROM、1T分频系数、片内ADC转换器等较为实用功能,故选用此款。

实验中,对日期和时间进行显示,显示的字符数较多,故选用12864LCD屏幕。

该屏幕操作较为便捷,外围电路相对简单,实用性较强。

为了实现要求中的时间日期可调,故按键是不可缺少的,所以使用了较多的按键。

一方面,单片机的I/O口较为充足;另一方面,按键较多,选择的余地较大,方便编程控制。

实验中,并未要求对时间和日期进行保存和掉电续运行,所以并未添加EEPROM和DS12C887-RTC芯片。

实际上,对万年历来说,这是较为重要的,但为了方便实现和编程的简单,此处并未添加,而是使用单片机的定时器控制时间,精度有差别。

且上电默认时间为2014-01-0109:

00:

00之后需要手动调整为正确时间。

要求中的语音报时功能,这里选用ISD1760芯片的模块来帮助实现。

此模块通过软件模拟SPI协议控制。

先将所需要的声音片段录入芯片的EEPROM区域,之后读出各段声音的地址段,然后在程序中定义出相应地址予以控制播放哪一声音片段。

3.电路硬件设计

实际效果图

4.程序代码部分

Main.h

#ifndef_MAIN_H

#define_MAIN_H

#include"reg52.h"

#include"INTRINS.H"

#include"math.h"

#include"string.h"

#include"key.h"

#include"led.h"

#include"12864.h"

#include"main.h"

#include"isd1700.h"

#include"sound.h"

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

Main.c

#include"main.h"

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();//调用LCD字库初始化程序

TMOD=0x01;//使用定时器T0

TH0=(65536-1000)/256;//定时器高八位赋初值

TL0=(65536-1000)%256;//定时器低八位赋初值*/

EA=1;//开中断总允许

ET0=1;//允许T0中断

TR0=1;//启动定时器T0

while

(1)

{

if(update_flag)

{

lcd_pos(1,0);

for(i=0;i<10;i++)

write_dat(date_show[i]);

lcd_pos(2,4);

for(i=0;i<8;i++)

write_dat(time_show[i]);

update_flag=0;

}

if(key!

=keyscan_nor())

{

key=keyscan_nor();

if(key==8&&!

adjust_flag)

adjust_flag=1;

if(key&&adjust_flag)

{

if(key==1)

{

adjust_pos++;

if(adjust_pos==14)

adjust_pos=0;

}

elseif(key==2)

{

if(!

adjust_pos)

adjust_pos=13;

else

adjust_pos--;

}

elseif(key==6)

{

if(!

adjust_pos)

sec++;

elseif(adjust_pos==1)

sec=sec+10;

elseif(adjust_pos==2)

min++;

elseif(adjust_pos==3)

min=min+10;

elseif(adjust_pos==4)

hour++;

elseif(adjust_pos==5)

hour=hour+10;

elseif(adjust_pos==6)

day++;

elseif(adjust_pos==7)

day=day+10;

elseif(adjust_pos==8)

month++;

elseif(adjust_pos==9)

month=month+10;

elseif(adjust_pos==10)

year_l++;

elseif(adjust_pos==11)

year_l=year_l+10;

elseif(adjust_pos==12)

year_f++;

elseif(adjust_pos==13)

year_f=year_f+10;

}

elseif(key==7)

{

if(!

adjust_pos)

sec--;

elseif(adjust_pos==1)

sec=sec-10;

elseif(adjust_pos==2)

min--;

elseif(adjust_pos==3)

min=min-10;

elseif(adjust_pos==4)

hour--;

elseif(adjust_pos==5)

hour=hour-10;

elseif(adjust_pos==6)

day--;

elseif(adjust_pos==7)

day=day-10;

elseif(adjust_pos==8)

month--;

elseif(adjust_pos==9)

month=month-10;

elseif(adjust_pos==10)

year_l--;

elseif(adjust_pos==11)

year_l=year_l-10;

elseif(adjust_pos==12)

year_f--;

elseif(adjust_pos==13)

year_f=year_f-10;

}

elseif(key==3)

adjust_flag=0;

if(key==6||key==7)

{

if(sec>=80)

sec=0;

if(min>=80)

min=0;

if(hour>=40)

hour=0;

if(month>30)

month=1;

if(day>50)

day=0;

if(year_f>=120)

year_f=0;

if(year_l>=120)

year_l=0;

}

}

}

if(key==3)

report_flag=1;

if(report_flag)

{

clrram();

Dingwei(2,1);

lcd_mesg("REPORTING!

!

!

");

report();

clrram();

}

}

}

voidtime0()interrupt1

{

staticunsignedchartimer=0;

TH0=(65536-50000)/256;//定时器高八位赋初值

TL0=(65536-50000)%256;//定时器低八位赋初值

timer++;

if(timer==20)

{

sec++;

time_show[6]=sec/10+48;

time_show[7]=sec%10+48;

if(sec>=60)

{

sec=0;

min++;

time_show[6]=sec/10+48;

time_show[7]=sec%10+48;

time_show[3]=min/10+48;

time_show[4]=min%10+48;

}

if(min>=60)

{

min=0;

hour++;

time_show[3]=min/10+48;

time_show[4]=min%10+48;

time_show[0]=hour/10+48;

time_show[1]=hour%10+48;

}

if(hour>=24)

{

hour=0;

day++;

time_show[0]=hour/10+48;

time_show[1]=hour%10+48;

date_show[8]=day/10+48;

date_show[9]=day%10+48;

}

if((day>=29&&!

leap_year_flag&&month==2)||(day==30&&leap_year_flag&&month==2)||

(day==31&&(month==4||month==6||month==9||month==11))||(month==32))

{

day=1;

month++;

date_show[8]=day/10+48;

date_show[9]=day%10+48;

date_show[5]=month/10+48;

date_show[6]=month%10+48;

}

if(month>=13)

{

month=1;

year_l++;

date_show[5]=month/10+48;

date_show[6]=month%10+48;

date_show[0]=year_f/10+48;

date_show[1]=year_f%10+48;

date_show[2]=year_l/10+48;

date_show[3]=year_l%10+48;

}

if(year_l>=100)

{

year_l=0;

year_f++;

if(((!

((year_f*100+year_l)%4))&&((year_f*100+year_l)%100))||(!

((year_f*100+year_l)%400)))

leap_year_flag=1;

else

leap_year_flag=0;

date_show[0]=year_f/10+48;

date_show[1]=year_f%10+48;

date_show[2]=year_l/10+48;

date_show[3]=year_l%10+48;

}

timer=0;

update_flag=1;

if(adjust_flag)

{

time_show[7]=sec%10+48;

time_show[6]=sec/10+48;

time_show[4]=min%10+48;

time_show[3]=min/10+48;

time_show[1]=hour%10+48;

time_show[0]=hour/10+48;

date_show[9]=day%10+48;

date_show[8]=day/10+48;

date_show[6]=month%10+48;

date_show[5]=month/10+48;

date_show[3]=year_l%10+48;

date_show[2]=year_l/10+48;

date_show[1]=year_f%10+48;

date_show[0]=year_f/10+48;

}

}

if(adjust_flag&&timer==10)

{

if(!

adjust_pos)

time_show[7]='';

elseif(adjust_pos==1)

time_show[6]='';

elseif(adjust_pos==2)

time_show[4]='';

elseif(adjust_pos==3)

time_show[3]='';

elseif(adjust_pos==4)

time_show[1]='';

elseif(adjust_pos==5)

time_show[0]='';

elseif(adjust_pos==6)

date_show[9]='';

elseif(adjust_pos==7)

date_show[8]='';

elseif(adjust_pos==8)

date_show[6]='';

elseif(adjust_pos==9)

date_show[5]='';

elseif(adjust_pos==10)

date_show[3]='';

elseif(adjust_pos==11)

date_show[2]='';

elseif(adjust_pos==12)

date_show[1]='';

elseif(adjust_pos==13)

date_show[0]='';

update_flag=1;

}

if(!

min&&!

sec&&!

adjust_flag)

report_flag=1;

}

unsignedcharreport()

{

PlaySoundTick(11);

long_delay();

if(!

min)

{

if(hour<=10)

{

PlaySoundTick(hour);

short_delay();

PlaySoundTick(12);

short_delay();

PlaySoundTick(14);

short_delay();

}

elseif(hour>10&&hour<20)

{

PlaySoundTick(10);

short_delay();

PlaySoundTick(hour-10);

short_delay();

PlaySoundTick(12);

short_delay();

PlaySoundTick(14);

short_delay();

}

elseif(hour==20)

{

PlaySoundTick

(2);

short_delay();

PlaySoundTick(10);

short_delay();

PlaySoundTick(12);

short_delay();

PlaySoundTick(14);

short_delay();

}

else

{

PlaySoundTick

(2);

short_delay();

PlaySoundTick(10);

short_delay();

PlaySoundTick(hour-20);

short_delay();

PlaySoundTick(12);

short_delay();

PlaySoundTick(14);

short_delay();

}

}

else

{

if(hour<=10)

{

PlaySoundTick(hour);

short_delay();

PlaySoundTick(12);

short_delay();

}

elseif(hour>10&&hour<20)

{

PlaySoundTick(10);

short_delay();

PlaySoundTick(hour-10);

short_delay();

PlaySoundTick(12);

short_delay();

}

elseif(hour==20)

{

PlaySoundTick

(2);

short_delay();

PlaySoundTick(10);

short_delay();

PlaySoundTick(12);

short_delay();

}

else

{

PlaySoundTick

(2);

short_delay();

PlaySoundTick(10);

short_delay();

PlaySoundTick(hour-20);

short_delay();

PlaySoundTick(12);

short_delay();

}

if(min<=10)

{

PlaySoundTick(min);

short_delay();

PlaySoundTick(13);

short_delay();

}

elseif(min>10&&min%10)

{

PlaySoundTick(min/10);

short_delay();

PlaySoundTick(10);

short_delay();

PlaySoundTick(min-10*(min/10));

short_delay();

PlaySoundTick(13);

short_delay();

}

else

{

PlaySoundTick(min/10);

short_delay();

PlaySoundTick(10);

short_delay();

PlaySoundTick(13);

short_delay();

}

}

report_flag=0;

time_show[7]=sec%10+48;

time_show[6]=sec/10+48;

time_show[4]=min%10+48;

time_show[3]=min/10+48;

time_show[1]=hour%10+48;

time_show[0]=hour/10+48;

date_show[9]=day%10+48;

date_show[8]=day/10+48;

date_show[6]=month%10+48;

date_sho

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2