基于51單片機(jī)控制的語(yǔ)音報(bào)時(shí)萬(wàn)年歷課程設(shè)計(jì)1_第1頁(yè)
基于51單片機(jī)控制的語(yǔ)音報(bào)時(shí)萬(wàn)年歷課程設(shè)計(jì)1_第2頁(yè)
基于51單片機(jī)控制的語(yǔ)音報(bào)時(shí)萬(wàn)年歷課程設(shè)計(jì)1_第3頁(yè)
基于51單片機(jī)控制的語(yǔ)音報(bào)時(shí)萬(wàn)年歷課程設(shè)計(jì)1_第4頁(yè)
基于51單片機(jī)控制的語(yǔ)音報(bào)時(shí)萬(wàn)年歷課程設(shè)計(jì)1_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于51單片機(jī)控制的語(yǔ)音報(bào)時(shí)萬(wàn)年歷-20/11/2013 sdu(wh)1 實(shí)驗(yàn)要求運(yùn)用單片機(jī)及相關(guān)外設(shè)實(shí)現(xiàn)以下功能:1) 萬(wàn)年歷及時(shí)鐘顯示2) 時(shí)間日期可調(diào)3) 可對(duì)時(shí)間進(jìn)行整點(diǎn)報(bào)時(shí)和隨機(jī)報(bào)時(shí)2 方案分析根據(jù)實(shí)驗(yàn)要求,選用stc公司的8051系列,stc12c5a16s2增強(qiáng)型51單片機(jī)。此單片機(jī)功能強(qiáng)大,具有片內(nèi)eeprom、1t分頻系數(shù)、片內(nèi)adc轉(zhuǎn)換器等較為實(shí)用功能,故選用此款。實(shí)驗(yàn)中,對(duì)日期和時(shí)間進(jìn)行顯示,顯示的字符數(shù)較多,故選用12864lcd屏幕。該屏幕操作較為便捷,外圍電路相對(duì)簡(jiǎn)單,實(shí)用性較強(qiáng)。為了實(shí)現(xiàn)要求中的時(shí)間日期可調(diào),故按鍵是不可缺少的,所以使用了較多的按鍵。一方面,單片

2、機(jī)的i/o口較為充足;另一方面,按鍵較多,選擇的余地較大,方便編程控制。實(shí)驗(yàn)中,并未要求對(duì)時(shí)間和日期進(jìn)行保存和掉電續(xù)運(yùn)行,所以并未添加eeprom和ds12c887-rtc芯片。實(shí)際上,對(duì)萬(wàn)年歷來(lái)說(shuō),這是較為重要的,但為了方便實(shí)現(xiàn)和編程的簡(jiǎn)單,此處并未添加,而是使用單片機(jī)的定時(shí)器控制時(shí)間,精度有差別。且上電默認(rèn)時(shí)間為2014-01-01 09:00:00 之后需要手動(dòng)調(diào)整為正確時(shí)間。要求中的語(yǔ)音報(bào)時(shí)功能,這里選用isd1760芯片的模塊來(lái)幫助實(shí)現(xiàn)。此模塊通過(guò)軟件模擬spi協(xié)議控制。先將所需要的聲音片段錄入芯片的eeprom區(qū)域,之后讀出各段聲音的地址段,然后在程序中定義出相應(yīng)地址予以控制播放哪

3、一聲音片段。3 電路硬件設(shè)計(jì)實(shí)際效果圖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 "i

4、sd1700.h"#include "sound.h"extern unsigned int count;extern unsigned int key_time8;extern unsigned char key_new;extern unsigned char key_old;extern unsigned char stop_flag;extern unsigned char key_follow8;extern unsigned int key_num8;sbit beep=p37;sbit isd_ss=p07;sbit isd_miso=p04;sbi

5、t isd_mosi=p05;sbit isd_sclk=p06;extern unsigned char date_show;extern unsigned char time_show;extern unsigned char sec;extern unsigned char min;extern unsigned char hour;extern unsigned char day;extern unsigned char month;extern unsigned char year_f;extern unsigned char year_l;extern unsigned char

6、leap_year_flag;extern unsigned char update_flag;extern unsigned char adjust_flag;extern unsigned char key;unsigned char report();#endifmain.c#include "main.h"unsigned int count=0;unsigned int key_num8=0;unsigned char key_new=0;unsigned char key_old=0;unsigned char stop_flag=0;unsigned char

7、 key_follow8=0;unsigned char sec=1;unsigned char min=0;unsigned char hour=9;unsigned char day=1;unsigned char month=1;unsigned char year_f=20;unsigned char year_l=14;unsigned char leap_year_flag=0;unsigned char date_show="2014-01-01"unsigned char time_show="09:00:00"unsigned char

