#include"stc12c5a60s2.h" #define uchar unsigned char #define uint unsigned int sbit rs=P2^5; sbit rw=P2^6; sbit E=P2^7; bit shuaxin=1; sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; uchar name[]="Name: Xuwenlei "; uchar tim[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x53,0x4a}; //0~9和: S J uchar i; uchar shan; uchar js50ms,second,minut,hour; uchar s1,s2,m1,m2,h1,h2; void delay(uchar x) //延時(shí)函數(shù) { uint y; for(;x>0;x--) { for(y=100;y>0;y--) {}; } } void LCD_wrdata(uchar dat) //寫(xiě)數(shù)據(jù)到LCD { delay(6); rs=1; //寫(xiě)數(shù)據(jù)時(shí)RS拉高 rw=0; E=1; P0=dat; delay(6); E=0; delay(6); } void LCD_wrcom(uchar cdat)//寫(xiě)指令到LCD { delay(6); rs=0;//寫(xiě)指令時(shí)RS拉低 rw=0; E=1; P0=cdat;// delay(6);//不加此延時(shí)將導(dǎo)致不能寫(xiě)入指令,但能寫(xiě)入顯示數(shù)據(jù) E=0; delay(6); } void LCD_Clear() //清屏函數(shù) { LCD_wrcom(0x01); delay(6); } void initiate() //1602初始化函數(shù) { LCD_wrcom(0x38); // 顯示模式設(shè)置:16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口 LCD_wrcom(0x06); // 顯示模式設(shè)置:顯示開(kāi),有光標(biāo),光標(biāo)閃爍 LCD_wrcom(0x0c); // 顯示模式設(shè)置:光標(biāo)右移,字符不移 } void T0_init() //T0初始化 { TMOD=0x01; //T0方式1 TH0=0x4c; TL0=0x00; //50ms初值 TR0=1; ET0=1; EX0=1; IT0=1; EA=1; } void LCD_wirte_setring(uchar x,uchar y,uchar *s) //寫(xiě)字符串函數(shù) { if(y==0){LCD_wrcom( 0x80+x);} else{LCD_wrcom( 0xc0+x);} while(*s) { LCD_wrdata(*s); s++; } } void LCD_wirte_data(uchar x,uchar y,uchar dat) //寫(xiě)字符函數(shù) { if(y==0){LCD_wrcom( 0x80+x);} else{LCD_wrcom( 0xc0+x);} LCD_wrdata(dat); } void LCD_Time() //時(shí)間顯示函數(shù) { s1=second%10; // 時(shí)間賦值 秒分時(shí) s2=second/10; m1=minut%10; m2=minut/10; h1=hour%10; h2=hour/10; LCD_wirte_data(6,1,tim[h2]); LCD_wirte_data(7,1,tim[h1]); LCD_wirte_data(8,1,tim[10]); LCD_wirte_data(9,1,tim[m2]); LCD_wirte_data(10,1,tim[m1]); LCD_wirte_data(11,1,tim[10]); LCD_wirte_data(12,1,tim[s2]); LCD_wirte_data(13,1,s1+'0'); } void key_can() interrupt 0 { key1=1;key2=1; key3=1;key4=1; if(key1==0){ shan++; TR0=0; if(shan==4)shan=0 ; switch(shan){ case 0: shan=0;TR0=1; LCD_wrcom(0x0c); LCD_wirte_setring(1,0,"Name:Xuwenlei ") ; break; case 1: LCD_wirte_setring(1,0,"Name:hour ") ; LCD_wrcom(0x0f); delay(10); break; case 2: LCD_wirte_setring(1,0,"Name:mint ") ; LCD_wrcom(0x0f); delay(10); break; case 3: LCD_wirte_setring(1,0,"Name:second ") ; LCD_wrcom(0x0f); delay(10); break; } } // if(key2==0&&shan==1) if(key2==0){ if(shan==1) { hour++; shuaxin=1; //h加1 if(hour==24){hour=0;} } else if(shan==2){minut++; shuaxin=1; if(minut==60){minut=0;} } else if(shan==3){second++;shuaxin=1; if(second==60){second=0; } } } if(key3==0){ if(shan==1) { //h減1 if(hour==0){hour=24;} hour--;shuaxin=1; } else if(shan==2){ if(minut==0){minut=60;}minut--;shuaxin=1; } else if(shan==3){ if(second==0){second=60;} second--;shuaxin=1; } } } void T0_intop() interrupt 1 { TH0=0x4c; TL0=0x00; //50ms初值重裝 js50ms++; if(js50ms==20) //1s { js50ms=0; shuaxin=1; second++; if(second==60) //60s { second=0; minut++; if(minut==60) //60m { minut=0; hour++; if(hour==24) //60h { hour=0; } } } } } void main() { initiate(); // 調(diào)1602初始化函數(shù) T0_init(); //T0 初始化 LCD_Clear(); //清屏 LCD_wirte_setring(1,0,"Name:Xuwenlei") ; LCD_wirte_setring(1,1,"Time:") ; while(1) { // { LCD_Time(); } if(shuaxin) { shuaxin=0; LCD_Time(); } } }
|