/* k1,k2,k3,k4分别接P3.0,P3.1,P3.2,P3.3
分别控制启动,停止,清零,输认 */
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit rs=P2^6; // 数据命令选择
sbit rw=P2^5; //读写选择
sbit e=P2^7; //使能
sbit k1=P1^0; //启动
sbit k2=P1^1; //停止
//sbit k3=P3^2; //时加
//sbit k4=P3^3; //确定/选择
uint8 a[]="JISHI"; //要显示的字符
uint8 num[]="0123456789";
uint8 b[8],fen,miao,hao;
uint8 timeset;
uint8 sum;
void delay(uint16 i) //延时子程序
{
while(i--);
}
void wrc(uint8 c) //写命令
{
delay(1000);
rs=0;
rw=0;
e=0;
P0=c;
e=1;
delay(10);
e=0;
}
void wrd(uint8 dat) //写数据
{
delay(1000);
rs=1;
rw=0;
e=0;
P0=dat;
e=1;
delay(10);
e=0;
rs=0;
}
void lcdinit() //初始化LCD屏
{
delay(1000);
wrc(0x38);
wrc(0x38);
wrc(0x38);
wrc(0x06);
wrc(0x0c);
wrc(0x01);
}
void time0init()
{
TMOD=0X01;
TH0=0XFC;
TL0=0X18; //1ms
TR0=0; //关闭定时器
ET0=1;
EA=1;
}
void int0init()
{
EA=1;
EX0=1;
IT0=1;
}
void int1init()
{
EA=1;
EX1=1;
IT1=1;
}
void timepros()
{
b[0]=num[fen/10];
b[1]=num[fen%10];
b[2]=0x3a;
b[3]=num[miao/10];
b[4]=num[miao%10];
b[5]=0x3a;
b[6]=num[hao/10];
b[7]=num[hao%10];
}
void display()
{
uint8 i;
timepros();
//for(i=0;i<5;i++) //i<12表示 可显示汉子4个2个空格
// {
wrc(0x98);
wrd(a[i]);
// }
wrc(0x98+0x04); //0x98位第四行,0x88)第三行,0x90第二行,0x80第一行
wrd(b[0]);
wrd(b[1]);
wrd(b[2]);
wrd(b[3]);
wrd(b[4]);
wrd(b[5]);
wrd(b[6]);
wrd(b[7]);
}
void main()
{
lcdinit();
time0init();
int1init();
while(1)
{
if(k1==0) //检测按键K1是否按下
{
delay(500); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
TR0=1; //开定时器
}
while(!k1); //检测按键是否松开
}
if(k2==0) //检测按键K1是否按下
{
delay(500); //消除抖动 一般大约10ms
if(k2==0) //再次判断按键是否按下
{
TR0=0;//关定时器
//b==b1;
}
while(!k2); //检测按键是否松开
}
display();
}
}
void tim0() interrupt 1
{
static uint16 n;
TH0=0XFC;
TL0=0X18;//1ms
n++;
if(n==10)
{
n=0;
hao++ ;
if(hao==100)
{
hao=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
hao=0;
miao=0;
fen=0;
}
}
}
}
}
|