簡(jiǎn)單12864電子鐘無(wú)時(shí)鐘芯片_第1頁(yè)
簡(jiǎn)單12864電子鐘無(wú)時(shí)鐘芯片_第2頁(yè)
簡(jiǎn)單12864電子鐘無(wú)時(shí)鐘芯片_第3頁(yè)
簡(jiǎn)單12864電子鐘無(wú)時(shí)鐘芯片_第4頁(yè)
簡(jiǎn)單12864電子鐘無(wú)時(shí)鐘芯片_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、/*液晶顯示ST7920自建字庫(kù)*/文件名:LCD_12864.C/日期:2012/11/9/版本:00/作者:JLM/程序參數(shù)說(shuō)明:/晶振:11.0592M/功能:/*/#include <reg52.h>#define uchar unsigned char#define uint unsigned int/*定義變量*/#define LCD_data P0uchar flag_1s;ucharflag_50ms;uchar sec,min,hour,week,day,yue;uchar year_H,year_L; /定義年月日 時(shí)分秒uchar time_hour,tim

2、e_min,time_sec;uchar key_counter;/模式按鍵按下次數(shù)uchar key_clock_counter;uchar key_mode_num_flag;/*位定義*/sbit LCD_EN=P27; /液晶使能sbit LCD_RD=P26; /RD=0為命令;RD=1為數(shù)據(jù)sbit LCD_RW=P25; /RW=0為讀狀態(tài);RW=1為寫(xiě)狀態(tài)sbit LCD_PSB=P32; /選擇并行或者是串行sbit LCD_RST=P37; /液晶復(fù)位sbitKey_Mode=P14;/模式按鍵sbitKey_Add=P15;/加數(shù)據(jù)按鍵sbitKey_Sub=P16;/減

3、數(shù)據(jù)按鍵sbitKey_clock=P17;/向上調(diào)試按鍵/sbitKey_Down=P18;/向下調(diào)試按鍵uchar code NUM=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x00,0x2d;/密碼數(shù)字uchar code HanZi_3=0xc1,0xfa,0xc4,0xea,0xb4,0xf3,0xbc,0xaa;/龍年大吉uchar code HanZi_4=0xc4,0xea,0xd4,0xc2,0xc8,0xd5,0xca,0xb1,0xb7,0xd6,0xc3,0xeb,0xa1,0xaa;/年月日 時(shí)分秒 -/*函

4、數(shù)聲明*/void delay_us(uint us);void delay_ms(uint ms);void TIME_PAGE0(void);void Scan_key(void);void Scan_key_add(void);void Scan_key_sub(void);void ININT_DAT(void);void TIME_0();void TIME_PAGE0(void);void TIME_PAGE1(void);void Clock_PAGE2(void);/*判忙程序*/原函數(shù):void read_LCDbus(void)/功能:判斷液晶是否在傳輸數(shù)據(jù) /時(shí)間:/入口

5、參數(shù):/出口參數(shù):/*/void read_LCDbus(void)LCD_data=0x00;/先清空數(shù)據(jù)LCD_RD=0;/選擇命令LCD_RW=1;LCD_EN=0; /寫(xiě) while(LCD_data&0x80); /判斷液晶工作LCD_EN=1; /開(kāi)使能delay_us(10);LCD_EN=0; /關(guān)使能;/*寫(xiě)指令*/原函數(shù):void Write_Comd(uchar value)/功能:寫(xiě)指令/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void Write_Comd(uchar value)read_LCDbus();/讀忙標(biāo)志LCD_RD=0;/選擇指令LCD_RW=0;

6、/選擇寫(xiě)方式delay_us(10); LCD_data=value; /寫(xiě)入Value指令值LCD_EN=1;/使能位置一delay_us(1); LCD_EN=0;/*寫(xiě)數(shù)據(jù)*/原函數(shù):void Write_LcdData(uchar D_value)/功能:寫(xiě)指令/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void Write_LcdData(uchar D_value)read_LCDbus();/讀忙標(biāo)志LCD_RD=1;/選擇數(shù)據(jù)LCD_RW=0;/選擇寫(xiě)方式delay_us(10); LCD_data=D_value; /寫(xiě)入Value指令值LCD_EN=1;/使能位置一delay_u

7、s(1);LCD_EN=0;/*讀RAM數(shù)據(jù)*/原函數(shù):uchar Read_LcdData(void)/功能:寫(xiě)指令/時(shí)間:/入口參數(shù):/出口參數(shù):/*/uchar Read_LcdData()/ /*初始化LCD*/原函數(shù):void INIT_LCD(void)/功能:寫(xiě)指令/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void INIT_LCD(void)delay_ms(10);LCD_PSB=1; /選擇并行口LCD_RST=0;/復(fù)位delay_us(1);LCD_RST=1;/復(fù)位開(kāi)Write_Comd(0x30);/功能字控制delay_us(10);Write_Comd(0x30);

