畢業(yè)設計(論文)基于單片機的多功能電子萬年歷設計_第1頁
畢業(yè)設計(論文)基于單片機的多功能電子萬年歷設計_第2頁
畢業(yè)設計(論文)基于單片機的多功能電子萬年歷設計_第3頁
畢業(yè)設計(論文)基于單片機的多功能電子萬年歷設計_第4頁
畢業(yè)設計(論文)基于單片機的多功能電子萬年歷設計_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

多功能電子萬年歷Multi-FunctionElectronicCalendar摘要日月如梭,斗轉(zhuǎn)星移!從遠古的銅壺滴漏、日咎計時,到16世紀因伽利略等時性定律而誕生的擺鐘,到現(xiàn)今100萬年才有1秒誤差原子鐘??茖W不斷的在進步,技術時刻在更新!多功能電子萬年歷更是適應現(xiàn)代化個性生活的一個新需求。該系統(tǒng)以STC89C58單片機作為系統(tǒng)控制處理器,采用美國DALLAS公司推出的具有涓細電流充電能的低功耗實時時鐘電路DS1302。它可以對年、月、日、周日、時、分、秒進行計時。同時通過具有錄放音質(zhì)好,時間長的ISD4004語音芯片和集成功率放大器LM386進行語音提示,并采用AT24C04數(shù)據(jù)存儲器實現(xiàn)掉電數(shù)據(jù)存儲功能.系統(tǒng)各個界面通過LCD12864顯示,具有鬧鐘,日程管理的功能。關鍵詞:STC89C58,12864LCD,ISD4004,AT24C04,DS1302AbstractWiththerapiddevelopmentofscienceandtechnologyandthepassingbyoftime,fromtheviewofthesun,theelectronicclockpendulumclocktonow,humanbeinghavebeenconstantlystudied,innovatedandcreatednewrecords.WithaSTC89C58single-chipasthesystemcontrolprocessors,thesystemusesthelow-powerreal-timeclockcircuitDS1302ofsmalltricklechargecurrent,whichisproducedbyDALLASAmericancompanie.Itcantimeinyear,month,day,weekday,hour,minuteandsecond,alsohasmultiplefunctions,suchasaleapyearcompensation,andlonglifeoftheDS1302,theerrorsmall.Atthesametime,throughthevoicechipISD4004voicepromptsand12864LCDdisplayanduseofdatamemorytoachieveAT24C04-downdatastoragefunction,withalarmclock,schedulemanagementfunction.Keywords:STC89C58,12864LCD,ISD4004,AT24C04,DS1302目錄摘要 2關鍵詞 21系統(tǒng)方案 5比較與選擇 51.1.1界面顯示和語音提示: 51.1.2時間的實現(xiàn) 51.1.3處理器的選擇 5方案描述 62理論分析與計算 7日程設定與日期計算 72.1.1日程設定 72.1.2日期計算 73電路與程序設計 10硬件設計 103.1.1硬件系統(tǒng)分析 103.1.2硬件描述 11軟件系統(tǒng)設計 143.2.1軟件流程圖 143.2.2各模塊功能主程序 154測試方案與測試結(jié)果 18各模塊調(diào)試方案 18 STC89C58主芯片調(diào)試 184.1.2DS1302時鐘芯片調(diào)試 194.1.3ISD4004語音芯片調(diào)試 214.1.4AT24C04數(shù)據(jù)存儲器模塊 224.1.512864LCD顯示模塊 24結(jié)論 25系統(tǒng)功能 25操作說明 25參賽總結(jié) 26附錄 27附錄一系統(tǒng)原理圖 27附錄二實物圖 29附錄三原程序代碼 301系統(tǒng)方案比較與選擇界面顯示和語音提示:方案一:用LCD1602顯示,蜂鳴器定時報警語音提示。用LCD1602顯示,黃綠色背光,價格便宜,操作簡單,但是無法顯示漢字,無法完成題目陰歷顯示要求。用蜂鳴器實現(xiàn)定時報警語音提示功能,成本較低,且控制容易,但其聲音單調(diào),所播放的音樂效果不佳。方案二:用12864液晶顯示,ISD4004語音芯片實現(xiàn)語音提示。12864液晶顯示,藍色背光,顯示分辨率為128×64,具有靈活的接口方式和簡單、方便的操作指令??梢燥@示4行32個漢字,且具有低電壓低功耗的特點。用ISD語音芯片,錄音時間長,音質(zhì)好,保存長久,控制功能靈活等優(yōu)點。另通過LM386功放和8歐0.5W喇叭播放實現(xiàn)語音提示,語音效果良好,且更具人性化1.1.2時間的實現(xiàn)方案一:用DS12C887實現(xiàn)時鐘計數(shù)。DS12C887內(nèi)部帶有鋰電池和晶振,掉電可自動行走,并帶有鬧鐘功能、內(nèi)帶114字節(jié)RAM等功能。但是要控制Intel或Motorola總線時序復雜,并行通信占用I/O口多,而且體積大,管腳多,價格昂貴。 方案二:用DS1302實現(xiàn)時鐘計數(shù)。DS1302是DALLAS公司推出的涓流充電時鐘芯片內(nèi)含有一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM。采用SPI方式進行通信僅需用到三個I/O口。DS1302需外加晶振和電池,故其體積小,占用管腳少,功耗低,價格便宜操作簡單。處理器的選擇AT89S58和STC89C58單片機都兼容標準MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),32KBytesFlash片內(nèi)ROM,1284Bytes的片內(nèi)RAM,32個的I/O口,5個中斷優(yōu)先級2層中斷嵌套中斷,3個16位可編程定時計數(shù)器,2個全雙工串行通信口,看門狗電路,片內(nèi)時鐘振蕩器等功能。其中AT公司的穩(wěn)定性好,但價格偏貴,下載復雜,不便于最后調(diào)試。而STC芯片價格比較便宜,且下載器制作簡單(只需使用MAX232電平轉(zhuǎn)換和連接串行口),體積少,下載方便。方案描述該方案以STC89C58單片機作中央處理器,采用C語言程序作軟件設計,控制其I/O口。時間獲取通過模擬SPI通信方式控制DS1302時鐘芯片的時間設定與讀取,并通過LCD12864液晶顯示,同時可通過控制四個按鍵來實現(xiàn)對時間、鬧鐘及日程的設定與修改。日程與鬧鐘功能是通過不斷的讀取設定時間與當前時間相比較,一旦符合條件就調(diào)用相應的子程序來實現(xiàn)特定的顯示或語音提示。語音報時和語音日程是MCU根據(jù)當前的時間,發(fā)送不同的控制指令和地址來實現(xiàn)ISD4004芯片在指點的位置進行錄放。最后用AT24C04數(shù)據(jù)存儲器,實現(xiàn)掉電后對鬧鐘時間,日程時間,和相關的變量等數(shù)據(jù)進行保存。圖1.1方案結(jié)構(gòu)圖2理論分析與計算2.1日程設定與日期計算2.1.1日程設定日程設定功能分別有三種模式,分別為日常模式、輸入模式、語音模式。每種模式均可設定時間日期和相應的提醒音樂,每個日程具有掉電保存的功能。.1日常模式日常模式歸為三大類30個日程,其收集了日常生活中經(jīng)常遇到日程瑣事。生活:1.生日2.聚會3.約會4.旅游5.假日6.逛街7.繳費8.購物9

