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

正文內(nèi)容

電子萬年歷的設(shè)計與制作畢業(yè)論文(編輯修改稿)

2024-07-24 15:08 本頁面
 

【文章內(nèi)容簡介】 器周期以上的高電平時,單片機就完成了復位操作。如果RST持續(xù)為高電平,單片機就處于循環(huán)復位狀態(tài),而無法執(zhí)行程序。因此要求單片機復位后能脫離復位狀態(tài)。而本系統(tǒng)選用的是12MHz的晶振,因此一個機器周期為1μs,那么復位脈沖寬度最小應為2μs。在實際應用系統(tǒng)中,考慮到電源的穩(wěn)定時間,參數(shù)漂移,晶振穩(wěn)定時間以及復位的可靠性等因素,必須有足夠的余量根據(jù)應用的要求,復位操作通常有兩種基本形式:上電復位、手動復位。上電復位要求接通電源后,自動實現(xiàn)復位操作。AT89S52單片機的上電復位POR(Power On Reset)實質(zhì)上就是上電延時復位,也就是在上電延時期間把單片機鎖定在復位狀態(tài)上。在單片機每次初始加電時,首先投入工作的功能部件是復位電路。 復位電路把單片機鎖定在復位狀態(tài)上并且維持一個延時(記作TRST),以便給予電源電壓從上升到穩(wěn)定的一個等待時間;在電源電壓穩(wěn)定之后,再插入一個延時,給予時鐘振蕩器從起振到穩(wěn)定的一個等待時間;在單片機開始進入運行狀態(tài)之前, 還要至少推遲2個機器周期的延時。本設(shè)計采用上電且開關(guān)復位電路,由于電容充電,使RST持續(xù)一段高電平時間。當單片機已在運行之中時,按下復位鍵也能使RST持續(xù)一段時間的高電平,從而實現(xiàn)上電且開關(guān)復位的操作。通常選擇C=10~30μF。 復位電路第4章 系統(tǒng)的軟件設(shè)計 概述 電子萬年歷的功能是在程序控制下實現(xiàn)的。該系統(tǒng)的軟件設(shè)計方法與硬件設(shè)計相對應,按整體功能分成多個不同的程序模塊,分別進行設(shè)計、編程和調(diào)試,最后通過主程序?qū)⒏鞒绦蚰K連接起來。這樣有利于程序修改和調(diào)試,增強了程序的可移植性。本系統(tǒng)的軟件部分主要要進行公歷計算程序設(shè)計,溫度測量程序設(shè)計,按鍵的掃描輸入等。程序開始運行后首先要進行初始化,把單片機的各引腳的狀態(tài)按程序里面的初始化命令進行初始化,初始化完成后運行溫度測量程序,讀取出溫度傳感器測量出來的溫度,然后運行公歷計算程序,得到公歷的時間、日期信息,再運行按鍵掃描程序,檢測有無按鍵按下,如果沒有按鍵按下則直接調(diào)用節(jié)日計算程序,根據(jù)得到的公歷日期信息計算出節(jié)日,如果有按鍵按下則更新按鍵修改后的變量后送給節(jié)日計算程序,由節(jié)日計算程序根據(jù)修改后的變量計算出對應的節(jié)假日,計算完成后運行顯示程序,顯示程序?qū)⒌玫降臏囟葦?shù)據(jù)、公歷信息、節(jié)假日信息送給對應的數(shù)碼管讓其顯示。 主程序流程圖的設(shè)計:開始DS1302初始化設(shè)置DS1302讀年月日星期時分秒將讀取的數(shù)據(jù)處理后送液晶屏顯示返回 主程序流程圖 程序設(shè)計 DS1302讀寫程序設(shè)計本系統(tǒng)的時間讀取主要來源于單片機對DS1302的操作,在硬件上時鐘芯片DS1302與單片機的連接需要三條線,即SCLK(7)、I/O(6)、RST(5),具體連接圖見系統(tǒng)硬件設(shè)計原理圖。讀取寫程序設(shè)計如下:sbit clk = P1^3。 //ds1302時鐘線定義sbit io = P1^4。 //數(shù)據(jù)線sbit rst = P1^5。 //復位線 //秒 分 時 日 月 年 星期 uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a}。 //寫地址uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b}。 //讀地址uchar code init_ds[] ={0x58,0x00,0x00,0x01,0x01,0x13,0x1}。 uchar miao,fen,shi,ri,yue,week,nian。uchar i。uchar fen1=0x11,shi1=0。 //兩個鬧鐘變量的定義bit open1。/*************寫一個數(shù)據(jù)到對應的地址里***************/void write_ds1302(uchar add,uchar dat){ rst = 1。 //把復位線拿高 for(i=0。i8。i++) { //低位在前 clk = 0。 //時鐘線拿低開始寫數(shù)據(jù) io = add amp。 0x01。 add = 1。 //把地址右移一位 clk = 1。 //時鐘線拿高 } for(i=0。i8。i++) {clk = 0。 //時鐘線拿低開始寫數(shù)據(jù) io = dat amp。 0x01。 dat = 1。 //把數(shù)據(jù)右移一位 clk = 1。 //時鐘線拿高 } rst = 0。 //復位線合低 clk = 0。 io = 0。}uchar read_ds1302(uchar add){ uchar value,i。 rst = 1。 //把復位線拿高 for(i=0。i8。i++) { //低位在前 clk = 0。 //時鐘線拿低開始寫數(shù)據(jù) io = add amp。 0x01。 add = 1。 //把地址右移一位 clk = 1。 //時鐘線拿高 } for(i=0。i8。i++) { clk = 0。 //時鐘線拿低開始讀數(shù)據(jù) value = 1。 if(io == 1) value |= 0x80。 clk = 1。 //時鐘線拿高 } rst = 0。 //復位線合低 clk = 0。 io = 0。 return value。 //返回讀出來的數(shù)據(jù)}void read_time(){ miao = read_ds1302(read_add[0])。 //讀秒 fen = read_ds1302(read_add[1])。 //讀分 shi = read_ds1302(read_add[2])。 //讀時 ri = read_ds1302(read_add[3])。 //讀日 yue = read_ds1302(read_add[4])。 //讀月 nian = read_ds1302(read_add[5])。 //讀年 week = read_ds1302(read_add[6])。 //讀星期 Conversion(0,nian,yue,ri)。 //農(nóng)歷轉(zhuǎn)換 n_nian = year_moon 。 n_yue = month_moon 。 n_ri = day_moon 。}void write_time(){ write_ds1302(0x8e,0x00)。 //打開寫保護write_ds1302(write_add[0],miao)。 //寫秒 write_ds1302(write_add[1],fen)。 //寫分 write_ds1302(write_add[2],shi)。 //寫時 write_ds1302(write_add[3],ri)。 //寫日 write_ds1302(write_add[4],yue)。 //寫月 write_ds1302(write_add[5],nian)。 //寫星期 write_ds1302(write_add[6],week)。 //寫年 write_ds1302(0x8e,0x80)。 //關(guān)閉寫保護}void write_ds1302ram(uchar add,uchar dat){ add = 1。 //地址是從第二位開始的 add amp。= 0xfe。 //把最低位清零 是寫的命令 add |= 0xc0。 //地址最高兩位為 1 write_ds1302(0x8e,0x00)。 write_ds1302(add,dat)。 write_ds1302(0x8e,0x80)。}uchar read_ds1302ram(uchar add){ add = 1。 //地址是從第二位開始的 add |= 0x01。 //把最高位置1 是讀命令 add |= 0xc0。 //地址最高兩位為 1 return(read_ds1302(add))。 }void init_ds1302(){ uchar i。 rst = 0。 //第一次讀寫數(shù)據(jù)時要把IO品拿低 clk = 0。 io = 0。i = read_ds1302ram(30)。 if(i != 3) { i = 3。 write_ds1302ram(30,i)。 //4050 4100 3080 write_ds1302(0x8e,0x00)。 //打開寫保護 for(i=0。i7。i++) write_ds1302(write_add[i],init_ds[i])。 //把最高位值0 允許ds1302工作 write_ds1302(0x8e,0x80)。 //關(guān)寫保護 }}DS1302與微處理器進行數(shù)據(jù)交換時,首先由微處理器向電路發(fā)送命令字節(jié),命令字節(jié)最高位MSB(D7)必須為邏輯 1,如果D7=0,則禁止寫DS1302,即寫保護;D6=0,指定時鐘數(shù)據(jù),D6=1,指定RAM數(shù)據(jù);D5~D1指定輸入或輸出的特定寄存器;最低位LSB(D0)為邏輯0,指定寫操作(輸入),D0=1,指定讀操作(輸出) 。 溫度程序設(shè)計單總線上最基本的操作有初始化、寫和讀3種,所有其它的操作都由這3種基本操作組合而成,初始化用于對總線上的器件進行狀態(tài)復位,寫用于主節(jié)點向總線上寫入一位數(shù)據(jù),讀用于主節(jié)點從總線上讀取一位數(shù)據(jù)。在這3種操作中,只有寫操作是單向的,初始化操作和讀操作都是雙向的。具體程序設(shè)計如下:byte ow_reset(void){ byte presence。 DQ = 0。 // 拉低總線 delay(29)。 // 保持 480us DQ = 1。 // 釋放總線 delay(3)。 // 等待回復 presence = DQ。 // 讀取信號 delay(25)。 // 等待結(jié)束信號 return(presence)。 // 返回 0:正常 1:不存在} //從 1wire 總線上讀取一個字節(jié)byte read_byte(void){ byte i。 byte value = 0。 for (i=8。i0。i) { value=1。 DQ = 0。 DQ = 1。 delay(1)。 if(DQ)value|=0x80。 delay(6)。 } return(value)。}//向 1WIRE 總線上寫一個字節(jié)void write_byte(char val){ byte i。 for (i=8。 i0。 i) // 一次寫一位 { DQ = 0。 // DQ = valamp。0x01。 delay(5)。 // DQ = 1。 val=val/2。 } delay(5)。} 總結(jié)與展望一、總結(jié)在整個設(shè)計過程中學到了許多沒學到的知識,在電路焊接時雖然沒什么大問題,但從中也知道了焊接在整個作品中的重要性,電路工程量大,不能心急,一個個慢慢來不能急于求成。反而達到事半功倍的效果。對電路的設(shè)計、布局要先有一個好的構(gòu)思,才顯得電路板美觀、大方。程序編寫中,由于思路不清晰,開始時遇到了很多的問題,經(jīng)過靜下心來思考,理清了思路,反而得心應手。在此次設(shè)計中,知道了做事要有一顆平常的心,不要想著走捷徑,一步一腳印。也練就了我的耐心,做什么事都要有耐心。在本次設(shè)計中學到了很多很多東西,這是最重要的。總之,此次畢業(yè)設(shè)計使我的能力得到了全方位的提高,次設(shè)計的電子萬年歷也存在的不足的地方,有待于以后的改進。二、今后研究方向在整個設(shè)計過程中,硬件方面主要設(shè)計了AT89S52單片機的最小系統(tǒng)、DS1302接口電路、DS18B20接口電路、鬧鐘及LCD顯示;軟件方面借助各個渠道的資料,主要設(shè)計了陽歷數(shù)據(jù)讀取程序、陽歷轉(zhuǎn)陰歷程序、溫度采集程序、鬧鈴程序以及LCD顯示程序;系統(tǒng)的調(diào)試主要是通過一塊AT89S52開發(fā)板,再借助于Keil、STC以及少許自己搭建的外圍電路實現(xiàn)的;再此過程中,分步調(diào)試時顯示出了陽歷的日期及時間,還有實時溫度,集中調(diào)試時沒有達到預期效果。此萬年歷具有讀顯示直觀、功能多樣、電路簡潔、成本低廉等諸多優(yōu)點,符合電子儀器儀表的發(fā)展趨勢,具有廣闊的市場前景。 參考文獻[1] [M].北京:電子工業(yè)出版社,2006[2] [M].西安:西安科技大學出版社,2003[3] 何立民.單片機高級教程[M].北京:北京航空航天大
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1