/*********************************************************************文件名:液晶1602显示.c*描述:该程序实现了对液晶1602的控制。*创建人:东流,2009年4月10日*版本号:2.0***********************************************************************/#include#defineucharunsignedchar#defineuintunsignedintuintcount,t;intshi=1,fen=11,miao=22,nian=12,yue=7,ri=1;ucharshijian[16]={"time00-00-00t"},shijian1[16]={"date00-00-00"};//这三个引脚参考资料sbitE=P2^7;//1602使能引脚sbitRW=P2^6;//1602读写引脚sbitRS=P2^5;//1602数据/命令选择引脚sbitLE=P3^7;sbitkey1=P3^2;//小时修改建sbitkey2=P3^3;//分钟修改键sbitkey3=P3^4;//显示选择键/*********************************************************************名称:delay()*功能:延时,延时时间大概为5US。*输入:无*输出:无***********************************************************************/voiddelay(){uintn=250;while(n--);}/*********************************************************************名称:bitBusy(void)*功能:这个是一个读状态函数,读出函数是否处在忙状态*输入:输入的命令值*输出:无***********************************************************************/bitBusy(void){bitbusy_flag=0;RS=0;RW=1;E=1;delay();busy_flag=(bit)(P0&0x80);E=0;returnbusy_flag;}/*********************************************************************名称:wcmd(uchardel)*功能:1602命令函数*输入:输入的命令值*输出:无***********************************************************************/voidwcmd(uchardel){while(Busy());RS=0;RW=0;E=0;delay();P0=del;delay();E=1;delay();E=0;}/*********************************************************************名称:wdata(uchardel)*功能:1602写数据函数*输入:需要写入1602的数据*输出:无***********************************************************************/voidwdata(uchardel){while(Busy());RS=1;RW=0;E=0;delay();P0=del;delay();E=1;delay();E=0;}/*********************************************************************名称:L1602_init()*功能:1602初始化,请参考1602的资料*输入:无*输出:无***********************************************************************/voidL1602_init(void){wcmd(0x38);wcmd(0x0c);wcmd(0x06);wcmd(0x01);}voidtimeInit(){TMOD=0X01;//定义定时器1工作方式16位定时c/t选为定时器GATE选TR1控制TL0=(65536-10000)%256;TH0=(65536-10000)/256;TR0=1;EA=1;ET0=1;}voidtimeint()interrupt1{TL0=(65536-10000)%256;TH0=(65536-10000)/256;count++;}/****************************时间日期设定*************************/voidshijianxian(){if(count>=100){miao++;count=0;}if(miao>=60){fen++;miao=0;}if(fen>=60){shi++;fen=0;}if(shi>=24){ri++;shi=0;}if(ri>30){yue++;ri=1;}if(yue>12){nian++;;yue=1;}if(nian==99){nian=0;}if((key1==0)&((t%6)==0)){delay();if((key1==0)&((t%6)==0)){shi++;if(shi>23)shi=0;}delay();}if((key3==0)&((t%6)==0)){delay();if((key3==0)&((t%6)==0)){shi--;if(shi<0)shi=23;}}if((key1==0)&((t%6)==1)){delay();if((key1==0)&((t%6)==1)){fen++;if(fen>59)fen=0;}delay();}if((key3==0)&((t%6)==1)){delay();if((key3==0)&((t%6)==1)){fen--;if(fen<0)fen=59;}delay();}if((key1==0)&((t%6)==2)){delay();if((key1==0)&((t%6)==2))yue++;delay();}if((key1==0)&((t%6)==3)){delay();if((key1==0)&((t%6)==3))ri++;delay();}}/**********************************时间显示*******************************/voidshijianxian1(){shijian[6]=shi/10+48;shijian[7]=shi%10+48;shijian[9]=fen/10+48;shijian[10]=fen%10+48;shijian[12]=miao/10+48;shijian[13]=miao%10+48;shijian[8]=45;shijian[11]=45;shijian[15]=t+48;}/**********************************日期显示*******************************/voidriqi(){shijian1[6]=nian/10+48;shijian1[7]=nian%10+48;shijian1[9]=yue/10+48;shijian1[10]=yue%10+48;shijian1[12]=ri/10+48;shijian1[13]=ri%10+48;shijian1[8]=45;shijian1[11]=45;}/*********************************************************************名称:Main()*功能:主函数*输入:无*输出:无***********************************************************************/voidMain(){uinti;L1602_init();timeInit();while(1){shijianxian();shijianxian1();if(key2==0){delay();if((key2==0))t++;if(t>=6)t=0;delay();}riqi();for(i=0;i<16;i++){wcmd(0xc0+i);wdata(shijian[i]);wcmd(0x80+i);wdata(shijian1[i]);}}}