晨運10.遛狗;學習:1.班會2.活動3.講座4.運動5.考試6.作業(yè)7.論文8.比賽9.還書10.看書;工作:1.會議2.出差3.見客4.交易5.航班6.上市7.匯報8.調(diào)查9出納10.策劃。(用一個二維數(shù)組儲存:如運動—就是schedule2[2][4])2.1.1.2輸入自主模式是一種可自行輸入的日程管理,當進入此菜單就會彈出字符表,可供選擇輸入16個字母的句子(把該16個字母相應賦給一個數(shù)組的元素)并保存。當我們選擇了一項日程或輸入完一個日程后,就可以設定提醒的日期與時間和日程存放的地址和選擇的提醒音樂,按確認健存儲剛才設定日程序號,提醒日期,或字符數(shù)組,音樂序號等對應的變量到IIC—AT24C04。2.1.1語音模式是一種可錄音一分鐘的日程管理。用戶設定相應的提醒時間后,按下錄音鍵開始錄音,(此時MCU向ISD4004發(fā)送開始錄音指令和錄音地址),界面實時顯示該錄音日程剩下的長度(用MCU定時器1進行準確的倒計時),60秒到或者用戶按下確認健停止錄音(MCU發(fā)送停止指令),用戶可試聽或重錄剛才的錄音(MCU向ISD4004發(fā)送開始播放指令和剛才錄音的首地址),按確認健保存剛才設定日程序號,提醒日期,錄音秒數(shù)到IIC。2.1.2日期計算2.1.2.1陽歷通過DS1302時鐘芯片讀取。首先用MCU驅(qū)動時鐘芯片,設置其片內(nèi)時間,然后再分別讀取年、月、日、時、分、秒讀出來的年月日都是BCD碼,則應在將它們送到LCD顯示之前得先把他們轉(zhuǎn)換為十進制形式。先讀秒寄存器的數(shù)據(jù),然后將其賦給變量time,因為秒的數(shù)據(jù)寄存器有一個字節(jié)的大小,即8位,其中低四位是用來存放秒的個位的,5、6、7位是用來存放秒的十位的,最高位CH是控制時鐘的啟動的當CH=1時,時鐘振蕩停止,CH=0時,時鐘啟動。轉(zhuǎn)換為十進制則秒的十位為(time&0x70)>>4,個位為(time&0x0f),十位跟個位組合起來后賦給變量miao=((time&0x70)>>4)*10+(time&0x0f);同理根據(jù)分、小時,星期、日期、月份、年份分別根據(jù)相應的數(shù)據(jù)寄存器讀出來分別賦給一個變量,再送到LCD顯示出來fen=((time&0x70)>>4)*10+(time&0x0f);//分的十進制形式shi=((time&0x70)>>4)*10+(time&0x0f);//小時的十進制形式day=(time&0x07);//星期的十進制形式ri=((time&0x30)>>4)*10+(time&0x0f);//日期的十進制形式y(tǒng)ue=((time&0x10)>>4)*10+(time&0x0f);//月份的十進制形式nsg=((time&0xf0)>>4)*10+(time&0x0f)//年份的十進制形式DS1302保存的年份數(shù)據(jù)寄存器的數(shù)據(jù)范圍為0~99,因此讀出來之后不能直接放到LCD顯示,得加上年份的千百位,比如要顯示2009,得先往年份寄存器寫入9,再讀出來,加上2000,再放到LCD顯示。所以要真正的做到時鐘顯示年份正確還得設置年的千百位變量(unsignedchar)nqb,將其乘上100即nqb*100,再加上從ds1302讀出來的年份的十個位nsg,才是完整的年份的時間。要達到保存的效果,在斷電之前還得將年份的千百位保存到AT24C04,在恢復電源時將其讀回來,加上從ds1302讀回來的年份的十個位在賦給(unsignedint)nian=nqb*100+nsg.再將其送到LCD顯示。2.1.2.2通過查找資料,找到陰陽歷轉(zhuǎn)化方法,經(jīng)過整理修改,最終合成我們需要的函數(shù)。陽歷年對應的陰歷數(shù)據(jù),每年三字節(jié),例如:0x0C,0x96,0x45,//2000年0x5C,0x95,0xBA,//2009年第一字節(jié)BIT7-4位表示閏月月份,值為0為無閏月,BIT3-0對應陰歷第1-4月的大小第二字節(jié)BIT7-0對應陰歷第5-12月大小,第三字節(jié)BIT7表示陰歷第13個月大小,月份對應的位為1表示本陰歷月大(30天),為0表示小(29天)第三字節(jié)BIT6-5表示春節(jié)的陽歷月份,BIT4-0表示春節(jié)的陽歷日期首先,先讀取我們當前陽歷時間:2009-5-20;然后代入以下函數(shù)轉(zhuǎn)換(具體函數(shù)見附錄程序1)陰歷年份的確定1864年1月0日是農(nóng)歷癸亥年,所以用當年減去1864,用12除得的余數(shù)作為年份天干的,用12除得的余數(shù)作為年份的地支,數(shù)字對應的天干和地支如下。天干——甲乙丙丁戊己庚辛壬癸地支——子丑寅卯辰巳午未申酉戌亥3電路與程序設計3.1硬件設計3硬件系統(tǒng)分析3.1硬件選擇51單片機STC89C58,實時時鐘DS1302,IIC芯片AT24C04,語音芯片ISD4004,功率放大器LM386,穩(wěn)壓管LM1117,液晶12864,溫度傳感器18B20。3.2硬件框圖圖3.1硬件框圖3.1.2硬件描述3.1.2.1DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為。采用三線接口與CPU進行同步通信,并可采用突發(fā)方式一次傳送多個字節(jié)的時鐘信號或RAM數(shù)據(jù)。它有主電源/后背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力?!窬д窆苣_●GND地●RST復位腳●I/O數(shù)據(jù)輸入/輸出引腳●SCLK串行時鐘●Vcc1,Vcc2電源供電管腳圖3.3DS1302引腳圖圖3.4DS1302單字節(jié)讀時序圖3.5DS1302讀寫時序圖3.1.2.3ISD4004是美國ISD公司繼ISD33000系列之后最新推出的時限為8分鐘的長時語音錄放電路。這種錄放電路采用了多電平直接模擬量存儲技術,將每個采樣值直接存儲在片內(nèi)的快閃存儲器中,因此能夠非常真實、自然地再現(xiàn)語音、音樂,音調(diào)和效果聲,避免了一般固體錄音電路因量化和壓縮造成的量化噪聲和金屬聲。采樣頻率越低,錄放時間越長,但通頻帶和音質(zhì)有所降低。片內(nèi)信息存于快閃存儲器中,可在斷電情況下百年不丟失,反復錄音超過十萬次。(SS)——片選。低電平選中ISD4004(MOSI)——ISD輸入。MCU上升沿之前半個周期將數(shù)據(jù)放到本端(MISO)——ISD的串行輸出端。ISD未選中時,本端呈高阻態(tài)。(SCLK)——ISD的時鐘輸入端,由主控制器產(chǎn)生,用于同步MOSI和MISO的數(shù)據(jù)傳輸。數(shù)據(jù)在SCLK上升沿鎖存到ISD,在下降沿移出ISD。(INT)——ISD在任何操作中檢測到EOM或OVF時,本端變低并保持中斷狀態(tài)在下一個SPI周期開始時清除。OVF標志指示ISD的錄、放操作已到達存儲器的未尾。圖3.4ISD4004引腳圖EOM標志只在放音中檢測到內(nèi)部的EOM標志時,為1圖3.7ISD4004讀寫時序3.4數(shù)據(jù)存儲器串行E2PROM是基于I2C-BUS的存儲器件,遵循二線制協(xié)議,其具有接口方便,保存時間長,體積小,數(shù)據(jù)掉電不揮發(fā)等特點,A0A1A2SDA串行數(shù)據(jù)/地址SCL串行時鐘WP寫保護Vcc+1.8V6.0V工作電壓Vss地圖3.8AT24C04數(shù)據(jù)存儲器圖3.9任一地址寫入數(shù)據(jù)格式圖3.10任一地址讀取數(shù)據(jù)格式3.5LCD顯示該模塊采用帶中文字庫的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示器,其顯示分辨率為128×64,內(nèi)置8192個16*16點漢字,和128個16*8點ASCII字符集。利用該模塊靈活的接口方式和簡單、方便的操作指令,可構(gòu)成全中文人機交互圖形界面??梢燥@示8×4行16×16點陣的漢字,也可完成圖形顯示,且具有低電壓低功耗的特點。3.2軟件系統(tǒng)設計軟件流程圖圖3.11程序流程圖各模塊功能主程序.1DS1302時鐘芯片的讀寫//寫入一個字節(jié)voidwriteds(uchardate){ uchari=0; ACC=date; for(i=8;i>0;i--) { IO=ACC0; dscl=1; dscl=0; ACC=ACC>>1; }}//讀取一個字節(jié)ucharreadds(){ uchari=0; for(i=8;i>0;i--) { ACC=ACC>>1; ACC7=IO; dscl=1; dscl=0; } return(ACC);}//寫入ds1302某地址數(shù)據(jù)Voidwrite1302(ucharadd,uchardate){ dsrs=0; dscl=0; dsrs=1;//寫入寫寄存器地址 writeds(add);//寫入一個字節(jié)的數(shù)據(jù) writeds(date); dscl=1; dsrs=0;}//讀取ds1302某地址的數(shù)據(jù)ucharread1302(ucharadd){ uchardate; dsrs=0; dscl=0; dsrs=1; add++;//讀寄存器地址需要在寫寄存器地址加一//寫入讀寄存器地址 writeds(add);//讀取一個字節(jié)數(shù)據(jù) date=readds(); dscl=1; dsrs=0;return(date);}//設置時間函數(shù)voidsettime(ucharadd,uchardate){//關閉寫保護,可以寫入數(shù)據(jù) write1302(0x8e,0x00);//將要寫入ds1302的數(shù)據(jù)轉(zhuǎn)換為BCD碼的形式存放 write1302(add,(date/10)<<4|(date%10)); write1302(0x8e,0x80);//開啟寫保護,不可寫入數(shù)據(jù)}//ds1302初始化函數(shù)voidinitds(){ unsignedcharsecond=read1302(0x80); if(second&0x80) settime(0x80,0);//設定秒鐘 settime(0x82,4);//設定分鐘 settime(0x84,8);//設定時鐘 settime(0x86,19);//設定日期 settime(0x88,4);//設定月份 settime(0x8c,09);//設定年份 settime(0x8a,6);//設定星期}ISD4004語音芯片的錄放//設置錄音地址voidset_rec(uint*add,uchari){ delayms(2); spi_send16(*(add+i));//發(fā)送要錄音的地址 spi_send8(0xa0);//從指定的地址開始錄音 SS=1;}//設置放音地址voidset_play(uint*add,uchari){ delayms(2); spi_send16(*(add+i));//發(fā)送要放音的地址 spi_send8(0xe0);//從指定的地址開始放音 SS=1;}//在指定地址段開始錄音函數(shù)//錄的種類的第幾首voidrec_now(uint*address,uchari){power_up(); delayms(ms);//25ms以上延時 power_up(); delayms(ms); delayms(ms);//兩倍延時 set_rec(address,i); rec();//錄音}//在指定地址段開始放音函數(shù)voidplay_now(uint*address,uchari){ power_up(); delayms(ms);//25ms以上延時 set_play(address,i); play();//放}AT24C04數(shù)據(jù)存儲器//往AT24C02指定地址寫入一個字節(jié)數(shù)據(jù)voidWIIC(uintadd,uchardate){ ucharidatap; p=0; p=add>>8;//取出地址的高八位p=p<<1;//高八位右移一位start();//發(fā)出起始信號write(0xa0|p);//外部器件尋址respond();//響應//地址的低八位,器件內(nèi)部尋址write(add&0xff);respond();//響應write(date);//寫數(shù)據(jù)respond();//響應stop();//停止}//指定地址讀出一個字節(jié)數(shù)據(jù)ucharRIIC(uintadd)//往IIC{ ucharidatadate,p;date=0;p=add>>8;//取出地址的高八位p=p<<1;//高八位右移一位start();//發(fā)出起始信號write(0xa0|p);//外部器件尋址respond();//響應//地址的低八位,器件內(nèi)部尋址write(add&0xff);respond();//響應write(date);//寫數(shù)據(jù)respond();//響應start();//往指定地址讀出一個字節(jié)的數(shù)據(jù)write(0xa1|P);respond();date=read();stop();returndate;}4測試方案與測試結(jié)果4.1各模塊調(diào)試方案采用先分別上網(wǎng)查找各芯片的datasheet,找到經(jīng)典接法!然后在面包板上連接好電路!調(diào)試各單元模塊,成功后再進行整個系統(tǒng)連調(diào)的方法,方便尋找錯誤,提高效率。STC89C58主芯片調(diào)試問題出現(xiàn):keil軟件編譯時出現(xiàn)***ERRORL105:PUBLICREFERSTOIGNOREDSEGMENT