8、 update_flag=1;unsigned char key=0;unsigned char adjust_flag=0;unsigned char adjust_pos=0;unsigned char report_flag=0;void main()unsigned char i;p2=0xff;beep=0;init();initinal(); /調(diào)用lcd字庫(kù)初始化程序tmod=0x01; /使用定時(shí)器t0th0=(65536-1000)/256; /定時(shí)器高八位賦初值tl0=(65536-1000)%256; /定時(shí)器低八位賦初值 */ea=1; /開(kāi)中斷總允許et0=1; /允

9、許t0中斷tr0=1; /啟動(dòng)定時(shí)器t0 while(1)if(update_flag)lcd_pos(1,0);for(i=0;i<10;i+) write_dat(date_showi);lcd_pos(2,4);for(i=0;i<8;i+)write_dat(time_showi);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+;i

10、f(adjust_pos=14)adjust_pos=0;else if(key=2)if(!adjust_pos)adjust_pos=13;elseadjust_pos-;else if(key=6)if(!adjust_pos)sec+;else if(adjust_pos=1)sec=sec+10;else if(adjust_pos=2)min+;else if(adjust_pos=3)min=min+10;else if(adjust_pos=4)hour+;else if(adjust_pos=5)hour=hour+10;else if(adjust_pos=6)day+;e

11、lse if(adjust_pos=7)day=day+10;else if(adjust_pos=8)month+;else if(adjust_pos=9)month=month+10;else if(adjust_pos=10)year_l+;else if(adjust_pos=11)year_l=year_l+10;else if(adjust_pos=12)year_f+;else if(adjust_pos=13)year_f=year_f+10;else if(key=7)if(!adjust_pos)sec-;else if(adjust_pos=1)sec=sec-10;e

12、lse if(adjust_pos=2)min-;else if(adjust_pos=3)min=min-10;else if(adjust_pos=4)hour-;else if(adjust_pos=5)hour=hour-10;else if(adjust_pos=6)day-;else if(adjust_pos=7)day=day-10;else if(adjust_pos=8)month-;else if(adjust_pos=9)month=month-10;else if(adjust_pos=10)year_l-;else if(adjust_pos=11)year_l=y

