版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
多功能電子萬年歷Multi-FunctionElectronicCalendar摘要日月如梭,斗轉星移!從遠古的銅壺滴漏、日咎計時,到16世紀因伽利略等時性定律而誕生的擺鐘,到現今100萬年才有1秒誤差原子鐘??茖W不斷的在進步,技術時刻在更新!多功能電子萬年歷更是適應現代化個性生活的一個新需求。該系統以STC89C58單片機作為系統控制處理器,采用美國DALLAS公司推出的具有涓細電流充電能的低功耗實時時鐘電路DS1302。它可以對年、月、日、周日、時、分、秒進行計時。同時通過具有錄放音質好,時間長的ISD4004語音芯片和集成功率放大器LM386進行語音提示,并采用AT24C04數據存儲器實現掉電數據存儲功能.系統各個界面通過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系統方案 5比較與選擇 51.1.1界面顯示和語音提示: 51.1.2時間的實現 51.1.3處理器的選擇 5方案描述 62理論分析與計算 7日程設定與日期計算 72.1.1日程設定 72.1.2日期計算 73電路與程序設計 10硬件設計 103.1.1硬件系統分析 103.1.2硬件描述 11軟件系統設計 143.2.1軟件流程圖 143.2.2各模塊功能主程序 154測試方案與測試結果 18各模塊調試方案 18 STC89C58主芯片調試 184.1.2DS1302時鐘芯片調試 194.1.3ISD4004語音芯片調試 214.1.4AT24C04數據存儲器模塊 224.1.512864LCD顯示模塊 24結論 25系統功能 25操作說明 25參賽總結 26附錄 27附錄一系統原理圖 27附錄二實物圖 29附錄三原程序代碼 301系統方案比較與選擇界面顯示和語音提示:方案一:用LCD1602顯示,蜂鳴器定時報警語音提示。用LCD1602顯示,黃綠色背光,價格便宜,操作簡單,但是無法顯示漢字,無法完成題目陰歷顯示要求。用蜂鳴器實現定時報警語音提示功能,成本較低,且控制容易,但其聲音單調,所播放的音樂效果不佳。方案二:用12864液晶顯示,ISD4004語音芯片實現語音提示。12864液晶顯示,藍色背光,顯示分辨率為128×64,具有靈活的接口方式和簡單、方便的操作指令??梢燥@示4行32個漢字,且具有低電壓低功耗的特點。用ISD語音芯片,錄音時間長,音質好,保存長久,控制功能靈活等優(yōu)點。另通過LM386功放和8歐0.5W喇叭播放實現語音提示,語音效果良好,且更具人性化1.1.2時間的實現方案一:用DS12C887實現時鐘計數。DS12C887內部帶有鋰電池和晶振,掉電可自動行走,并帶有鬧鐘功能、內帶114字節(jié)RAM等功能。但是要控制Intel或Motorola總線時序復雜,并行通信占用I/O口多,而且體積大,管腳多,價格昂貴。 方案二:用DS1302實現時鐘計數。DS1302是DALLAS公司推出的涓流充電時鐘芯片內含有一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM。采用SPI方式進行通信僅需用到三個I/O口。DS1302需外加晶振和電池,故其體積小,占用管腳少,功耗低,價格便宜操作簡單。處理器的選擇AT89S58和STC89C58單片機都兼容標準MCS-51指令系統及80C51引腳結構,32KBytesFlash片內ROM,1284Bytes的片內RAM,32個的I/O口,5個中斷優(yōu)先級2層中斷嵌套中斷,3個16位可編程定時計數器,2個全雙工串行通信口,看門狗電路,片內時鐘振蕩器等功能。其中AT公司的穩(wěn)定性好,但價格偏貴,下載復雜,不便于最后調試。而STC芯片價格比較便宜,且下載器制作簡單(只需使用MAX232電平轉換和連接串行口),體積少,下載方便。方案描述該方案以STC89C58單片機作中央處理器,采用C語言程序作軟件設計,控制其I/O口。時間獲取通過模擬SPI通信方式控制DS1302時鐘芯片的時間設定與讀取,并通過LCD12864液晶顯示,同時可通過控制四個按鍵來實現對時間、鬧鐘及日程的設定與修改。日程與鬧鐘功能是通過不斷的讀取設定時間與當前時間相比較,一旦符合條件就調用相應的子程序來實現特定的顯示或語音提示。語音報時和語音日程是MCU根據當前的時間,發(fā)送不同的控制指令和地址來實現ISD4004芯片在指點的位置進行錄放。最后用AT24C04數據存儲器,實現掉電后對鬧鐘時間,日程時間,和相關的變量等數據進行保存。圖1.1方案結構圖2理論分析與計算2.1日程設定與日期計算2.1.1日程設定日程設定功能分別有三種模式,分別為日常模式、輸入模式、語音模式。每種模式均可設定時間日期和相應的提醒音樂,每個日程具有掉電保存的功能。.1日常模式日常模式歸為三大類30個日程,其收集了日常生活中經常遇到日程瑣事。生活: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.調查9出納10.策劃。(用一個二維數組儲存:如運動—就是schedule2[2][4])2.1.1.2輸入自主模式是一種可自行輸入的日程管理,當進入此菜單就會彈出字符表,可供選擇輸入16個字母的句子(把該16個字母相應賦給一個數組的元素)并保存。當我們選擇了一項日程或輸入完一個日程后,就可以設定提醒的日期與時間和日程存放的地址和選擇的提醒音樂,按確認健存儲剛才設定日程序號,提醒日期,或字符數組,音樂序號等對應的變量到IIC—AT24C04。2.1.1語音模式是一種可錄音一分鐘的日程管理。用戶設定相應的提醒時間后,按下錄音鍵開始錄音,(此時MCU向ISD4004發(fā)送開始錄音指令和錄音地址),界面實時顯示該錄音日程剩下的長度(用MCU定時器1進行準確的倒計時),60秒到或者用戶按下確認健停止錄音(MCU發(fā)送停止指令),用戶可試聽或重錄剛才的錄音(MCU向ISD4004發(fā)送開始播放指令和剛才錄音的首地址),按確認健保存剛才設定日程序號,提醒日期,錄音秒數到IIC。2.1.2日期計算2.1.2.1陽歷通過DS1302時鐘芯片讀取。首先用MCU驅動時鐘芯片,設置其片內時間,然后再分別讀取年、月、日、時、分、秒讀出來的年月日都是BCD碼,則應在將它們送到LCD顯示之前得先把他們轉換為十進制形式。先讀秒寄存器的數據,然后將其賦給變量time,因為秒的數據寄存器有一個字節(jié)的大小,即8位,其中低四位是用來存放秒的個位的,5、6、7位是用來存放秒的十位的,最高位CH是控制時鐘的啟動的當CH=1時,時鐘振蕩停止,CH=0時,時鐘啟動。轉換為十進制則秒的十位為(time&0x70)>>4,個位為(time&0x0f),十位跟個位組合起來后賦給變量miao=((time&0x70)>>4)*10+(time&0x0f);同理根據分、小時,星期、日期、月份、年份分別根據相應的數據寄存器讀出來分別賦給一個變量,再送到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);//日期的十進制形式yue=((time&0x10)>>4)*10+(time&0x0f);//月份的十進制形式nsg=((time&0xf0)>>4)*10+(time&0x0f)//年份的十進制形式DS1302保存的年份數據寄存器的數據范圍為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通過查找資料,找到陰陽歷轉化方法,經過整理修改,最終合成我們需要的函數。陽歷年對應的陰歷數據,每年三字節(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;然后代入以下函數轉換(具體函數見附錄程序1)陰歷年份的確定1864年1月0日是農歷癸亥年,所以用當年減去1864,用12除得的余數作為年份天干的,用12除得的余數作為年份的地支,數字對應的天干和地支如下。天干——甲乙丙丁戊己庚辛壬癸地支——子丑寅卯辰巳午未申酉戌亥3電路與程序設計3.1硬件設計3硬件系統分析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數據。它有主電源/后背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力?!窬д窆苣_●GND地●RST復位腳●I/O數據輸入/輸出引腳●SCLK串行時鐘●Vcc1,Vcc2電源供電管腳圖3.3DS1302引腳圖圖3.4DS1302單字節(jié)讀時序圖3.5DS1302讀寫時序圖3.1.2.3ISD4004是美國ISD公司繼ISD33000系列之后最新推出的時限為8分鐘的長時語音錄放電路。這種錄放電路采用了多電平直接模擬量存儲技術,將每個采樣值直接存儲在片內的快閃存儲器中,因此能夠非常真實、自然地再現語音、音樂,音調和效果聲,避免了一般固體錄音電路因量化和壓縮造成的量化噪聲和金屬聲。采樣頻率越低,錄放時間越長,但通頻帶和音質有所降低。片內信息存于快閃存儲器中,可在斷電情況下百年不丟失,反復錄音超過十萬次。(SS)——片選。低電平選中ISD4004(MOSI)——ISD輸入。MCU上升沿之前半個周期將數據放到本端(MISO)——ISD的串行輸出端。ISD未選中時,本端呈高阻態(tài)。(SCLK)——ISD的時鐘輸入端,由主控制器產生,用于同步MOSI和MISO的數據傳輸。數據在SCLK上升沿鎖存到ISD,在下降沿移出ISD。(INT)——ISD在任何操作中檢測到EOM或OVF時,本端變低并保持中斷狀態(tài)在下一個SPI周期開始時清除。OVF標志指示ISD的錄、放操作已到達存儲器的未尾。圖3.4ISD4004引腳圖EOM標志只在放音中檢測到內部的EOM標志時,為1圖3.7ISD4004讀寫時序3.4數據存儲器串行E2PROM是基于I2C-BUS的存儲器件,遵循二線制協議,其具有接口方便,保存時間長,體積小,數據掉電不揮發(fā)等特點,A0A1A2SDA串行數據/地址SCL串行時鐘WP寫保護Vcc+1.8V6.0V工作電壓Vss地圖3.8AT24C04數據存儲器圖3.9任一地址寫入數據格式圖3.10任一地址讀取數據格式3.5LCD顯示該模塊采用帶中文字庫的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內部含有國標一級、二級簡體中文字庫的點陣圖形液晶顯示器,其顯示分辨率為128×64,內置8192個16*16點漢字,和128個16*8點ASCII字符集。利用該模塊靈活的接口方式和簡單、方便的操作指令,可構成全中文人機交互圖形界面??梢燥@示8×4行16×16點陣的漢字,也可完成圖形顯示,且具有低電壓低功耗的特點。3.2軟件系統設計軟件流程圖圖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某地址數據Voidwrite1302(ucharadd,uchardate){ dsrs=0; dscl=0; dsrs=1;//寫入寫寄存器地址 writeds(add);//寫入一個字節(jié)的數據 writeds(date); dscl=1; dsrs=0;}//讀取ds1302某地址的數據ucharread1302(ucharadd){ uchardate; dsrs=0; dscl=0; dsrs=1; add++;//讀寄存器地址需要在寫寄存器地址加一//寫入讀寄存器地址 writeds(add);//讀取一個字節(jié)數據 date=readds(); dscl=1; dsrs=0;return(date);}//設置時間函數voidsettime(ucharadd,uchardate){//關閉寫保護,可以寫入數據 write1302(0x8e,0x00);//將要寫入ds1302的數據轉換為BCD碼的形式存放 write1302(add,(date/10)<<4|(date%10)); write1302(0x8e,0x80);//開啟寫保護,不可寫入數據}//ds1302初始化函數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;}//在指定地址段開始錄音函數//錄的種類的第幾首voidrec_now(uint*address,uchari){power_up(); delayms(ms);//25ms以上延時 power_up(); delayms(ms); delayms(ms);//兩倍延時 set_rec(address,i); rec();//錄音}//在指定地址段開始放音函數voidplay_now(uint*address,uchari){ power_up(); delayms(ms);//25ms以上延時 set_play(address,i); play();//放}AT24C04數據存儲器//往AT24C02指定地址寫入一個字節(jié)數據voidWIIC(uintadd,uchardate){ ucharidatap; p=0; p=add>>8;//取出地址的高八位p=p<<1;//高八位右移一位start();//發(fā)出起始信號write(0xa0|p);//外部器件尋址respond();//響應//地址的低八位,器件內部尋址write(add&0xff);respond();//響應write(date);//寫數據respond();//響應stop();//停止}//指定地址讀出一個字節(jié)數據ucharRIIC(uintadd)//往IIC{ ucharidatadate,p;date=0;p=add>>8;//取出地址的高八位p=p<<1;//高八位右移一位start();//發(fā)出起始信號write(0xa0|p);//外部器件尋址respond();//響應//地址的低八位,器件內部尋址write(add&0xff);respond();//響應write(date);//寫數據respond();//響應start();//往指定地址讀出一個字節(jié)的數據write(0xa1|P);respond();date=read();stop();returndate;}4測試方案與測試結果4.1各模塊調試方案采用先分別上網查找各芯片的datasheet,找到經典接法!然后在面包板上連接好電路!調試各單元模塊,成功后再進行整個系統連調的方法,方便尋找錯誤,提高效率。STC89C58主芯片調試問題出現:keil軟件編譯時出現***ERRORL105:PUBLICREFERSTOIGNOREDSEGMENT
SYMBOL:
YEAR_L
SEGMENT:?DT?CHANGSHIProgramSize:data=133.4xdata=996code=10349Targetnotcreated問題解決:一開始程序不大,用的是C52進行調試程序,后來程序大了,只好把部分頭文件屏蔽才能夠進行程序的調試。最后用C58時再把屏蔽的頭文件包含進來,但出現了以上問題。通過上網查找資料,才發(fā)現原來單片機數據的存儲類類型主要有:data,bdata,idata,pdata,xdata,code這些類型。在沒對變量進行類型定義時,keilc51默認的變量為data型,存儲位置位于單片機片內RAM寄存器的前128個字節(jié)(0~127)。當data型的變量超過128時將出現錯誤。因為之前在定義變量時一直沒有定義其數據類型,因此都是默認的data型,而且變量超過了128個所以才出現了以上的錯誤。后來變量全改為idata型(可尋址片內RAM,允許訪問全部內部RAM,STC89c58內部RAM達到1280個字節(jié)),編譯時沒出錯,然而把程序下載到單片機后,又出現了問題:當進入功能菜單后選擇日程管理子菜單后便直接跳進日程管理的其它子菜單進去了。再次查找資料才發(fā)現,在定義變量時,變量的默認的初值是0是有條件的,一旦程序中的總變量超過128字節(jié),沒有被初始化的變量默認值將是不確定的,因此必須對所有變量進行初始化為“0”,把所有的變量都定為idata型后,問題才得到了解決。4.DS1302時鐘芯片調試圖4.2時鐘芯片模塊出現問題:從DS1302讀出來的數據放到顯示屏顯示的時候發(fā)現不正確,秒鐘不是從0到59之間跳變,而是在0到89之間跳變。問題解決:剛開始讀得出數據以為DS1302的讀寫程序寫對了。以為是其他程序出現了問題,但是通過反復查找程序的問題無結果時,又開始繼續(xù)轉向DS1302的程序問題。通過進一步查看DS1302的數據手冊發(fā)現,DS1302存放時間(秒、分、時、星期、日期、月份、年份)的寄存器并不是以十進制的形式存放的,而是以BCD碼的形式存放的,如下圖:秒寄存器地址 秒的數據寄存器秒的數據寄存器的大小占一個字節(jié),共8位,其中“低四位”用來存放秒的“個位”,“高四位”的低三位用來存放秒的“十位”。因此若把數據讀出來直接放到LCD顯示,會發(fā)現數據范圍變大了就是這個原因。所以在把秒數據讀出來后放到LCD顯示之前得先把它轉換為十進制的形式,假設將它讀出來的數據賦給一個變量time,則秒的十位通過取它的數據寄存器的高四位的低三位即((time&0x70)>>4)獲得,秒的個位通過取出秒的低四位,即(time&0x0f)獲得,最后秒的十進制形式為((time&0x70)>>4)*10+(time&0x0f)。通過查數據手冊可知秒的最高位CH是暫停位,當CH=1時,時鐘振蕩停止,器件被置入低功率備份方式,其電源電流小于100NA,當CH=0時,時鐘啟動。分寄存器地址分的數據寄存器同理讀出來的分鐘的BCD碼轉換為十進制為((time&0x70)>>4)*10+(time&0x0f)。小時寄存器地址 小時數據寄存器讀出來的小時的BCD碼轉換為十進制為((time&0x70)>>4)*10+(time&0x0f)。日期寄存器地址日期數據寄存器讀出來的日期的BCD碼轉換為十進制為((time&0x30)>>4)*10+(time&0x0f)。星期寄存器地址星期數據寄存器讀出來的星期的BCD碼轉換為十進制為(time&0x07).。月份寄存器地址月份數據寄存器讀出來的月份的BCD碼轉換為十進制為((time&0x10)>>4)*10+(time&0x0f)。年份寄存器地址年份數據寄存器讀出來的年份的BCD碼轉換為十進制為((time&0xf0)>>4)*10+(time&0x0f)。寫保護寄存器寫保護寄存器中的最高位WP是寫保護位。在對時鐘進行寫操作前WP必須為0,否則不可寫入,在讀操作時總是讀0。當WP=1時,可防止如何寄存器進行寫操作。ISD4004語音芯片調試
圖4.3語音芯片模塊出現問題:每播放完一段錄音后不會停止,而是繼續(xù)往下播問題解決:開始時是運用ISD4003—04M芯片調試,該芯片具有4分鐘的錄音時間,共有1200行儲存地址,它是通過SPI與單片機進行同步串行數據傳輸,對ISD4003而言,在時鐘上升沿鎖存MOSI引腳的數據,其操作碼為16位,其中11位為地址碼,5位指令碼,(包括REC,PLAY,SETREC,SETPLAY,POWERDOWN,POWERUP,STOP等)。調試時能夠錄音(每錄完一段發(fā)送一個STOP指令讓其末尾產生EOM標志),也能放音,但錄好的報時語音,不是報完一段就停止(因為理論上播放過程遇到EOM標志就會停止),而是繼續(xù)往下報第二段。后經查資料可知,4003有1200行地址,錄音長度為4分鐘,那么一行長度就為秒/行。一段報時錄音為3秒,理論上需要15行,故編了一個步長為20的地址數(0x0000,0x00014,0x0028,0x003C……),但結果播放出來還是一樣。一開始猜測EOM標志位被下一段錄音給覆蓋了,于是把步長增加到30行(6秒),此時發(fā)現播放一段完畢后就停止播放了,但這又與理論矛盾,經過查找資料并無數次調試后,發(fā)現問題原因,因為測試是用MCU判斷按鍵的按下,來向ISD4003發(fā)送STOP指令的,但按鍵是存在抖動的,而測試不是用硬件JK觸發(fā)器來去抖,而是用軟件延時20MS來去抖,加上人的反應時間在開始和結束都占用大概1秒時間(因為從電腦的音頻線引出電流,經過8050放大后,直接接到ISD的ANA音頻輸入端以避免外界環(huán)境的噪音)。最后經過多番的調試后,選擇了25行(5秒)的步長作為每段報時語音的存放。由于5首40秒的音樂已經占了200秒,加上24段5秒的報時語音已占了120秒。超過4003總長度240秒,故最后改用ISD4004,8分鐘芯片。4004跟4003操作不一樣,它是8位指令碼,16位地址碼,2400行,4秒/行,其他性質與功能一樣。4.AT24C04數據存儲器模塊圖4.4數據存儲器模塊出現問題:AT24C04內存大小為512字節(jié)(512×8位)。但是當往AT24C04保存數據的地址超過255(例如地址256、257)的時候,發(fā)現把保存在AT24C04的低地址(例如地址1、2)的數據給覆蓋了,即地址超過255后又默認從地址1開始保存。問題解決:經過分析思考,可能是把AT24C02(256個字節(jié))的操作用在AT24C04的操作上了,即兩者的操作有所不同。經過查看AT24C04數據手冊后,發(fā)現到數據手冊里面的一段文字:AT24C02,2KSERIALEEPROM:Internallyorganizedwith32pagesof8byteseach,the2Krequiresan8-bitdatawordaddressforrandomwordaddressing.AT24C04,4KSERIALEEPROM:Internallyorganizedwith32pagesof16byteseach,the4Krequiresa9-bitdatawordaddressforrandomwordaddressing.從內容可知AT24C02是傳送8位的內部器件地址進行尋址,而AT24C04的是傳送9位的內部器件地址進行尋址,這時才知道,確實跟猜測的一樣,一直把AT24C04當AT24C02來用。反復查看數據手冊后又發(fā)現:“The4KEEPROMonlyusestheA2andA1deviceaddressbitswiththethirdbitbeingamemorypageaddressbit.Thetwodeviceaddressbitsmustcomparetotheircorrespondinghard-wiredinputpins.TheA0pinisnoconnect.”圖4.5器件地址AT24C04的外部器件尋址只用到了6位,其中高四位1010是固定地址,A2跟A1是可編程地址,即最多可以并聯4個AT24C04。A0沒有用到。P0是AT24C04九位內部器件尋址中的最高位,即當進行器件內部尋址超過255的時候,要將最高位地址P0置1,再減去255,放在另外低8位的地址。具體如下,首先把要尋址的地址賦給一個無符號整形(unsignedint)變量add。p=add>>8;//取出地址的高八位p=p<<1;//高八位右移一位start();//發(fā)出起始信號write(0xa0|p);//外部器件尋址respond();//響應write(add&0xff);//地址的低八位,器件內部尋址respond();//響應write(date);//寫數據respond();//響應stop();//停止這樣當要進行器件內部尋址超過255的時候P0將變?yōu)?,剩下的減去255將是儲存在器件內部地址低八位地址。這樣就完成了9位尋址。4.1.512864LCD顯示模塊圖4.6LCD12864模塊出現問題:12864有顯示但沒有背光問題解決:LCD12864PDF標明的背光控制是由其19管腳BLA背光源正極,20管腳BLK背光源負極控制的,但接上后發(fā)現背光不亮,后來經過檢驗發(fā)現原來買的LCD的兩個管腳接反了。同時為了能靈活控制背光燈,我們加入了PNP9012作為開關電路,低電平導通。整體調試:在各個模塊都調試成功后,用Protel將話好終電路圖并焊接電路,再將調試成功后各模塊的子程序,燒錄到電路板上,檢查電路板是否焊錯!最后把各子模塊程序改為頭文件,嵌入主程序中,進行總體調試,觀察顯示與預測是否一致,不斷調試,直到滿意為止。結論系統功能大賽要求:能用LCD顯示陽歷年、月、日、星期、小時、分、秒;陰歷月、日,陰歷閏年,可通過按鍵調整時間。能夠進行整點和半點清晰的語音報時。能進行鬧鐘設定,具有掉電存儲功能,鬧鐘提醒。具有日程管理,可以設
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2012年高考語文試卷(安徽)(空白卷)
- 《離子濃度大小比較》課件
- 挑戰(zhàn)與突破自我
- 探索物理定律的奧秘
- 《痛苦的職場人》課件
- 工作調研報告(合集三篇)
- 2023年項目部安全管理人員安全培訓考試題附參考答案(達標題)
- 2023年項目部安全管理人員安全培訓考試題(1套)
- 母親節(jié)新媒體策劃
- 初中語文教師教學工作總結11篇
- 四川省2023年普通高中學業(yè)水平考試物理試卷 含解析
- 2024-2025學年人教版八年級上學期數學期末復習試題(含答案)
- 2024年醫(yī)院康復科年度工作總結(4篇)
- 五金耗材材料項目投標方案(技術方案)
- 防網絡電信詐騙主題班會
- 中職無人機應用技術跨行業(yè)人才培養(yǎng)方案
- 2024年執(zhí)業(yè)藥師繼續(xù)教育專業(yè)答案
- 高級管理招聘面試題與參考回答2024年
- 國際合作項目風險管理
- 臨床5A護理模式
- 第一單元《認識物聯網》第1課 互聯網和物聯網 教案 2023-2024學年浙教版(2023)初中信息技術七年級下冊
評論
0/150
提交評論