#include <pic.h>
#define uchar unsigned char
#define uint unsigned int
#define DATA PORTD
#define rs RA1
#define rw RA2
#define en RA3
void disp();
int sec=50,min=54,hour=03;
uchar MODE;
bit flag;
uchar tab[]={"time---00:00:00"};
void delay(uchar i)
{
uchar j;
for(;i>0;i--)
for(j=220;j>0;j--);
}
void write_com(uchar com) //写入命令
{
rw=0;
rs=0;
DATA=com;
delay(10);
en=1;
delay(10);
en=0;
}
void write_dat(uchar dat) //写入数据
{
rw=0;
rs=1;
DATA=dat;
delay(10);
en=1;
delay(10);
en=0;
}
void lcd_init() //初始化
{
uchar n;
TRISD=0x00;
TRISA=0x00;
en=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
void interrupt timer1()
{
static js;
if(TMR1IF==1)
{
TMR1IF=0;
TMR1H=(65536-50000)/256;
TMR1L=(65536-50000)%256;
js++;
if(js==80)
{
js=0; sec++;
if(sec>=60)
{
sec=0;min++;
if(min>=60)
{
min=0;hour++;flag=1;
if(hour>=24)
{
hour=0;
}
}
}
disp();
}
}
}
void zhhu()
{
tab[7]=hour/10+0x30;
tab[8]=hour%10+0x30;
tab[10]=min/10+0x30;
tab[11]=min%10+0x30;
tab[13]=sec/10+0x30;
tab[14]=sec%10+0x30;
}
void keyscan()
{
if(RC0==0)
{
delay(10);
if(RC0==0)
{
TMR1ON=0;
MODE++;
while(!RC0);
sec=0;
// write_com(0x0e);
if(MODE>=3) MODE=0;
}
}
while(MODE)
{
zhhu();
disp();
if(RC0==0)
{
delay(10);
if(RC0==0)
{
MODE++;
while(!RC0);
if(MODE>=3) MODE=0;
}
}
switch(MODE)
{
case 0x01: write_com(0xc8); write_com(0x0e);delay(250);write_com(0x0c); break;
case 0x02: write_com(0xcb); write_com(0x0e);delay(250);write_com(0x0c); break;
default : break;
}
if((RC1==0)&&(MODE==1)) //时调整
{
hour++;
if(hour>=24) hour=0;
}
if((RC2==0)&&(MODE==1)) //时调整
{
hour--;
if(hour<0) hour=23;
}
if((RC1==0)&&(MODE==2)) //分调整
{
min++;
if(min>=60) min=0;
}
if((RC2==0)&&(MODE==2)) //分调整
{
min--;
if(min<0) min=59;
}
}
//write_com(0x0c);
TMR1ON=1;
}
void disp()
{
uchar i;
zhhu();
write_com(0xc0);
rw=0;
for(i=0;i<15;i++)
{
write_dat(tab[i]) ;
delay(10);
}
}
void baoshi()
{
uchar di_num;
for(di_num=hour;di_num>0;di_num--)
{
RC7=1;
delay(200);
delay(200);
delay(200);
RC7=0;
delay(200);
delay(200);
}
flag=0;RC7=0;
}
void main()
{
ADCON1=0X06;
TRISC=0x0f;
TMR1ON=1;
TMR1IE=1;
GIE=1;
PEIE=1;
RC7=0;
TMR1H=(65536-50000)/256;
TMR1L=(65536-50000)%256;
lcd_init();
while(1)
{
keyscan();
if(flag)
{flag=0;baoshi();}
}
}