萬年歷矩陣式鍵盤程序_第1頁
萬年歷矩陣式鍵盤程序_第2頁
萬年歷矩陣式鍵盤程序_第3頁
萬年歷矩陣式鍵盤程序_第4頁
萬年歷矩陣式鍵盤程序_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、/ 給力者單片機開發(fā)學(xué)習(xí)系統(tǒng),開發(fā)學(xué)習(xí)都給力! / 學(xué)習(xí)51單片機,其實可以很簡單 / 萬年歷程序 / 日期:2015年06月18日 /#include /調(diào)用51單片機的頭文件/-/1602液晶相關(guān)I/O設(shè)置sbit E=P23; /1602液晶的E腳接在P2.3口上sbit RW=P24; /1602液晶的RW腳接在P2.4口上sbit RS=P25; /1602液晶的RS腳接在P2.5口上/-unsigned char i;/-/1602液晶寄存器設(shè)置unsigned int second=0; /設(shè)置16位的unsigend int型寄存器用來暫存1602要顯示的秒數(shù) unsigned

2、 int minute=0; /設(shè)置16位的unsigend int型寄存器用來暫存1602要顯示的分鐘數(shù)unsigned int hour=0; /設(shè)置16位的unsigend int型寄存器用來暫存1602要顯示的小時數(shù)unsigned int day=1; /設(shè)置16位的unsigend int型寄存器用來暫存1602要顯示的日期unsigned int month=1; /設(shè)置16位的unsigend int型寄存器用來暫存1602要顯示的月份unsigned int year=0; /設(shè)置16位的unsigend int型寄存器用來暫存1602要顯示的年份unsigned int x

3、=0;unsigned int y=0;/-/-/8獨立按鍵相關(guān)I/O設(shè)置sbit P1key=P10; /按鍵P1接在P2.0口上sbit P2key=P11; /按鍵P2接在P2.1口上sbit P3key=P12; /按鍵P3接在P2.2口上sbit P4key=P13; /按鍵P4接在P2.3口上sbit P5key=P14; /按鍵P5接在P2.4口上sbit P6key=P15; /按鍵P6接在P2.5口上sbit P7key=P16; /按鍵P7接在P2.6口上sbit P8key=P17; /按鍵P8接在P2.7口上/-/-/按鍵部分用寄存器設(shè)置unsigned char KE

4、Ybuf; /設(shè)置8位的寄存器用來暫存按鍵鍵值數(shù)據(jù)unsigned char KEYcon;bit KEYbit;bit enterbit;/-#define RIGHT P10;#define LEFT P11;#define UP P12;#define DOWN P13;#define ENTER P14;#define ESC P15;#define REST P16;/-/名稱:定時器0中斷服務(wù)程序/適用:給力者GL9單片機開發(fā)學(xué)習(xí)系統(tǒng)/公司:/網(wǎng)址:/日期:2015年06月18日/-void Timer0(void) interrupt 1 /定時25000微秒 TL0=0xFF;

5、 /重新給TL0賦初值 TH0=0x4B; /重新給TH0賦初值 /*此處用戶自行添加定時器T0中斷處理程序*if(+i39) /對中斷計次,記到40次后,剛好1秒鐘i=0; /對計次用寄存器清零,以被下一個計次循環(huán)/*給1602顯示寄存器賦值(0-9999)*if(+second59) second=0; /秒60進制 if(+minute59) minute=0; /分鐘60進制 if(+hour23) hour=0; /小時24進制if(month=1|month=3|month=5|month=7|month=8|month=10|month=12)&(+day31)|(month=4

6、| month=6|month=9|month=11)&(day30)|(year%4!=0)&(month=2)&(day28)|(year%4=0)&(month=2)&(day29) /月份對應(yīng)相應(yīng)天數(shù) day=1; if(+month12) month=1; /月份12進制 if(+year9999) year=0; /* /*/-/名稱:1602液晶用延時函數(shù)/適用:給力者GL9單片機開發(fā)學(xué)習(xí)系統(tǒng)/公司:/網(wǎng)址:/日期:2015年06月18日/-void Delay1602(unsigned int t) unsigned int k; /定義一個16位寄存器用來做延時用 for(k

7、=0;k=10000)year=year-10000; /年滿10000,減10000 if(x=5); if(x=6)month+; if(month12)month=month-12; /月份滿12,減12 if(x=8)day=day+10; if(x=9)day+; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) / 31天的月份,滿31天后為1日 if(day31)day=1; else if(month=4|month=6|month=9|month=11) / 30天的月份,滿30天后為1日 if(day

8、30)day=1; else if(month=2&year%4=0) / 閏年2月 29天,滿29天后為1日 if(day29)day=1; else if(month=2&year%4!=0) /閏年2月 28天,滿28天后為1日 if(day28)day=1; /*/名稱:日期減法執(zhí)行程序/適用:給力者GL9單片機開發(fā)學(xué)習(xí)系統(tǒng)/公司:/網(wǎng)址:/日期:2015年06月18日/*void date_subtraction(void) if(y=0) /日期行顯示 if(year1000&x=0|year100&x=1|year1&month=12&x=6)month-; /月份減一 if(m

9、onth=1|month=3|month=5|month=7|month=8|month=10|month=12)&x=8) / 當(dāng)31天的月份,日期十位減一鍵按下 if(day1&day10&day1&day1&day10&day1&day=1&day10&day1&day=1&day10&day1&day=24)hour=0; /滿24小時,時間為0 if(x=3)minute=minute+10; if(x=4)minute+; if(minute=60)minute=minute-60; /滿60分鐘,分鐘數(shù)為0 if(x=6)second=second+10; if(x=7)seco

10、nd+; if(second=60)second=second-60; /滿60秒,秒數(shù)為0 /*/名稱:時間減法執(zhí)行程序/適用:給力者GL9單片機開發(fā)學(xué)習(xí)系統(tǒng)/公司:/網(wǎng)址:/日期:2015年06月18日/*void time_subtraction(void) if(y=1) /時間行顯示 if(x=0) / 顯示地址為(0,1) if(hour4&hour=10&hour=24)hour=hour-10; /當(dāng)小時數(shù)為為10到24,小時數(shù)十位減1 if(x=1) if(hour=0)hour=24; hour-; /當(dāng)小時數(shù)為0,借位24小時 if(x=3) if(minute=10&m

11、inute60)minute=minute-10; /分鐘數(shù)大于等于10小于60,分鐘數(shù)十位減1 if(x=4) if(minute=0)minute=60; minute-; /當(dāng)分鐘數(shù)為0時,借位60分鐘 if(x=6) if(second=10&second50) /消除抖動參數(shù),越大消抖效果越好,但是按鍵越不靈敏 keycon=0;keybit=1;elsekeycon=0; /* switch(k) case 1: /UP按鍵按下 Delay1602(50000); if(keybit=1)keybit=0; if(enter_bit=0) /確認件從未按下 x+; if(x9)x=

12、0; else if(enter_bit=1) /確認件曾經(jīng)按下 date_plus(); time_plus(); break;case 2: /DOWN按鍵按下 Delay1602(50000); if(keybit=1)keybit=0; if(enter_bit=0) /確認件從未按下 if(x1)x=10; x-; else if(enter_bit=1) /確認件曾經(jīng)按下 date_subtraction(); time_subtraction(); break;case 3: /RIGHT按鍵按下 Delay1602(50000); if(keybit=1)keybit=0; if(enter_bit=0)y=0; break;case 4: /LEFT按鍵按下 Delay1602(50000); if(keybit=1)keybit=0; if(enter_bit=0) y

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論