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

正文內(nèi)容

基于at89s52單片機(jī)的數(shù)字電子鐘設(shè)計(編輯修改稿)

2025-07-03 21:28 本頁面
 

【文章內(nèi)容簡介】 按下K2快速切換鬧鐘開關(guān)。4. 如果LCD1602出現(xiàn)顯示異常,可以在正常顯示狀態(tài)下按K3,重新初始化LCD。 定義變量1. 時間顯示部分:年(Year)、月(Month)、日(Day)、時(Hour)、分(Min)、秒(Sec)、星期(Week)、鬧鐘所設(shè)定的時(A_Hour)、分(A_Min)、 鬧鐘開狀態(tài)標(biāo)志(Alarm_F)。2. 時間調(diào)整部分:暫存狀態(tài)的年(Year_tmp)、月(Month_tmp)、日(Day_tmp)、時(Hour_tmp)、分(Min_tmp)、秒(Sec_tmp)、鬧鐘所設(shè)定的時(A_Hour_tmp)、分(A_Min_tmp)。3. 溫度顯示部分:溫度值(Temperature)、溫度十位(tens)、溫度個位(units)、溫度十分位(decile)、過渡變量(T_tmp)。 接線方式按鍵K1~~。1602LCD的數(shù)據(jù)位D0~~ ,。 編程思路1. 給以下變量賦初值:年(Year)、月(Month)、日(Day)、時(Hour)、分(Min)、秒(Sec)、鬧鐘狀態(tài)(Aflag)、鬧鐘所設(shè)定的時(A_Hour)、分(A_Min),計算變量星期(Week)。2. 因為晶振頻率為12MHz,所以計數(shù)頻率為12MHz/12=1MHz,這就需要計數(shù)器0計數(shù)1000000次才可以達(dá)到一秒鐘。我們用定時器0工作在方式1狀態(tài),每次計數(shù)50000次,如此進(jìn)行20次,即可湊夠一秒鐘。這樣可以得到初始化定時器的控制字:TMOD=0x01,計數(shù)初值6553650000=15536即 0x3cb0,這樣就可以設(shè)計一個計數(shù)一秒的函數(shù)。3. 初始化溫度傳感器DS18B20,讀取溫度獲得以下變量:溫度十位(tens)、溫度個位(units)、溫度十分位(decile)。4. 讀相應(yīng)變量的值,送入LCD顯示時間和溫度等信息。5. 不斷的掃描按鍵,并且響應(yīng)按鍵輸入。在進(jìn)入設(shè)定模式后,所有時間變量被過渡變量代替,如果確認(rèn)設(shè)置,則過渡變量賦給時間變量,如果取消設(shè)置,則還使用原時間變量。 主程序流程圖開始定時器0初始化 溫度傳感器DS18B20初始化液晶顯示器LCD1602初始化液晶顯示器LCD1602初始化把自定義字符寫入LCD的CGRAMC 判斷鬧鐘是否啟動 Y鬧鐘響 N測量溫度掃描鍵盤判斷K2是否按下 Y開/關(guān)鬧鐘 N判斷K3是否按下 Y重新初始化LCD 判斷K1是否按下 N Y計數(shù)器K1_t加1AB N判斷K1_t是否大于1C計數(shù)器K1_t=2進(jìn)入時間設(shè)定模式進(jìn)入正常顯示模式CCBA判斷K1_t是否為1判斷K1_t是否為10 NY進(jìn)入設(shè)定菜單 Y Y執(zhí)行鍵盤操作 N圖31 主程序流程圖 程序清單及注釋本設(shè)計使用Keil μVision3(如圖32)作為編譯和調(diào)試的環(huán)境。為了條理清晰和方便程序移植,在工程中按照功能模塊化分為如下幾個文件:、。圖32 編譯和調(diào)試的環(huán)境Keil μVision3 主程序“”includeincludeincludeincludeincludeincludesbit Buzz=P2^3。 //定義蜂鳴器的接口unsigned char K1_t=0。 //記錄K1連續(xù)按下的次數(shù)unsigned char Hint_t=0。unsigned char code Hint1[]=Press K1 to set 。unsigned char code Hint2[]=time and alarm! 。unsigned char code Hint3[]=Alarm setting: 。unsigned char code Hint4[]= 。 //十個空格unsigned int Year=2008,Year_tmp。unsigned char Month=6,Day=10,Week,Hour=8,Min=59,Sec=55。 //復(fù)位的時間初值unsigned char A_Hour=9,A_Min=1。unsigned char Month_tmp,Day_tmp,Hour_tmp,Min_tmp,Sec_tmp。unsigned char A_Hour_tmp,A_Min_tmp。unsigned char key。bit Alarm_F=1。 //鬧鐘開狀態(tài)標(biāo)志位unsigned char bissextile(unsigned int y)。 //函數(shù)聲明,判斷是否閏年unsigned char Day_Max(unsigned char m)。//函數(shù)聲明,判斷當(dāng)月天數(shù)unsigned char Week_Calculate(unsigned int y,unsigned char m,unsigned char d)。//函數(shù)聲明,計算星期void Timer0_Init()。 //函數(shù)聲明,定時器T0初始化void Normal_Display()。 //函數(shù)聲明,正常顯示模式void Alarm_Judge()。 //函數(shù)聲明,判斷鬧鈴狀態(tài)void Setting_Menu()。 //函數(shù)聲明,進(jìn)入設(shè)定菜單void Setting_Display(unsigned char c)。//函數(shù)聲明,顯示設(shè)定模式void Key_Action(unsigned char c)。 //函數(shù)聲明,響應(yīng)鍵盤輸入void Alarm()。 //函數(shù)聲明,啟動鬧鈴main(){ Timer0_Init()。 //定時器0初始化 DS18B20_init()。 //溫度傳感器DS18B20初始化 LCD_Init()。 //顯示器LCD602初始化 User_Defined_Char()。 //把自定義字符寫入LCD1602的CGRAM while(1) { Alarm_Judge()。 //判斷鬧鈴是否啟動 Readtemperature()。 //讀DS18B20檢測到的溫度 key=Key_Scan()。 //掃描鍵盤 if(key==K2) //如果按下K2,則打開或關(guān)閉鬧鐘功能 Alarm_F=~Alarm_F。 if(key==K3) //如果按下K3,則初始化LCD1602(處理LCD顯示故障) { LCD_Init()。 User_Defined_Char()。 } if(key==K1) //如果K1被按下 { K1_t++。 //用K1_t記錄K1按下的次數(shù) if(K1_t==10) //如果按下次數(shù)滿10次,重新賦值為2 K1_t=2。 } if(K1_t==1) //如果K1_t等于1 Setting_Menu()。 //進(jìn)入設(shè)定菜單 if(K1_t1) //如果K1_t大于1 Setting_Display(K1_t)。//進(jìn)入時間設(shè)定模式 Key_Action(K1_t)。 //由K1_t的值設(shè)定響應(yīng)鍵盤輸入的變量 if(K1_t==0) //如果K1_t等于0 Normal_Display()。 //進(jìn)入正常顯示模式 }}void Timer0_Init() //定時器0初始化 TMOD=0x11,計數(shù)初值0x4C00。{ EA=1。 //開總中斷 ET0=1。 //開定時器0中斷 TMOD=0x11。 //設(shè)置定時器0工作在方式1(16位) TH0=0x3c。 //計數(shù)初值為6553650000=15536 ,即3cb0H. TL0=0xb0。 TR0=1。 //啟動定時器0}void Timer0Int(void) interrupt 1 using 3 //定時器0中斷服務(wù)程序{ static unsigned char count0=0。 TR0=0。 TH0+=0x3c。 TL0+=0xb0+7。 //補(bǔ)償時間誤差,此補(bǔ)償值是通過調(diào)試得知 TR0=1。 count0++。 if(count0==20) //滿一秒 { count0=0。 Sec++。 if(Sec==60) //滿一分鐘 { Sec=0。 Min++。 if(Min==60) //滿一小時 { Min=0。 Hour++。 if(Hour==24) //滿一天 { Hour=0。 Day++。 if(DayDay_Max(Month)) //滿一個月(先判斷當(dāng)月最大天數(shù)) { Day=1。 Month++。 if(Month12) //滿一年 { Month=1。 Year++。 } } } } } }}void Normal_Display() // 正常顯示狀態(tài){ Set_Position(0,0)。 //設(shè)置顯示地址 Write_Data(0x04)。 //顯示空格 Write_Data(Year/1000+0x30)。 //顯示年的千位數(shù)(數(shù)字+30H等于所對應(yīng)ASCII碼) Write_Data((Year%1000)/100+0x30)。 //顯示年的百位數(shù) Write_Data(((Year%1000)%100)/10+0x30)。 //顯示年的十位數(shù) Write_Data(((Year%1000)%100)%10+0x30)。 //顯示年的個位數(shù) Write_Data(39。39。) 。 //顯示 Write_Data(Month/10+0x30)。 //顯示月的十位數(shù) Write_Data(Month%10+0x30)。 //顯示月的個位數(shù) Write_Data(39。39。) 。 //顯示 Write_Data(Day/10+0x30)。 //顯示日的十位數(shù) Write_Data(Day%10+0x30)。 //顯示日的個位數(shù) Write_Data(0x04)。 //顯示空格 Write_Data(0x02) 。//顯示一個心形圖案 Week=Week_Calculate(Year,Month,Day)。 switch(Week) //顯示星期數(shù) { case 0: Write_Data(39。M39。)。Write_Data(39。o39。)。Write_Data(39。n39。)。break。 //顯示星期一 case 1: Write_Data(39。T39。)。Write_Data(39。u39。)。Write_Data(39。e39。)。break。 //顯示星期二 case 2: Write_Data(39。W39。)。Write_Data(39。e39。)。Write_Data(39。d39。)。break。 //顯示星期三 case 3: Write_Data(39。T39。)。Write_Data(39。h39。)。Write_Data(39。u39。)。break。 //顯示星期四 case 4: Write_Data(39。F39。)。Write_Data(39。r39。)。Write_Data(39。i39。)。break。 //顯示星期五 case 5: Write_Data(39。S39。)。Write_Data(39。a39。)。Write_Data(39。t39。)。break。 //顯示星期六 case 6: Write_Data(39。S39。)。Write_Data(39。u39。)。Write_Data(39。n39。)。break。 //顯示星期天 default: break。 } Set_Position(1,0)。 //設(shè)置顯示地址 Write_Data(0x04)。 //顯示空格 Write_Data(Hour/10+0x30)。 //顯示時的十位數(shù) Write_Data(Hour%10+0x30)。 //顯示時的個位數(shù) Write_Data(39。:39。) 。 //顯示: Write_Data(Min/10+0x30)。 //顯示分的十位數(shù) Write_Data(Min%10+0x30)。 //顯示分的個位數(shù) Write_Data(39。:39。) 。 //顯示: Write_Data(Sec/10+0x30)。 //顯示秒的十位數(shù) Write_Data(Sec%10+0x30)。 //顯示秒的個位數(shù) if(Alarm_F) //如果鬧鐘開啟 Write_Data(0x01)。 //顯示開鬧鐘符號 else Write_Data(0x04)。 //
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1