




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于51單片機(jī)控制的語音報時萬年歷-20/11/2013 SDU(WH)1 實驗要求運(yùn)用單片機(jī)及相關(guān)外設(shè)實現(xiàn)以下功能:1) 萬年歷及時鐘顯示2) 時間日期可調(diào)3) 可對時間進(jìn)行整點(diǎn)報時和隨機(jī)報時2 方案分析根據(jù)實驗要求,選用STC公司的8051系列,STC12C5A16S2增強(qiáng)型51單片機(jī)。此單片機(jī)功能強(qiáng)大,具有片內(nèi)EEPROM、1T分頻系數(shù)、片內(nèi)ADC轉(zhuǎn)換器等較為實用功能,故選用此款。實驗中,對日期和時間進(jìn)行顯示,顯示的字符數(shù)較多,故選用12864LCD屏幕。該屏幕操作較為便捷,外圍電路相對簡單,實用性較強(qiáng)。為了實現(xiàn)要求中的時間日期可調(diào),故按鍵是不可缺少的,所以使用了較多的按鍵。一方面,單片
2、機(jī)的I/O口較為充足;另一方面,按鍵較多,選擇的余地較大,方便編程控制。實驗中,并未要求對時間和日期進(jìn)行保存和掉電續(xù)運(yùn)行,所以并未添加EEPROM和DS12C887-RTC芯片。實際上,對萬年歷來說,這是較為重要的,但為了方便實現(xiàn)和編程的簡單,此處并未添加,而是使用單片機(jī)的定時器控制時間,精度有差別。且上電默認(rèn)時間為2014-01-01 09:00:00 之后需要手動調(diào)整為正確時間。要求中的語音報時功能,這里選用ISD1760芯片的模塊來幫助實現(xiàn)。此模塊通過軟件模擬SPI協(xié)議控制。先將所需要的聲音片段錄入芯片的EEPROM區(qū)域,之后讀出各段聲音的地址段,然后在程序中定義出相應(yīng)地址予以控制播放哪
3、一聲音片段。3 電路硬件設(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字庫初始化程序TMOD=0x01; /使用定時器T0TH0=(65536-1000)/256; /定時器高八位賦初值TL0=(65536-1000)%256; /定時器低八位賦初值 */EA=1; /開中斷總允許ET0=1; /允
9、許T0中斷TR0=1; /啟動定時器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; /定時器高八位賦初值TL0=(65536-50000)%256; /定時器低八位賦初值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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 斧鑿混凝土外墻施工方案
- 臺山屋頂清洗施工方案
- 水庫高溫施工方案
- 危險性專項施工方案
- 漯河管井降水施工方案
- TSHJMRH 0063-2024 在用潤滑油顆粒污染度的測定 光阻法
- 家長會安全發(fā)言稿
- 2025年度股份轉(zhuǎn)讓過程中稅務(wù)籌劃及優(yōu)惠政策合同
- 二零二五年度關(guān)于協(xié)議作廢糾紛的調(diào)解與賠償協(xié)議
- 二零二五年度夫妻共同維護(hù)家庭和諧與子女幸福感協(xié)議書
- 風(fēng)電場葉片無人機(jī)巡檢作業(yè)技術(shù)導(dǎo)則
- 工業(yè)廢鹽及副產(chǎn)鹽深度資源化利用項目可行性研究報告
- 制度機(jī)制風(fēng)險點(diǎn)及防控措施3篇
- 管道鈍化方案
- “小小科學(xué)家”廣東省少年兒童科學(xué)教育體驗活動+生物試題4
- 小兒推拿法操作評分標(biāo)準(zhǔn)
- 《研學(xué)旅行課程設(shè)計》課件-了解研學(xué)旅行概念
- MOOC 財務(wù)報表分析-華中科技大學(xué) 中國大學(xué)慕課答案
- 2024屆南京市建鄴區(qū)中考聯(lián)考物理試卷含解析
- 心腦血管疾病的危險因素與管理1
- 第一單元練習(xí)卷(單元測試)2023-2024學(xué)年統(tǒng)編版語文六年級下冊
評論
0/150
提交評論