SYMBOL:

YEAR_L

SEGMENT:?DT?CHANGSHIProgramSize:data=133.4xdata=996code=10349Targetnotcreated問題解決:一開始程序不大,用的是C52進行調(diào)試程序,后來程序大了,只好把部分頭文件屏蔽才能夠進行程序的調(diào)試。最后用C58時再把屏蔽的頭文件包含進來,但出現(xiàn)了以上問題。通過上網(wǎng)查找資料,才發(fā)現(xiàn)原來單片機數(shù)據(jù)的存儲類類型主要有:data,bdata,idata,pdata,xdata,code這些類型。在沒對變量進行類型定義時,keilc51默認的變量為data型,存儲位置位于單片機片內(nèi)RAM寄存器的前128個字節(jié)(0~127)。當data型的變量超過128時將出現(xiàn)錯誤。因為之前在定義變量時一直沒有定義其數(shù)據(jù)類型,因此都是默認的data型,而且變量超過了128個所以才出現(xiàn)了以上的錯誤。后來變量全改為idata型(可尋址片內(nèi)RAM,允許訪問全部內(nèi)部RAM,STC89c58內(nèi)部RAM達到1280個字節(jié)),編譯時沒出錯,然而把程序下載到單片機后,又出現(xiàn)了問題:當進入功能菜單后選擇日程管理子菜單后便直接跳進日程管理的其它子菜單進去了。再次查找資料才發(fā)現(xiàn),在定義變量時,變量的默認的初值是0是有條件的,一旦程序中的總變量超過128字節(jié),沒有被初始化的變量默認值將是不確定的,因此必須對所有變量進行初始化為“0”,把所有的變量都定為idata型后,問題才得到了解決。4.DS1302時鐘芯片調(diào)試圖4.2時鐘芯片模塊出現(xiàn)問題:從DS1302讀出來的數(shù)據(jù)放到顯示屏顯示的時候發(fā)現(xiàn)不正確,秒鐘不是從0到59之間跳變,而是在0到89之間跳變。問題解決:剛開始讀得出數(shù)據(jù)以為DS1302的讀寫程序?qū)憣α恕R詾槭瞧渌绦虺霈F(xiàn)了問題,但是通過反復查找程序的問題無結(jié)果時,又開始繼續(xù)轉(zhuǎn)向DS1302的程序問題。通過進一步查看DS1302的數(shù)據(jù)手冊發(fā)現(xiàn),DS1302存放時間(秒、分、時、星期、日期、月份、年份)的寄存器并不是以十進制的形式存放的,而是以BCD碼的形式存放的,如下圖:秒寄存器地址 秒的數(shù)據(jù)寄存器秒的數(shù)據(jù)寄存器的大小占一個字節(jié),共8位,其中“低四位”用來存放秒的“個位”,“高四位”的低三位用來存放秒的“十位”。因此若把數(shù)據(jù)讀出來直接放到LCD顯示,會發(fā)現(xiàn)數(shù)據(jù)范圍變大了就是這個原因。所以在把秒數(shù)據(jù)讀出來后放到LCD顯示之前得先把它轉(zhuǎn)換為十進制的形式,假設將它讀出來的數(shù)據(jù)賦給一個變量time,則秒的十位通過取它的數(shù)據(jù)寄存器的高四位的低三位即((time&0x70)>>4)獲得,秒的個位通過取出秒的低四位,即(time&0x0f)獲得,最后秒的十進制形式為((time&0x70)>>4)*10+(time&0x0f)。通過查數(shù)據(jù)手冊可知秒的最高位CH是暫停位,當CH=1時,時鐘振蕩停止,器件被置入低功率備份方式,其電源電流小于100NA,當CH=0時,時鐘啟動。分寄存器地址分的數(shù)據(jù)寄存器同理讀出來的分鐘的BCD碼轉(zhuǎn)換為十進制為((time&0x70)>>4)*10+(time&0x0f)。小時寄存器地址 小時數(shù)據(jù)寄存器讀出來的小時的BCD碼轉(zhuǎn)換為十進制為((time&0x70)>>4)*10+(time&0x0f)。日期寄存器地址日期數(shù)據(jù)寄存器讀出來的日期的BCD碼轉(zhuǎn)換為十進制為((time&0x30)>>4)*10+(time&0x0f)。星期寄存器地址星期數(shù)據(jù)寄存器讀出來的星期的BCD碼轉(zhuǎn)換為十進制為(time&0x07).。月份寄存器地址月份數(shù)據(jù)寄存器讀出來的月份的BCD碼轉(zhuǎn)換為十進制為((time&0x10)>>4)*10+(time&0x0f)。年份寄存器地址年份數(shù)據(jù)寄存器讀出來的年份的BCD碼轉(zhuǎn)換為十進制為((time&0xf0)>>4)*10+(time&0x0f)。寫保護寄存器寫保護寄存器中的最高位WP是寫保護位。在對時鐘進行寫操作前WP必須為0,否則不可寫入,在讀操作時總是讀0。當WP=1時,可防止如何寄存器進行寫操作。ISD4004語音芯片調(diào)試

