📄 1602.c
字号:
#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};uchar code table1[]=" : : ";uchar code table2[]=" / / ";int i,a,shi,fen,miao,year,month,day,r1,r2,k,num,temp;sbit rs=P2^4;sbit rw=P2^5;sbit e=P2^6;void delay(uint z){ uint x,y; for (x=z;x>0;x--) for (y=125;y>0;y--);}void write_com(uchar com){ rs=0; rw=0; P0=com; delay(5); e=1; delay(5); e=0;}void write_date(uchar date){ rs=1; rw=0; P0=date; delay(5); e=1; delay(5); e=0;}void unit(){ TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; shi=23; fen=59; miao=57; year=2009; month=12; day=31; k=0; write_com(0x3f);//功能设置 write_com(0x01);//清屏 write_com(0x0c);//显示开关控制 write_com(0x06);//输入方式 write_com(0x80+0x40+4);//指针 for (i=0;i<8;i++) { write_date(table1[i]); } write_com(0x80+3); for (i=0;i<10;i++) { write_date(table2[i]); }}/*判定一个月有30天还是31天*/void ye(){ switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12:r1++;break; case 2: case 4: case 6: case 9: case 11:r2++;break; } if (r1==1) { r1=0; if (day==31) { day=1; if (month<11) month++; } else day++; } if (r2==1) { r2=0; if (day==30) { day=1; if (month==12) { month=1; year++; } else month++; } else day++; }}void write_add_date(uchar add,uchar date){ write_com(0x80+add); write_date(date);}void write_com_com(uchar add,uchar com){ write_com(0x80+add); write_com(com);}/*显示函数*/void display(){ write_add_date(0x40+4,table[shi/10]); delay(5); write_add_date(0x40+5,table[shi%10]); delay(5); write_add_date(0x40+7,table[fen/10]); delay(5); write_add_date(0x40+8,table[fen%10]); delay(5); write_add_date(0x40+10,table[miao/10]); delay(5); write_add_date(0x40+11,table[miao%10]); delay(5); write_add_date(3,table[year/1000]); delay(5); write_add_date(4,table[year%1000/100]); delay(5); write_add_date(5,table[year%1000%100/10]); delay(5); write_add_date(6,table[year%10]); delay(5); write_add_date(8,table[month/10]); delay(5); write_add_date(9,table[month%10]); delay(5); write_add_date(11,table[day/10]); delay(5); write_add_date(12,table[day%10]);}void timer() interrupt 1{ TH0=(65535-50000)/256; TL0=(65535-50000)%256; a++; if (a==20) { a=0; if (miao==59) { miao=0; if (fen==59) { fen=0; if (shi==23) { shi=0; ye(); } else shi++; } else fen++; } else miao++; }}/*用键盘控制光标位置*/key2(){ if (k==1) { write_com_com(0x40+11,0x0d); if (num!=20) /*num若等于20,则证明无键按下*/ { miao=((miao/10)*10+num); /*将键盘值读入显示函数中,若没有这步,输入的键盘值将不被保存*/ } } if (k==2) { write_com_com(0x40+10,0x0d); if (num!=20) { if (num>5) { miao=0; fen=0; shi=0; } else miao=((miao%10)+(num*10)); } } if (k==3) { write_com_com(0x40+8,0x0d); if (num!=20) { fen=((fen/10)*10+num); } } if (k==4) { write_com_com(0x40+7,0x0d); if (num!=20) { if (num>5) { miao=0; fen=0; shi=0; } else fen=((fen%10)+(num*10)); } } if (k==5) { write_com_com(0x40+5,0x0d); if (num!=20) { shi=((shi/10)*10+num); } } if (k==6) { write_com_com(0x40+4,0x0d); if (num!=20) { if (num>2) { miao=0; fen=0; shi=0; } else shi=((shi%10)+num*10); } } if (k==7) { write_com_com(12,0x0d); if (num!=20) { day=((day/10)*10+num); } } if (k==8) { write_com_com(11,0x0d); if (num!=20) { if (num>2) { year=0; month=0; day=0; } else day=((day%10)+num*10); } } if (k==9) { write_com_com(9,0x0d); if (num!=20) { month=((month/10)*10+num); } } if (k==10) { write_com_com(8,0x0d); if (num!=20) { if (num>1) { year=0; month=0; day=0; } month=((month%10)+num*10); } } if (k==11) { write_com_com(6,0x0d); if (num!=20) { year=(((year/10)*10)+num); } } if (k==12) { write_com_com(5,0x0d); if (num!=20) { year=((year/100)*100+(num*10)+(year%10)); } } if (k==13) { write_com_com(4,0x0d); if (num!=20) { year=(((year/1000)*1000)+num*100+(year%100)); } } if (k==14) { write_com_com(3,0x0d); if (num!=20) { year=num*1000+(year%1000); } } if(k==15) { TR0=1; k=0; } }/*键盘扫描函数*/key3(){ P3=0x7f; temp=P3; temp=temp&0x0f; num=20; /*num值要重新赋值*/ while(temp!=0x0f) { delay(5); temp=P3; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; switch(temp) { case 0x7e: write_date(0x30);num=0;break; case 0x7d: write_date(0x31);num=1;break; case 0x7b: write_date(0x32);num=2;break; case 0x77: write_date(0x33);num=3;break; } while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } } } P3=0xbf; temp=P3; temp=temp&0x0f; while(temp!=0x0f) { delay(5); temp=P3; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; switch(temp) { case 0xbe: write_date(0x34);num=4;break; case 0xbd: write_date(0x35);num=5;break; case 0xbb: write_date(0x36);num=6;break; case 0xb7: write_date(0x37);num=7;break; } while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } } } P3=0xdf; temp=P3; temp=temp&0x0f; while(temp!=0x0f) { delay(5); temp=P3; temp=temp&0x0f; while(temp!=0x0f) { temp=P3; switch(temp) { case 0xde: write_date(0x38);num=8;break; case 0xdd: write_date(0x39);num=9;break; case 0xdb: TR0=0;k++;break; } while(temp!=0x0f) { temp=P3; temp=temp&0x0f; } } } return(num); } main(){ unit(); while (1) { if(k==0) { display(); } key3(); key2(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -