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

正文內(nèi)容

單片機多功能數(shù)字電子時鐘設計畢業(yè)設計論文(編輯修改稿)

2025-08-16 19:56 本頁面
 

【文章內(nèi)容簡介】 16 第四章 系統(tǒng)的軟件設計 程序流程框圖和程序概述 DS1302 時鐘芯片具有通電自動計時的功能。向 DS1302 中寫入一個初值,如寫入20xx0501 00: 00: 00 ,星期日,在通電時,時間就會自動走,過 60 秒分加 1,過60 分時加 1,過 24 小時天加 1,星期日變成星期一,一周有 7天, 7天一循環(huán),芯片能夠自動判斷每月有多少天, 5 月有 31 天, 31 天后,月加 1。采用 DS1302 時鐘芯片的單片時鐘就能一直精準的走下去。調(diào)整時間日期,實質(zhì)就是向 DS1302 時鐘芯片重新寫入初值。電子時鐘的主程序框圖如圖 41所示。 圖 41 主程序流程圖 開始 初始化 讀寫日期、時間和溫度 分離日期、時間和溫度顯示值值 顯示子程序 時間修改子程序 日期修改子程序 顯示結(jié)果 返回 開關(guān)控制子程序 單片機多功能數(shù)字電子時鐘設計 17 圖 42 時間調(diào)整程序流程圖 , 單片機多功能數(shù)字電子時鐘設計 18 圖 43 溫度鬧鐘設置報警流程圖 圖 44 日期設置流程圖 單片機多功能數(shù)字電子時鐘設計 19 延時函數(shù) void delay(uint z) { uint x,y。 for(x=z。x0。x) for(y=110。y0。y)。 } 由 for 循環(huán)構(gòu)成的延時函數(shù) ,z 的取值為這個函數(shù)的延時 ms 數(shù),如 delay(200)。大約延時 200ms. delay(500)。大約延時 500ms。因下文多次用到,固在此先作 說明。 對 DS1302 讀寫操作函數(shù) 。 在對 DS1302 時鐘芯片操作前,應對其操作時序有所了解,參看前文 DS1302 介紹。 DS1302 采用串行方式與單片機進行通信,一個機器周期只能讀寫一個字節(jié)的一位,因此在單片機與 DS1302 芯片間傳輸一字節(jié), 8 位數(shù)據(jù)要分 8 次進行且先從低位開始傳輸。 向 DS1302 寫數(shù)據(jù) /***************************寫數(shù)據(jù)字節(jié)子函數(shù) **************************/ void write_1302_byte(uchar temp)//用來發(fā)送 8 位數(shù)據(jù)信息 { uchar i。 for(i=0。i8。i++)//循環(huán) 8 次 寫入數(shù)據(jù) { sck=0。 sda=tempamp。0x01。//每次傳輸?shù)妥止?jié) temp=1。//右移一位 sck=1。//在 SCK 上升沿的時候字節(jié)寫入 DS1302 } } /*************************1302 寫數(shù)據(jù)子函數(shù) **************************/ void write_1302(uchar addd,uchar dat) { rst=0。 _nop_()。 sck=0。 _nop_()。 rst=1。 _nop_()。 write_1302_byte(addd)。//發(fā)送地址 write_1302_byte(dat)。//發(fā)送數(shù)據(jù) rst=0。 } 從 DS1302 讀數(shù)據(jù) /***************************讀 DS1302 數(shù)據(jù)函數(shù) *************************/ 單片機多功能數(shù)字電子時鐘設計 20 uchar read_1302(uchar add)//輸入地址 add,返回讀取的數(shù)據(jù) { uchar i,temp=0x00。 rst=0。 sck=0。 rst=1。 write_1302_byte(add)。 for(i=0。i8。i++)//循環(huán) 8 次讀取 { if(sda) temp|=0x80。// temp=temp|0x80 sck=0。 temp=1。//右移一位 sck=1。 //sck 0 } rst=0。//以下為 DS1302 復位的穩(wěn)定時間 sck=0。 sck=1。 sda=0。 sda=1。 return(temp)。//將 temp 值返回 } 顯示函數(shù) 對 1602 進行操作前要對其進行初使化,初使化完成后它才能正常顯示。如果想在 1602 液晶的某一個位置顯示一個內(nèi)容,要先對其寫入一個指令,在什么地方顯示。然后再對其寫入一個數(shù)據(jù),要顯示什么內(nèi)容。對 1602 的液晶初使化,需要用寫入指令的方式完成。 1602 液晶中寫一個指令 void write_(uchar ) { lcdwr=0。 //lcdwr lcdwr=0,這里可不寫 lcdrs=0。 //液晶 rs 接口為 0 時 , rs 為 1時寫數(shù)據(jù) P0=。 //將要寫的指令賦給 P0 delay(5)。 //由 1602 P0 lcden=1。 端 lcden lcden delay(5)。 就寫入到 LCD 了 lcden=0。 } void write_data(uchar date) lcdrs 設為 1 { lcdrs=1。 單片機多功能數(shù)字電子時鐘設計 21 P0=date。 delay(5)。 lcden=1。 delay(5)。 lcden=0。 } 1602 液晶 此函數(shù)首先對液晶進行初使化,使其處于待命狀態(tài),然后將時鐘框架顯示出來:年、月、日、之間的“ — void init_1602() { uchar num。 lcdwr=0。 lcden=0。 write_(0x38)。//設置 LCD 為 16*2 顯示、 5*7 點陣、 8 位數(shù)據(jù)接口模式 write_(0x0c)。//開顯示、不顯示光標 write_(0x06)。//寫一個字符后 1 write_(0x01)。//顯示清 0 write_(0x80)。//將指針指向初始位置 for(num=0。num14。num++)// 20 寫入液晶 write_data(table[num])。 write_(0x80+0x40+4)。//將指針指向 1602 for(num=0。num8。num++)// : : 寫入 write_data(table1[num])。 } 如何在液晶上顯示時間、日期及周 DS1302 中的時間、日期等信息是以 BCD 碼的形式存放的,要先將從 1302 中讀取的數(shù)據(jù)轉(zhuǎn)化成 10 進制,然后顯示在液晶上相應的位置。 /***************************顯示時間、日期子函數(shù) ***********************/ void write_sfm(uchar add,uchar time)//用于在 1602 上顯示年、月、日、時、分、秒。 { Add time 為要顯示的內(nèi)容 uchar shi,ge。 shi=time/16。 //將從 DS1302 中讀取的 BCD 碼數(shù)據(jù)轉(zhuǎn)化成 10 進制個位和 10 ge=time%16。 進制十位 write_(add+0x80)。//定義顯示在液晶的什么位置 write_data(0x30+shi)。//由 1602 0~9 的數(shù)據(jù)碼分別對應 0x30~0x39 write_data(0x30+ge)。 // 1 } 不用重 新光標定位 /**************************顯示周子函數(shù) *******************************/ void write_zhou(uchar time1) 1602 { 時間日期子函數(shù)類似 uchar ge。 ge=time1%16。// 單片機多功能數(shù)字電子時鐘設計 22 write_(0x80+13)。 write_data(0x30+ge)。 } 按鍵函數(shù) 此電子時鐘共有 4 S S S3 與調(diào)時有關(guān)圖按鍵程序如圖 11 S4為 12小時切換鍵 S1 功能鍵:在 24 S2 1 S3 期寫入 DS1302 S4 顯示模式調(diào)整鍵:用于對時間的 12/24 小時模式的切換 12/24 小時 顯示模式切換鍵 時鐘默認在 24 flag1。第一次按下切換鍵把瞬時時間轉(zhuǎn)化成 12 flag1=1。并寫入 DS1302 DS1302 芯片在 12 小時模式下24 小時顯示模式, 令 flag1=0,把瞬時時間轉(zhuǎn)化成 24小時模式并寫入 DS1302 芯片。 有關(guān) DS1302 的時間寄存器存放形式參閱前文。如 24 小時模式下的 22:00, 存放的形式為00100010。 12 小時模式下的 22 點, 也就是 10:00PM, 存放形式為 10110000,在切換的一瞬間, 我 們只需要把小時數(shù)據(jù) 0xb0 寫入到 DS1302, 這樣就能讓時鐘芯片在 12 小時模式下運行了。需要注意的是, 12 小時模式下, 只用到后 5 位來表示時間, 第 6 位用來表示AM 或 PM信息, 如果真接用 24 小時模式下的顯示方法是會出錯的, 這里我們需要對時進行轉(zhuǎn)化。首先提取 AM/PM 信息, 讓其顯示。然后提取其后 5 位時間, 顯示時間。在主函數(shù)部分如果檢測到 flag1=1, 就進行轉(zhuǎn)換。 12 轉(zhuǎn) 24 小進模式與其類似, 不再贅述。 if(s1num==0amp。amp。s4==0)// 設置鍵沒被按下, 且 12/24 小時模式切換鍵被按下后 { delay(5)。 if(s4==0) { s2num++。 while(!s4)。 if(s2num==1)//24 小時切換成 12 小時 { int ge,shi。 flag1=1。 hour=read_1302(0x85)。 ge=hour%16。 shi=hour/16。 if(shi=1amp。amp。ge=1)//時小于 12 { if(shi==0amp。amp。ge==0) hour=0x92。 單片機多功能數(shù)字電子時鐘設計 23 else { hour=houramp。0x9f。 hour=hour+0x80。 } } if(shi==1amp。amp。ge==2)//12 點 { hour=hour+0x80。 hour=hour+0x20。 } if(shi=1amp。amp。ge=3amp。amp。ge=9)//13 點 ~19 點 { hour=hour0x12。 hour=hour+0x80。 hour=hour+0x20。 } if(shi==2amp。amp。ge==0)//20 點 { hour=0xa8。 } if(shi==2amp。amp。ge==1) hour=0xa9。 if(shi==2amp。amp。ge==2) { hour=0xb0。 } if(shi==2amp。amp。ge==3) hour=0xb1。 write_1302(0x8e,0x00)。 write_1302(0x84,hour)。 write_1302(0x8e,0x80)。 } if(s2num==2)//12 小時切換成 24 小時 { int
點擊復制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1