freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于51單片機電子鬧鐘或萬年歷的設計-文庫吧資料

2025-01-24 14:28本頁面
  

【正文】 **************************************************/ void DisplayMinute(unsigned char x){ unsigned char i,j。 //將百位數(shù)字的字符常量寫入LCD WriteData(digit[j])。//取個位 WriteAddress(0x49)。 //j,k分別儲存十位和個位 i=x/10。 //清屏幕指令,將以前的顯示內容清除 delaynms(5)。 //顯示模式設置:光標右移,字符不移 delaynms(5)。 //顯示模式設置:顯示開,無光標,光標不閃爍 delaynms(5)。 //連續(xù)三次,確保初始化成功 delaynms(5)。 delaynms(5)。 //顯示模式設置:162顯示,57點陣,8位數(shù)據(jù)接口 delaynms(5)。 //當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令 }/*****************************************************函數(shù)功能:對LCD的顯示模式進行初始化設置***************************************************/void LcdInitiate(void){ delaynms(15)。 _nop_()。 _nop_()。 //空操作四個機器周期,給硬件反應時間 E=1。 _nop_()。 //將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊 _nop_()。 E=0。 RS=1。 //當E由高電平跳變成低電平時,液晶模塊開始執(zhí)行命令 }/*****************************************************函數(shù)功能:指定字符顯示的實際地址入口參數(shù):x***************************************************/ void WriteAddress(unsigned char x) { WriteInstruction(x|0x80)。 _nop_()。 _nop_()。 //空操作四個機器周期,給硬件反應時間 E=1。 _nop_()。 //將數(shù)據(jù)送入P0口,即寫入指令或地址 _nop_()。 _nop_()。 E=0。 //如果忙就等待 RS=0。 //將E恢復低電平 return result。 //空操作四個機器周期,給硬件反應時間 result=BF。 _nop_()。 //E=1,才允許讀寫 _nop_()。 //根據(jù)規(guī)定,RS為低電平,RW為高電平時,可以讀狀態(tài) RW=1。result=0,不忙***************************************************/bit BusyTest(void) { bit result。 }}/*****************************************************函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。 BEEP=0。t++){ BEEP=1。 for(t=0。i++) delay1ms()。 for(i=0。j++) 。i++) for(j=0。 for(i=0。 //使能信號位,sbit BF=P0^7。 //寄存器選擇位,sbit RW=P2^1。 //打開充電功能 選擇2K電阻充電方式 WriteSet1302(0x8E,0x80)。 //根據(jù)寫月寄存器命令字,寫入月的初始 WriteSet1302(0x8c,(year/10)4|(year%10))。 //根據(jù)寫小時寄存器命令字,寫入小時的初始值 WriteSet1302(0x86,((dt/10)4|(dt%10)))。 //根據(jù)寫秒寄存器命令字,寫入秒的初始值 WriteSet1302(0x82,((min/10)4|(min%10)))。 //根據(jù)寫狀態(tài)寄存器命令字,寫入保護指令 } }*/ //如果不想每次都初始化時間,也就是掉電后還想讓時鐘繼續(xù)走時的話 就用上面的語句 /*這是每次都初始化的語句*/ //2015017 Tue 22:36:55 WriteSet1302(0x8E,0x00)。 //根據(jù)寫年寄存器命令字,寫入年的初始值 WriteSet1302(0x90,0xa5)。 //根據(jù)寫日寄存器命令字,寫入日的初始值 WriteSet1302(0x88,((6/10)4|(6%10)))。 //根據(jù)寫分寄存器命令字,寫入分的初始值 WriteSet1302(0x84,((23/10)4|(23%10)))。 //根據(jù)寫狀態(tài)寄存器命令字,寫入不保護指令 WriteSet1302(0x80,((55/10)4|(55%10)))。 if(flagamp。 //將讀出的數(shù)據(jù)返回}/*****************************************************函數(shù)功能: 1302進行初始化設置***************************************************/ void Init_DS1302(unsigned char year,unsigned char mon,unsigned char dt, unsigned char hour,unsigned char min,unsigned char sec){/* unsigned char flag。 //將時鐘電平置于已知狀態(tài) RST=0。 //寫入命令字 dat=Read1302()。 //確保寫數(shù)居前SCLK被拉低 RST=1。 RST=0。 //稍微等待 } return dat。 //稍微等待 SCLK=0。 //將1取出,寫在dat的最高位 SCLK=1。i++) //連續(xù)讀8個二進制位數(shù)據(jù) { dat=1。 //稍微等待,使硬件做好準備 for(i=0。 //禁止數(shù)據(jù)傳遞 }/*****************************************************函數(shù)功能:從1302讀一個字節(jié)數(shù)據(jù)入口參數(shù):x***************************************************/ unsigned char Read1302(void) { unsigned char i,dat。 //寫數(shù)據(jù) SCLK=1。 //稍微等待,使硬件做好準備 Write1302(Cmd)。 //確保寫數(shù)居前SCLK被拉低 RST=1。 //將dat的各數(shù)據(jù)位右移1位,準備寫入下一個數(shù)據(jù)位 } }/*****************************************************函數(shù)功能:根據(jù)命令字,向1302寫一個字節(jié)數(shù)據(jù)入口參數(shù):Cmd,儲存命令字;dat,儲存待寫的數(shù)據(jù)***************************************************/ void WriteSet1302(unsigned char Cmd,unsigned char dat) { RST=0。 //稍微等待,使硬件做好準備 SCLK=0。 //稍微等待,使硬件做好準備 SCLK=1。0x01。i8。 //拉低SCLK,為脈沖上升沿寫入數(shù)據(jù)做好準備 delaynus(10)。}/*****************************************************函數(shù)功能:向1302寫一個字節(jié)數(shù)據(jù)入口參數(shù):x***************************************************/ void Write1302(unsigned char dat){ unsigned char i。in。/*****************************************************函數(shù)功能:延時若干微秒入口參數(shù):n***************************************************/ void delaynus(unsigned char n){ unsigned char i。unsigned char setclock=0。 //蜂鳴器unsigned char miao,fen,shi,tian,yue,nian。 //定義按鍵2,+sbit K3=P1^5。 //定義按鍵1觸發(fā)中斷0,調整時間按鈕sbit K4=P3^3。 //位定義1302芯片的接口,sbit RST=P1^2。 //定義字符數(shù)組顯示數(shù)字sbit SCLK=P1^0。從這次的課程設計中,我們真真正正的意識到,在以后的學習中,要理論聯(lián)系實際,把我們所學的理論知識用到實際當中,學習單機片機更是如此,程序只有在經(jīng)常的練習的過程中才能提高,我想這就是我在這次課程設計中的最大收獲。所以,在設計的時候,應該從多方面、多角度去考慮問題,而且應該進一步提高時鐘的質量。知識來自實踐,多去生活中探詢所需要的。 無可否認機械時代已經(jīng)過去,電子時代已經(jīng)到來??梢娂夹g在不斷進步,機械式時鐘已經(jīng)被淘汰,取而代之的是具有高度準確性和直觀性且無機械裝置,具有更長的使用壽命等優(yōu)點的數(shù)字時鐘。這些只是軟件設計時相應功能部分還不完善造成。硬件設施合乎要求,軟件設計可以配合硬件實現(xiàn)要求的功能。功能上基本達標:時鐘的顯示、調時功能、鬧鈴功能。下面是程序運行結果截圖圖61 初始時間顯示圖圖62 調整時間后顯示圖圖63 鬧鐘設置后顯示圖上圖61表示程序啟動時將時間初始化為2015年01月10日00時00分00秒;之后進行了調整,將時間調整為操作的當前時間如圖62所示,2015年01月10日11時59分15秒;圖63表示是將鬧鐘設置為13時00分29秒。當按鍵K4第一次按下時,停止計時進入鬧鐘1的時設置,當按鍵K4第二、第三次按下時,分別進入鬧鐘1的分設置和秒設置,當按K4第四次按下時,退出鬧鐘設置,正常顯示當前時間。硬件部分設置了的三個按鍵KKKK4。程序見附錄二。當液晶顯示屏的接口電路與單片機系統(tǒng)I/O按照并行數(shù)據(jù)傳輸方式連接完成以后,即可以對AT89C52單片機進行編程。數(shù)據(jù)讀寫時序如圖556所示。在控制字指令輸入后的下一個SCLK時鐘的上升沿時,數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從最低位(0位)開始。DS1302的控制字如圖54所示。它不僅要向寄存器寫入控制字,還需要讀取相應寄存器的數(shù)據(jù)。流程圖分析:首先對1602顯示屏進行初始化(初始化大約持續(xù)10ms左右),然后檢查忙信號,若BF=0,則獲得顯示RAM的地址,寫入相應的數(shù)據(jù)顯示;若BF=1,則代表模塊正在進行內部操作,不接受任何外部指令和數(shù)據(jù),直到BF=0為止。這時若有設置鍵按下時,進行時間修改,完成后將數(shù)據(jù)送入時鐘芯片;若沒有按鍵按下,則直接存入EPROM,送入液晶屏顯示。圖51系統(tǒng)總流程圖 DS1302時鐘程序流程圖時鐘流程圖如圖52所示。如下圖所示:圖45獨立鍵盤電路 系統(tǒng)總流程圖系統(tǒng)總流程圖如圖51所示。由于單片機在正常應用過程中,可能會經(jīng)常進行鍵操作,因而編程控制方式使CPU經(jīng)常處于工作狀態(tài), 在進行本次設計中,涉及到了調整時間、設置鬧鐘、上調、下調四個功能。CPU在一個工作周期內,利用完成其他任務的空余時間,調用鍵盤掃描子程序,經(jīng)程序查詢,若無鍵操作,則返回;若有鍵操作,則進而判斷是哪個鍵,并執(zhí)行相應的鍵處理程序。本設計采用的是獨立式鍵盤。圖44 蜂鳴器驅動電路 獨立鍵盤電路實現(xiàn)鍵盤控制的方法有多種,在本系統(tǒng)中,我們采用了AT89C52單片機來進行控制,因為單片機可以很好的解決鍵抖動。圖43為1602液晶。當R/W端接高電平時芯片處于讀數(shù)據(jù)狀態(tài),反之處于寫數(shù)據(jù)狀態(tài),E端為使能信號端。E為使能端,當E端由高電平跳變成低電平時,液晶模塊執(zhí)行命令。R/W為讀寫信號線端,高電平時進行讀操作,低電平時進行寫操作。它可以顯示兩行,每行16個字符,采用單+5V電源供電,外圍電路配置簡單,價格便宜,具有很高的性價比
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1