#include <reg51.h>
#include <intrins.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P0^0;//一队加一
sbit k2=P0^1;//一队减一
sbit k3=P0^2;//二队加一
sbit k4=P0^3;//二队减一
sbit k5=P0^4;//反转
sbit k6=P0^5;//24s重置
sbit k7=P0^6;//14s重置
sbit k8=P0^7;//15分暂停——暂停所有
#define LCD_data P2 //数据口
sbit RS = P1^0; //寄存器选择输入
sbit RW = P1^1; //液晶读/写控制
sbit EN = P1^2; //液晶使能控制
sbit PSB = P1^3; //串/并方式控制
unsigned char i;
uchar code dis1[]={128,31,81,209,17,31,145,81,81,31,17,17,17,31,17,0,33,17,17,71,41,41,11,19,21,21,105,33,33,33,33,0,96,64,64,68,78,112,64,64,64,64,66,66,67,62,0,0,6,4,4,4,124,4,4,4,4,12,116,68,4,4,4,0,64,192,64,0,0,0,64,192,64,0,128,64,64,64,64,192,0,0,3,12,48,12,3,0,0,0,9,50,34,34,36,36,32,254,32,255,144,145,17,79,64,252,132,72,48,204,3,0,0,35,16,23,0,8,9,22,16,96,33,38,32,32,7,0,192,130,255,128,130,255,18,34,250,130,130,242,130,142,132,0,0,0,127,0,0,63,36,34,47,32,32,39,32,32,32,0};
uchar code dis2[]={32,254,32,255,144,145,17,79,64,252,132,72,48,204,3,0,0,35,16,23,0,8,9,22,16,96,33,38,32,32,7,0,192,130,255,128,130,255,18,34,250,130,130,242,130,142,132,0,0,0,127,0,0,63,36,34,47,32,32,39,32,32,32,0};
uchar code dis3[]={32,254,32,255,144,145,17,79,64,252,132,72,48,204,3,0,0,35,16,23,0,8,9,22,16,96,33,38,32,32,7,0,192,130,255,128,130,255,18,34,250,130,130,242,130,142,132,0,0,0,127,0,0,63,36,34,47,32,32,39,32,32,32,0};
uchar code dis4[]={36,254,32,0,16,248,16,16,20,18,18,16,32,192,0,0,4,127,4,2,2,63,2,18,18,34,4,8,17,96,0,0,4,254,8,8,232,168,168,232,168,8,8,56,16,0,0,0,12,9,8,62,8,28,26,42,40,8,8,8,8,0,0,0,128,254,4,8,240,128,132,254,128,128,128,128,0,0,0,0,0,31,48,32,7,0,0,63,0,0,0,3,1,0,0,00,48,8,4,132,72,48,0,0,240,8,4,4,8,240,0,0,28,18,17,16,24,4,0,0,7,8,16,16,8,7,0,0,0,8,8,252,0,0,0,0,0,8,8,252,0,0,0,0,0,16,16,31,16,16,0,0,0,16,16,31,16,16,0,0,240,8,4,4,8,240,0,0,48,8,4,132,72,48,0,0,7,8,16,16,8,7,0,0,28,18,17,16,24,4,0,0,240,136,68,68,136,48,0,0,0,8,8,252,0,0,0,0,7,8,16,16,8,7,0,0,0,16,16,31,16,16,0};
void delayms(uint xms)
{
uchar i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void key1(void)//P0.0口控制加一
{
if(P0^0==0){
delayms(10);
if(P0^0==0){
i++;
if(i==1000){
i=0;
}
do{
do{
display();
}
while(P0^0==0);}
while(P0^0==0);}
}
}
void key2(void)//P0.1口减一
{
if(P0^1==0){
delayms(10);
if(P0^1==0){
if(i==0){
i==1000;
} i--;
do{
do{
display();
}
while(P0^1==0);}
while(P0^1==0);}
}
}
void key3(void)//P0.2口加一
{
if(P0^2==0){
delayms(10);
if(P0^2==0){
i++;
if(i==1000){
i=0;
}
do{
do{
display();
}
while(P0^2==0);}
while(P0^2==0);}
}
}
void key4(void)//P0.3口减一
{
if(P0^3==0){
delayms(10);
if(P0^3==0){
if(i==0){
i==1000;
} i--;
do{
do{
display();
}
while(P0^3==0);}
while(P0^3==0);}
}
}
void write_com(uchar com)//端口
{
RS=0;
RW=0;
EN=0;
P2=com;
delayms(5);
EN=1;
delayms(5);
EN=0;
}
void write_data(uchar date)//些数据
{
RS=1;
RW=0;
EN=0;
P2=date;
delayms(5);
EN=1;
delayms(5);
EN=0;
}
void init()//LCD初始化
{
PSB=1;
write_com(0x34); //扩充指令操作
delayms(5);
write_com(0x30);
delayms(5);
write_com(0x0c);
delayms(5);
write_com(0x01);
delayms(5);
}
void lcd_pos(uchar X,uchar Y) //显示位置
{
uchar pos;
if (X==1)
{X=0x80;}
else if (X==2)
{X=0x90;}
else if (X==3)
{X=0x88;}
else if (X==4)
{X=0x98;}
pos = X+Y ;
write_com(pos); //显示地址
}
void main()
{
uchar i,n;
n=1;
delayms(100); //上电,等待稳定
init(); //初始化LCD
while(1)
{
lcd_pos(1,0); //设置显示位置为第一行
for(i=0;i<16;i++)
{
write_data(dis1[i]);
delayms(30);
}
lcd_pos(2,0); //设置显示位置为第二行
for(i=0;i<16;i++)
{
write_data(dis2[i]);
delayms(30);
}
lcd_pos(3,0); //设置显示位置为第三行
for(i=0;i<16;i++)
{
write_data(dis3[i]);
delayms(30);
}
lcd_pos(4,0); //设置显示位置为第三行
for(i=0;i<16;i++)
{
write_data(dis4[i]);
delayms(30);
}
}
}