13、ear_l-10;else if(adjust_pos=12)year_f-;else if(adjust_pos=13)year_f=year_f-10;else if(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=

14、1;if(report_flag)clrram();dingwei(2,1);lcd_mesg("reporting!");report();clrram();void time0() interrupt 1static unsigned char timer=0;th0=(65536-50000)/256; /定時(shí)器高八位賦初值tl0=(65536-50000)%256; /定時(shí)器低八位賦初值timer+;if(timer=20)sec+;time_show6=sec/10+48;time_show7=sec%10+48;if(sec>=60)sec=0;min+;

15、time_show6=sec/10+48;time_show7=sec%10+48;time_show3=min/10+48;time_show4=min%10+48; if(min>=60)min=0;hour+;time_show3=min/10+48;time_show4=min%10+48;time_show0=hour/10+48;time_show1=hour%10+48;if(hour>=24)hour=0;day+;time_show0=hour/10+48;time_show1=hour%10+48;date_show8=day/10+48;date_show9=

16、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_show8=day/10+48;date_show9=day%10+48;date_show5=month/10+48;date_show6=month%10+48;if(month>=13)mont

17、h=1;year_l+;date_show5=month/10+48;date_show6=month%10+48;date_show0=year_f/10+48;date_show1=year_f%10+48;date_show2=year_l/10+48;date_show3=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 le

18、ap_year_flag=0;date_show0=year_f/10+48;date_show1=year_f%10+48;date_show2=year_l/10+48;date_show3=year_l%10+48;timer=0;update_flag=1;if(adjust_flag)time_show7=sec%10+48;time_show6=sec/10+48;time_show4=min%10+48;time_show3=min/10+48;time_show1=hour%10+48;time_show0=hour/10+48;date_show9=day%10+48;dat

19、e_show8=day/10+48;date_show6=month%10+48;date_show5=month/10+48;date_show3=year_l%10+48;date_show2=year_l/10+48;date_show1=year_f%10+48;date_show0=year_f/10+48;if(adjust_flag&&timer=10)if(!adjust_pos)time_show7=' 'else if(adjust_pos=1)time_show6=' 'else if(adjust_pos=2)time_s

20、how4=' 'else if(adjust_pos=3)time_show3=' 'else if(adjust_pos=4)time_show1=' 'else if(adjust_pos=5)time_show0=' 'else if(adjust_pos=6)date_show9=' 'else if(adjust_pos=7)date_show8=' 'else if(adjust_pos=8)date_show6=' 'else if(adjust_pos=9)date_

21、show5=' 'else if(adjust_pos=10)date_show3=' 'else if(adjust_pos=11)date_show2=' 'else if(adjust_pos=12)date_show1=' 'else if(adjust_pos=13)date_show0=' 'update_flag=1;if(!min&&!sec&&!adjust_flag)report_flag=1; unsigned char report()playsoundtic

22、k(11);long_delay();if(!min)if(hour<=10)playsoundtick(hour);short_delay();playsoundtick(12);short_delay();playsoundtick(14);short_delay();else if(hour>10&&hour<20)playsoundtick(10);short_delay();playsoundtick(hour-10);short_delay();playsoundtick(12);short_delay();playsoundtick(14);sh

23、ort_delay();else if(hour=20)playsoundtick(2);short_delay();playsoundtick(10);short_delay();playsoundtick(12);short_delay();playsoundtick(14);short_delay();elseplaysoundtick(2);short_delay();playsoundtick(10);short_delay();playsoundtick(hour-20);short_delay();playsoundtick(12);short_delay();playsound

24、tick(14);short_delay();else if(hour<=10)playsoundtick(hour);short_delay();playsoundtick(12);short_delay();else if(hour>10&&hour<20)playsoundtick(10);short_delay();playsoundtick(hour-10);short_delay();playsoundtick(12);short_delay();else if(hour=20)playsoundtick(2);short_delay();play

25、soundtick(10);short_delay();playsoundtick(12);short_delay();elseplaysoundtick(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();else if(min>10&&a

26、mp;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_show7=sec%10+48;time_s

27、how6=sec/10+48;time_show4=min%10+48;time_show3=min/10+48;time_show1=hour%10+48;time_show0=hour/10+48;date_show9=day%10+48;date_show8=day/10+48;date_show6=month%10+48;date_show5=month/10+48;date_show3=year_l%10+48;date_show2=year_l/10+48;date_show1=year_f%10+48;date_show0=year_f/10+48;return 0;isd170

28、0.h#ifndef _isd1760_h#define _isd1760_h#include "main.h"#define isd1700_pu 0x01#define isd1700_stop 0x02#define isd1700_rest 0x03#define isd1700_clr_int 0x04#define isd1700_rd_staus 0x05#define isd1700_rd_play_ptr 0x06#define isd1700_pd 0x07#define isd1700_rd_rec_ptr 0x08#define isd1700_de

29、vid 0x09#define isd1700_play 0x40#define isd1700_rec 0x41#define isd1700_erase 0x42#define isd1700_g_erase 0x43#define isd1700_rd_apc 0x44#define isd1700_wr_apc1 0x45#define isd1700_wr_apc2 0x65#define isd1700_wr_nvcfg 0x46#define isd1700_ld_nvcfg 0x47#define isd1700_fwd 0x48#define isd1700_chk_mem

30、0x49#define isd1700_extclk 0x4a#define isd1700_set_play 0x80#define isd1700_set_rec 0x81#define isd1700_set_erase 0x82#define null 0x00#define isd_led 0x10extern unsigned char data isd_comm_ram_c7;extern void init(void);extern void delay_isd(int x);extern void comm_sate(void);extern void rest_isd_co

31、mm_ptr(void);extern unsigned char t_r_comm_byte(unsigned char comm_data );extern void isd1700_par2_comm(unsigned char comm_par, unsigned int data_par);extern void isd1700_npar_comm(unsigned char comm_par,comm_byte_count); extern void isd1700_7byte_comm(unsigned char comm_par, unsigned int star_addr,

32、 unsigned int end_addr);extern void spi_pu (void);extern void spi_stop (void);extern void spi_rest ( void );extern void spi_clr_int(void);extern void spi_rd_staus(void);extern void spi_rd_play_ptr(void);extern void spi_pd(void);extern void spi_rd_rec_ptr(void);extern void spi_devid(void);extern void

33、 spi_play(void);extern void spi_rec (void);extern void spi_erase (void);extern void spi_g_erase (void);extern void spi_rd_apc(void);extern void spi_wr_apc1 (void);extern void spi_wr_apc2 (void);extern void spi_wr_nvcfg (void);extern void spi_ld_nvcfg (void);extern void spi_fwd (void);extern void spi

34、_chk_mem(void);extern void spi_currrowaddr(void);extern void seril_back_sate(unsigned char byte_number);extern void spi_set_opt(unsigned char spi_set_comm);void init(void);#endifisd1700.c/#pragma src#include "isd1700.h"#include "sound.h"#define uchar unsigned char #define uint un

35、signed intsbit dac_sync=p20;sbit dac_sclk=p21;sbit dac_din =p22;bit re_fig;uchar data comm_temp;uchar data isd_comm_ram7;uchar data isd_comm_ram_c7;uchar data *isd_comm_ptr;uchar data *back_data_ptr;void init(void);void isd_delay(int x);void comm_sate(void);void rest_isd_comm_ptr(void);uchar t_r_com

36、m_byte( uchar comm_data );void isd1700_par2_comm(uchar comm_par, uint data_par);void isd1700_npar_comm(uchar comm_par,comm_byte_count); /no parameter commvoid isd1700_7byte_comm(uchar comm_par, uint star_addr, uint end_addr);void spi_pu (void);void spi_stop (void);void spi_rest ( void );void spi_clr

37、_int(void);void spi_rd_staus(void);void spi_rd_play_ptr(void);void spi_pd(void);void spi_rd_rec_ptr(void);void spi_devid(void);void spi_play(void);void spi_rec (void);void spi_erase (void);void spi_g_erase (void);void spi_rd_apc(void);void spi_wr_apc1 (void);void spi_wr_apc2 (void);void spi_wr_nvcfg

38、 (void);void spi_ld_nvcfg (void);void spi_fwd (void);void spi_chk_mem(void);void spi_currrowaddr(void);void seril_back_sate(uchar byte_number);void spi_set_opt(uchar spi_set_comm);void comm_sate(void) uchar sate_temp;uint apc_temp; if(ri) sate_temp=sbuf; if(sate_temp=0x09) spi_devid(); if(sate_temp=

39、0x44) spi_rd_apc(); if(sate_temp=0x40) spi_play(); if(sate_temp=0x04) spi_clr_int(); if(sate_temp=0x05) spi_rd_staus(); if(sate_temp=0x43) spi_g_erase(); if(sate_temp=0x01) spi_pu (); if(sate_temp=0x02) spi_stop(); if(sate_temp=0x03) spi_rest (); if(sate_temp=0x06) spi_rd_play_ptr(); if(sate_temp=0x

40、07) spi_pd(); if(sate_temp=0x08) spi_rd_rec_ptr(); if(sate_temp=0x41) spi_rec(); if(sate_temp=0x42) spi_erase(); if(sate_temp=0x45) spi_wr_apc1 (); if(sate_temp=0x65) spi_wr_apc2 (); if(sate_temp=0x46) spi_wr_nvcfg (); if(sate_temp=0x47) spi_ld_nvcfg (); if(sate_temp=0x48) spi_fwd (); if(sate_temp=0

41、x49) spi_chk_mem(); if(sate_temp=0x60) spi_currrowaddr(); if(sate_temp=0x80) spi_set_opt(isd1700_set_play|isd_led); /spi_set_opt(isd1700_set_play); if(sate_temp=0x81) spi_set_opt(isd1700_set_rec|isd_led);/spi_set_opt(isd1700_set_rec); isd_comm_ram_c0=isd1700_set_rec ; seril_back_sate(1); if(sate_tem

42、p=0x82) spi_set_opt(isd1700_set_erase|isd_led);/spi_set_opt(isd1700_set_erase); if(sate_temp=isd1700_wr_apc2) ri=0; while(!ri); apc_temp=sbuf; apc_temp=apc_temp<<8; ri=0; while(!ri); apc_temp|=sbuf; ri=0; isd_ss=0; isd1700_par2_comm(isd1700_wr_apc2,apc_temp); isd_ss=1; ri=0; if(re_fig) rest_is

43、d_comm_ptr();sate_temp=0;do sbuf=*back_data_ptr+; while(!ti); ti=0; while(+sate_temp<=2); re_fig=0; void spi_set_opt(uchar spi_set_comm) uint start_addr,end_addr; ri=0; while(!ri); start_addr=sbuf; start_addr=start_addr<<8; ri=0; while(!ri); start_addr|=sbuf; ri=0; while(!ri); end_addr=sbuf

44、; end_addr=start_addr<<8; ri=0; while(!ri); end_addr|=sbuf; ri=0; isd_ss=0; isd1700_7byte_comm(spi_set_comm, start_addr, end_addr); isd_ss=1; void spi_pu (void) isd_ss=0; isd1700_npar_comm(isd1700_pu,2); isd_ss=1; void spi_stop (void) isd_ss=0; isd1700_npar_comm(isd1700_stop,2); isd_ss=1; isd_comm_ram_c0=isd1700_stop ; seril_back_sate(1); void spi_rest (void) isd_ss=0; isd1700_npar_comm(isd1700_rest,2); isd_ss=1; void spi_clr_int(void) isd_ss=0; isd1700_npar_comm(isd1700_clr_int,2); isd_ss=1; void sp

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論