8、delay_us(10);Write_Comd(0x02);/地址歸為delay_us(10);Write_Comd(0x0C);/開(kāi)顯示與游標(biāo)delay_us(10);Write_Comd(0x01); /清顯示delay_us(100);Write_Comd(0x80);/設(shè)置DDRAM地址起始地址/*清零LCD*/原函數(shù):void ClearLCD(void)/功能:清屏LCD/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void ClearLCD(void)/*顯示無(wú)字庫(kù)漢字*/原函數(shù):void Write_LcdHz(void)/功能:寫(xiě)指令/時(shí)間:/入口參數(shù):x 數(shù)組suxcol; xad

9、dr=顯示的地址/出口參數(shù):/*/*顯示字庫(kù)漢字*/原函數(shù):/功能:/時(shí)間:/入口參數(shù):定義形參數(shù)組uchar s,顯示地址XADDR,數(shù)組指針N/出口參數(shù):/*/*顯示數(shù)字或者字符單個(gè)字節(jié)*/顯示單個(gè)字符/*void WriteLcd_Displaybits(uchar s,uchar xaddr,uchar n)Write_Comd(xaddr); /輸入顯示地址Write_LcdData(*(s+n); /*(s+n)=sn;delay_us(10); */顯示雙個(gè)字符void WriteLcd_Display_2bits(uchar s,uchar xaddr,uchar n1,uch

10、ar n2)Write_Comd(xaddr); /輸入顯示地址Write_LcdData(*(s+n1); /*(s+n)=sn;delay_us(500);Write_LcdData(*(s+n2); /*(s+n)=sn;delay_us(500);/*顯示漢字2個(gè)字節(jié)*/顯示單個(gè)漢字void LCD_Display_HZ(uchar s,uchar xaddr,uchar n)uchar i; Write_Comd(xaddr); for(i=0;i<n;i+) s+; s+; Write_LcdData(*(s+); /指向數(shù)組的S Write_LcdData(*s); /指向

11、數(shù)組的S+1delay_us(500); /顯示單個(gè)漢字 /*void LCD_DisplayHanZi(uchar s,uchar xaddr,uchar n1)uchar i; Write_Comd(xaddr); for(i=0;i<n1;i+) Write_LcdData(*(s+); /指向數(shù)組的SWrite_LcdData(*(s+); /指向數(shù)組S */*按鍵模式掃描*/原函數(shù):void Scan_key_mode(void)/功能:按鍵模式掃描/時(shí)間:/入口參數(shù):Key_Mode=P11;/出口參數(shù):/*/void Scan_key(void)if(Key_Mode=0)

12、 /模式按鍵掃描 delay_us(2500);while(!Key_Mode);delay_us(2500);TR0=0;key_counter+;TIME_PAGE0();/調(diào)用調(diào)整時(shí)間界while(1)if(Key_Mode=0)delay_us(2500); while(!Key_Mode);delay_us(2500);key_counter+;TIME_PAGE0();/調(diào)用調(diào)整時(shí)間界switch(key_counter)case 1:WriteLcd_Display_2bits(NUM,0x91,year_H/10,year_H%10);/20Write_Comd(0x10);

13、/光標(biāo)返回delay_ms(100);Scan_key_add();Scan_key_sub();break;case 2:WriteLcd_Display_2bits(NUM,0x92,year_L/10,year_L%10);/20Write_Comd(0x10);delay_ms(100);Scan_key_add();Scan_key_sub();break;case 3:WriteLcd_Display_2bits(NUM,0x94,yue/10,yue%10);/12Write_Comd(0x10);delay_ms(100);Scan_key_add();Scan_key_sub

14、();break;/月份case 4:WriteLcd_Display_2bits(NUM,0x96,day/10,day%10);/12Write_Comd(0x10);delay_ms(100);Scan_key_add();Scan_key_sub();break;/日case 5:WriteLcd_Display_2bits(NUM,0x89,hour/10,hour%10);/12Write_Comd(0x10);delay_ms(100);Scan_key_add();Scan_key_sub();break;/時(shí)case 6:WriteLcd_Display_2bits(NUM,

15、0x8b,min/10,min%10);/12Write_Comd(0x10);delay_ms(100);Scan_key_add();Scan_key_sub();break;/分case 7:WriteLcd_Display_2bits(NUM,0x8d,sec/10,sec%10);/12Write_Comd(0x10);delay_ms(100);Scan_key_add();Scan_key_sub();break;/秒case 8:key_counter=0;Write_Comd(0x0c);/關(guān)閉游標(biāo)顯示反白Write_Comd(0x01); /清LCD顯示TR0=1;/啟動(dòng)定

16、時(shí)器 break; if(key_counter=0)Write_Comd(0x0c);/關(guān)閉游標(biāo)顯示反白Write_Comd(0x01);/清LCDflag_1s=0;break;flag_1s=0; /*加按鍵掃描*/原函數(shù):void Scan_key_add(void)/功能:加按鍵掃描/時(shí)間:/入口參數(shù):Key_Add=P1.4/出口參數(shù):/*/void Scan_key_add(void) if(Key_Add=0)delay_us(1500);while(!Key_Add);delay_us(1500);if(key_counter=1)/判斷是不是年修改year_H+;if(ye

17、ar_H=99)year_H=0;if(key_counter=2)/判斷是不是年修改year_L+;if(year_L=99)year_L=0;if(key_counter=3)/判斷是不是月修改yue+;if(yue=13)yue=0;if(key_counter=4)/判斷是不是日修改day+;if(day=32)day=1;if(key_counter=5)/判斷是不是時(shí)修改hour+;if(hour=25)hour=0;if(key_counter=6)/判斷是不是分修改min+;if(min=60)min=0;if(key_counter=7)/判斷是不是秒修改sec+;if(se

18、c=60)sec=0; /*減按鍵掃描*/原函數(shù):void Scan_key_sub(void)/功能:減按鍵掃描/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void Scan_key_sub(void) if(Key_Sub=0)delay_us(2500);while(!Key_Sub);if(key_counter=1)/判斷是不是年修改if(year_H>0)year_H-;if(year_H=0)year_H=99;if(key_counter=2)/判斷是不是年修改if(year_L>0)year_L-;if(year_L=0)year_L=99;if(key_counter

19、=3)/判斷是不是月修改if(yue>0)yue-;if(yue=0)yue=12;if(key_counter=4)/判斷是不是日修改if(day>0)day-; if(day=0) day=31;if(key_counter=5)/判斷是不是時(shí)修改if(hour>0)hour-;if(hour=0)hour=24;if(key_counter=6)/判斷是不是分修改if(min>0)min-;if(min=0)min=59;if(key_counter=7)/判斷是不是秒修改if(sec>0)sec-;if(sec=0)sec=59; /*初始時(shí)鐘頁(yè)面*/原函

20、數(shù):void TIME_PAGE0(void)/功能:時(shí)鐘顯示頁(yè)/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void TIME_PAGE()Write_Comd(0x01); /清LCD顯示delay_us(100);LCD_Display_HZ(HanZi_3,0x82,0);/龍LCD_Display_HZ(HanZi_3,0x83,1);/年LCD_Display_HZ(HanZi_3,0x84,2);/大LCD_Display_HZ(HanZi_3,0x85,3);/吉Write_Comd(0x01); /清LCD顯示W(wǎng)rite_Comd(0x0c); /關(guān)閉游標(biāo)顯示反白delay_us(1

21、00);/*可調(diào)時(shí)鐘頁(yè)面*/原函數(shù):void TIME_PAGE0(void)/功能:時(shí)鐘顯示頁(yè)/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void TIME_PAGE0(void)Write_Comd(0x01); /清LCD顯示delay_us(100);WriteLcd_Display_2bits(NUM,0x91,year_H/10,year_H%10);/20WriteLcd_Display_2bits(NUM,0x92,year_L/10,year_L%10);/20 WriteLcd_Display_2bits(NUM,0x93,11,11);/-WriteLcd_Display_2b

22、its(NUM,0x94,yue/10,yue%10);/12 WriteLcd_Display_2bits(NUM,0x95,11,11);/-WriteLcd_Display_2bits(NUM,0x96,day/10,day%10);/12WriteLcd_Display_2bits(NUM,0x89,hour/10,hour%10);/12LCD_Display_HZ(HanZi_4,0x8a,3);/時(shí)WriteLcd_Display_2bits(NUM,0x8b,min/10,min%10);/00LCD_Display_HZ(HanZi_4,0x8c,4);/分WriteLcd_

23、Display_2bits(NUM,0x8d,sec/10,sec%10);/00LCD_Display_HZ(HanZi_4,0x8e,5);/秒Write_Comd(0x0f);/游標(biāo)顯示W(wǎng)rite_Comd(0x80);/ /*時(shí)鐘顯示頁(yè)面*/原函數(shù):void TIME_PAGE1(void)/功能:時(shí)鐘顯示頁(yè)/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void TIME_PAGE1(void)LCD_Display_HZ(HanZi_3,0x9a,0);/龍LCD_Display_HZ(HanZi_3,0x9b,1);/年LCD_Display_HZ(HanZi_3,0x9c,2);/大LC

24、D_Display_HZ(HanZi_3,0x9d,3);/吉WriteLcd_Display_2bits(NUM,0x91,year_H/10,year_H%10);/20WriteLcd_Display_2bits(NUM,0x92,year_L/10,year_L%10);/20 WriteLcd_Display_2bits(NUM,0x93,11,11);/-WriteLcd_Display_2bits(NUM,0x94,yue/10,yue%10);/12 WriteLcd_Display_2bits(NUM,0x95,11,11);/-WriteLcd_Display_2bits(

25、NUM,0x96,day/10,day%10);/12WriteLcd_Display_2bits(NUM,0x89,hour/10,hour%10);/12LCD_Display_HZ(HanZi_4,0x8a,3);/時(shí)WriteLcd_Display_2bits(NUM,0x8b,min/10,min%10);/00LCD_Display_HZ(HanZi_4,0x8c,4);/分WriteLcd_Display_2bits(NUM,0x8d,sec/10,sec%10);/00LCD_Display_HZ(HanZi_4,0x8e,5);/秒Write_Comd(0x0c);/關(guān)閉游標(biāo)

26、顯示反白 delay_us(10); /*鬧鐘調(diào)整頁(yè)面*/原函數(shù):void Clock_PAGE2(void)/功能:時(shí)鐘顯示頁(yè)/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void Clock_PAGE2(void)Write_Comd(0x01); /清LCD顯示delay_us(100);WriteLcd_Display_2bits(NUM,0x89,hour/10,hour%10);/12LCD_Display_HZ(HanZi_4,0x8a,3);/時(shí)WriteLcd_Display_2bits(NUM,0x8b,min/10,min%10);/00LCD_Display_HZ(HanZi_

27、4,0x8c,4);/分WriteLcd_Display_2bits(NUM,0x8d,sec/10,sec%10);/00LCD_Display_HZ(HanZi_4,0x8e,5);/秒Write_Comd(0x0f);/游標(biāo)顯示W(wǎng)rite_Comd(0x80);/*時(shí)間程序*/原函數(shù):void Auto_time(void)/功能:時(shí)間自動(dòng)調(diào)整/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void Auto_time(void)if(flag_1s)flag_1s=0;sec+;if(sec>59)sec=0;min+;if(min>59)min=0;hour+;if(hour>

28、;23)hour=0;week+;if(week=7)week=1;day+;/2013年有7個(gè)月為31天=1.3.5.7.8.10.12if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12)&&(day=31)yue+; /月份加一判斷是否為大月或者為小月day=1;/如果其中一個(gè)月到,并且天數(shù)達(dá)到31天就返回重新開(kāi)始計(jì)數(shù)/4個(gè)月是30天=4,6,9,11else if(yue=4|yue=6|yue=9|yue=11)&&(day=30)yue+;day=1;/1個(gè)月是28天=2else if(yue=2)&&

29、amp;(day=28)yue+;day=1;/判斷年數(shù)if(yue=12) /等于12個(gè)月了就重新開(kāi)始從第一個(gè)月開(kāi)始yue=1;year_L+;if(year_L=99)year_L=12;year_H+;if(year_H=99)year_H=20; /*定時(shí)鬧鐘程序*/原函數(shù):void time_clock(void)/功能:鬧鐘程序/時(shí)間:/入口參數(shù):/出口參數(shù):/*/void time_clock(void)if(Key_clock=0)delay_us(2500);while(!Key_clock);delay_us(2500);key_clock_counter+;Clock_P

30、AGE2();while(1)if(Key_clock=0)delay_us(2500);while(!Key_clock);delay_us(2500);Clock_PAGE2();switch(key_clock_counter)case 1: WriteLcd_Display_2bits(NUM,0x89,time_hour/10,time_hour%10);/12Write_Comd(0x10);delay_ms(100);Scan_key_add();Scan_key_sub(); break;case 2:WriteLcd_Display_2bits(NUM,0x8b,time_min/10,time_min%10);/12Write_Comd(0x10);delay_ms(100);Scan_key_add();Scan_key_sub();break;case 3:WriteLcd_Display_2bits(NUM,0x8d,time_sec/10,time_sec%10);/12Write_Comd(0x10);delay_ms(100);Scan_key_add();Scan_key_sub();break;/秒case 4:key_clock_counter=0;Write_Comd(0x0c);/關(guān)閉

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論