圖4.3語音芯片模塊出現(xiàn)問題:每播放完一段錄音后不會停止,而是繼續(xù)往下播問題解決:開始時是運用ISD4003—04M芯片調(diào)試,該芯片具有4分鐘的錄音時間,共有1200行儲存地址,它是通過SPI與單片機進行同步串行數(shù)據(jù)傳輸,對ISD4003而言,在時鐘上升沿鎖存MOSI引腳的數(shù)據(jù),其操作碼為16位,其中11位為地址碼,5位指令碼,(包括REC,PLAY,SETREC,SETPLAY,POWERDOWN,POWERUP,STOP等)。調(diào)試時能夠錄音(每錄完一段發(fā)送一個STOP指令讓其末尾產(chǎn)生EOM標志),也能放音,但錄好的報時語音,不是報完一段就停止(因為理論上播放過程遇到EOM標志就會停止),而是繼續(xù)往下報第二段。后經(jīng)查資料可知,4003有1200行地址,錄音長度為4分鐘,那么一行長度就為秒/行。一段報時錄音為3秒,理論上需要15行,故編了一個步長為20的地址數(shù)(0x0000,0x00014,0x0028,0x003C……),但結(jié)果播放出來還是一樣。一開始猜測EOM標志位被下一段錄音給覆蓋了,于是把步長增加到30行(6秒),此時發(fā)現(xiàn)播放一段完畢后就停止播放了,但這又與理論矛盾,經(jīng)過查找資料并無數(shù)次調(diào)試后,發(fā)現(xiàn)問題原因,因為測試是用MCU判斷按鍵的按下,來向ISD4003發(fā)送STOP指令的,但按鍵是存在抖動的,而測試不是用硬件JK觸發(fā)器來去抖,而是用軟件延時20MS來去抖,加上人的反應時間在開始和結(jié)束都占用大概1秒時間(因為從電腦的音頻線引出電流,經(jīng)過8050放大后,直接接到ISD的ANA音頻輸入端以避免外界環(huán)境的噪音)。最后經(jīng)過多番的調(diào)試后,選擇了25行(5秒)的步長作為每段報時語音的存放。由于5首40秒的音樂已經(jīng)占了200秒,加上24段5秒的報時語音已占了120秒。超過4003總長度240秒,故最后改用ISD4004,8分鐘芯片。4004跟4003操作不一樣,它是8位指令碼,16位地址碼,2400行,4秒/行,其他性質(zhì)與功能一樣。4.AT24C04數(shù)據(jù)存儲器模塊圖4.4數(shù)據(jù)存儲器模塊出現(xiàn)問題:AT24C04內(nèi)存大小為512字節(jié)(512×8位)。但是當往AT24C04保存數(shù)據(jù)的地址超過255(例如地址256、257)的時候,發(fā)現(xiàn)把保存在AT24C04的低地址(例如地址1、2)的數(shù)據(jù)給覆蓋了,即地址超過255后又默認從地址1開始保存。問題解決:經(jīng)過分析思考,可能是把AT24C02(256個字節(jié))的操作用在AT24C04的操作上了,即兩者的操作有所不同。經(jīng)過查看AT24C04數(shù)據(jù)手冊后,發(fā)現(xiàn)到數(shù)據(jù)手冊里面的一段文字:AT24C02,2KSERIALEEPROM:Internallyorganizedwith32pagesof8byteseach,the2Krequiresan8-bitdatawordaddressforrandomwordaddressing.AT24C04,4KSERIALEEPROM:Internallyorganizedwith32pagesof16byteseach,the4Krequiresa9-bitdatawordaddressforrandomwordaddressing.從內(nèi)容可知AT24C02是傳送8位的內(nèi)部器件地址進行尋址,而AT24C04的是傳送9位的內(nèi)部器件地址進行尋址,這時才知道,確實跟猜測的一樣,一直把AT24C04當AT24C02來用。反復查看數(shù)據(jù)手冊后又發(fā)現(xiàn):“The4KEEPROMonlyusestheA2andA1deviceaddressbitswiththethirdbitbeingamemorypageaddressbit.Thetwodeviceaddressbitsmustcomparetotheircorrespondinghard-wiredinputpins.TheA0pinisnoconnect.”圖4.5器件地址AT24C04的外部器件尋址只用到了6位,其中高四位1010是固定地址,A2跟A1是可編程地址,即最多可以并聯(lián)4個AT24C04。A0沒有用到。P0是AT24C04九位內(nèi)部器件尋址中的最高位,即當進行器件內(nèi)部尋址超過255的時候,要將最高位地址P0置1,再減去255,放在另外低8位的地址。具體如下,首先把要尋址的地址賦給一個無符號整形(unsignedint)變量add。p=add>>8;//取出地址的高八位p=p<<1;//高八位右移一位start();//發(fā)出起始信號write(0xa0|p);//外部器件尋址respond();//響應write(add&0xff);//地址的低八位,器件內(nèi)部尋址respond();//響應write(date);//寫數(shù)據(jù)respond();//響應stop();//停止這樣當要進行器件內(nèi)部尋址超過255的時候P0將變?yōu)?,剩下的減去255將是儲存在器件內(nèi)部地址低八位地址。這樣就完成了9位尋址。4.1.512864LCD顯示模塊圖4.6LCD12864模塊出現(xiàn)問題:12864有顯示但沒有背光問題解決:LCD12864PDF標明的背光控制是由其19管腳BLA背光源正極,20管腳BLK背光源負極控制的,但接上后發(fā)現(xiàn)背光不亮,后來經(jīng)過檢驗發(fā)現(xiàn)原來買的LCD的兩個管腳接反了。同時為了能靈活控制背光燈,我們加入了PNP9012作為開關電路,低電平導通。整體調(diào)試:在各個模塊都調(diào)試成功后,用Protel將話好終電路圖并焊接電路,再將調(diào)試成功后各模塊的子程序,燒錄到電路板上,檢查電路板是否焊錯!最后把各子模塊程序改為頭文件,嵌入主程序中,進行總體調(diào)試,觀察顯示與預測是否一致,不斷調(diào)試,直到滿意為止。結(jié)論系統(tǒng)功能大賽要求:能用LCD顯示陽歷年、月、日、星期、小時、分、秒;陰歷月、日,陰歷閏年,可通過按鍵調(diào)整時間。能夠進行整點和半點清晰的語音報時。能進行鬧鐘設定,具有掉電存儲功能,鬧鐘提醒。具有日程管理,可以設

溫馨提示

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

評論

0/150

提交評論