📄 yejin.c
字号:
#include<reg51.h>
#include<math.h>
sbit RS=P2^6;
sbit RW=P2^5;
sbit E=P2^4;
sbit CS1=P2^3;
sbit CS2=P2^2;
unsigned char code jin[8][32]=
{
{
0x40,0x40,0x20,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x50,0x20,0x60,0x20,0x00,
0x40,0x40,0x42,0x42,0x4A,0x72,0x42,0x7F,0x42,0x62,0x5A,0x42,0x42,0x40,0x40,0x00 ,
},
{
0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x60,0x90,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x21,0x40,0x78,0x00 ,
} ,
{
0x80,0x82,0x8C,0x20,0x10,0xFC,0x93,0x92,0xF2,0x9A,0x96,0x92,0xF0,0x00,0x00,0x00,
0x40,0x20,0x1F,0x20,0x40,0x50,0x4C,0x43,0x40,0x4F,0x52,0x54,0x50,0x5C,0x40,0x00 ,
},
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
} ,
{
0x00,0x04,0x04,0xC4,0xB4,0x8C,0x87,0x84,0xF4,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
0x00,0x00,0x20,0x18,0x0E,0x04,0x20,0x40,0xFF,0x00,0x02,0x04,0x18,0x30,0x00,0x00 ,
} ,
{
0x04,0x04,0xE4,0x24,0x24,0x64,0xB4,0x2F,0x24,0xA4,0x64,0x24,0x24,0xE6,0x04,0x00,
0x00,0x00,0x7F,0x04,0x05,0x05,0x05,0x7F,0x05,0x05,0x05,0x25,0x44,0x3F,0x00,0x00 ,
} ,
{
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00 ,
} ,
{
0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00 ,
}
}
;
unsigned char code Num[11][16]=
{
{
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
},
{
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
} ,
{
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
},
{
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
} ,
{
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
} ,
{
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
} ,
{
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
} ,
{
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
} ,
{
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
},
{
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
} ,
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
}
}
;
static const char tab[16]={0x01,0x02,0x03,0x0c, /*键盘码00,01,02,03,*/
0x04,0x05,0x06,0x0d, /*键盘码04,05,06,07,*/
0x07,0x08,0x09,0x0e, /*键盘码08,09,0a,0b,*/
0x0a,0x00,0x0b,0x0f};/*键盘码0c,0d,0e,0f*/
unsigned char scan(void);
void Delayus(unsigned int t) ; /*延时函数*/
void BUSYLOOP(unsigned char cs); //*判忙函数*//
void Write_command(unsigned char CMD,unsigned char bb,unsigned char cs); //*发控制字函数*//
void Write_data(unsigned char CMD,unsigned char bb,unsigned char cs,unsigned char page); //*发数据函数*//
void CHUSHIHUA(); //*初始化函数*//
void CLEAR(); //*清屏*//
void Display( unsigned char *ptr,unsigned char bb,unsigned char cs,unsigned char page,unsigned char adress_y); //**显字符串函数**//
void Display_Num( unsigned char *ptr,unsigned char bb,unsigned char cs,unsigned char page,unsigned char adress_y); //**显字符串函数**//
void delay1ms();
void delay(unsigned i);
void main()
{
int j,i;
unsigned char temp,key_temp;
j=0;
temp=jin[0][0];
CHUSHIHUA();
CLEAR();
for(i=0;i<8;i++)
{
for(j=0;j<64;j++)
{
Write_data(0x00,0,1,i) ;
}
}
Write_command(0xc0,1,0);
Write_command(0x40,1,0); // write y adress
// Display( jin[0],1,0,0,0);
while(1)
{
for(i=0;i<8;i++)
{
key_temp=scan();
key_temp=tab[key_temp];
Display_Num( Num[key_temp],1,0,0,i<<3);
}
for(i=0;i<8;i++)
{
key_temp=scan();
key_temp=tab[key_temp];
Display_Num( Num[key_temp],1,1,0,i<<3);
}
// Display( jin,1,0,2,40);
Write_command(0x3f&temp|0xc0,1,2);
temp-=16;
delay(500);
}
while(1)
{
for(i=0;i<4;i++)
{
Display( jin[i],1,0,0,i<<4);
}
for(i=0;i<4;i++)
Display( jin[i+4],1,1,0,i<<4);
// Display( jin,1,0,2,40);
Write_command(0x3f&temp|0xc0,1,2);
temp-=16;
delay(500);
}
while(1)
{
;
}
}
/*********************************************延时**************************************/
void Delayus(unsigned int t)
{
int i,j;
for (i=0;i<t;i++)
{
for (j=0;j<t;j++)
j=j;
}
}
//*********************判忙函数************************//
void BUSYLOOP(unsigned char cs)
{
unsigned char BUSY;
if(cs==1)
{
CS1=0;
CS2=1;
}
else if(cs==0)
{
CS1=1;
CS2=0;
}
else
{
CS1=1;
CS2=1;
}
P0=0x0ff;
RS=0;
RW=1;
do {
E=0;
BUSY=P0;
E=1;
}
while(BUSY>0x7F);
}
//*********************写控制字函数****************************//
void Write_command(unsigned char CMD,unsigned char bb,unsigned char cs)
{
if(bb)
{
BUSYLOOP(cs);
}
if(cs==1)
{
CS1=0;
CS2=1;
}
else if(cs==0)
{
CS1=1;
CS2=0;
}
else
{
CS1=1;
CS2=1;
}
RS=0;
RW=0;
E=0;
P0=CMD;
E=1;
//nop();
Delayus(1);
E=0;
}
//*********************写数据函数****************************//
void Write_data(unsigned char CMD,unsigned char bb,unsigned char cs,unsigned char page)
{
if(bb)
{
BUSYLOOP(cs);
}
// Write_command(adress_y&0x3f|0x40,0,cs);
Write_command(page&0x07|0xb8,0,cs);
if(cs==1)
{
CS1=0;
CS2=1;
}
else if(cs==0)
{
CS1=1;
CS2=0;
}
else
{
CS1=1;
CS2=1;
}
RS=1;
RW=0;
E=0;
P0=CMD;
E=1;
Delayus(1);
E=0;
}
//*************************液晶初始化********************************//
void CHUSHIHUA()
{
Write_command(0x3e,0,0);
Write_command(0x3e,0,0);
Write_command(0x3f,0,0);
Write_command(0x3f,0,0);
Write_command(0xb8,0,0); // write page num
Write_command(0x40,0,0); // write y adress
Write_command(0xc0,0,0); // write start adress
Write_command(0x3e,0,1);
Write_command(0x3e,0,1);
Write_command(0x3f,0,1);
Write_command(0x3f,0,1);
Write_command(0xb8,0,1); // write page num
Write_command(0x40,0,1); // write y adress
Write_command(0xc0,0,1); // write start adress
}
/***************************清 屏*************************************/
void CLEAR()
{
int i,j ;
for(i=0;i<8;i++)
{
for(j=0;j<64;j++)
{
Write_data(0x00,0,0,i) ;
}
}
for(i=0;i<8;i++)
{
for(j=0;j<64;j++)
{
Write_data(0x00,0,1,i) ;
}
}
}
void Display( unsigned char *ptr,unsigned char bb,unsigned char cs,unsigned char page,unsigned char adress_y)
{
unsigned char temp,i;
if(bb)
{
BUSYLOOP(cs);
}
// Write_command(page&0x07|0xb8,bb,cs);
Write_command(adress_y&0x3f|0x40,bb,cs);
for(i=0;i<16;i++)
{
temp=*(ptr+i);
Write_data(temp,bb,cs,page) ;
}
// Write_command((page+1)&0x07|0xb8,bb,cs);
Write_command(adress_y&0x3f|0x40,bb,cs);
for(i=16;i<32;i++)
{
temp=*(ptr+i);
Write_data(temp,bb,cs,page+1) ;
}
}
void Display_Num( unsigned char *ptr,unsigned char bb,unsigned char cs,unsigned char page,unsigned char adress_y) //**显字符串函数**//
{
unsigned char temp,i;
if(bb)
{
BUSYLOOP(cs);
}
// Write_command(page&0x07|0xb8,bb,cs);
Write_command(adress_y&0x3f|0x40,bb,cs);
for(i=0;i<8;i++)
{
temp=*(ptr+i);
Write_data(temp,bb,cs,page) ;
}
// Write_command((page+1)&0x07|0xb8,bb,cs);
Write_command(adress_y&0x3f|0x40,bb,cs);
for(i=8;i<16;i++)
{
temp=*(ptr+i);
Write_data(temp,bb,cs,page+1) ;
}
}
void delay1ms()
{
IE=00;
TMOD=0x10;
TH1=0xfc;
TL1=0x23;
TR1=1;
while(!TF1);
TF1=0;
}
void delay(unsigned i)
{
int k;
for(k=0;k<i;k++)
delay1ms();
}
unsigned char scan(void) /*扫描键盘副程式*/
{
unsigned char data a1,i; /*A1=0XF7列扫描初值,I行*/
unsigned char data m;
unsigned char FLAG0; /*设按键回应旗号为0,键盘扫描计数指标为0*/
unsigned char data ptr;
a1=0xf0 ;
FLAG0=0;
ptr=0;
m=0xf0 ;
while(m==0xf0)
{
P1=0xff;
a1=0xf0;
P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
m=P1;
}
for(i=0;i<4;i++)
{
delay1ms();
}
a1=0xf0;
m=0xf0 ;
while(m==0xf0)
{
P1=0xff;
a1=0xf0;
P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
m=P1;
}
a1=0xfe;
for(i=0;i<4;i++) /*键盘4个扫描列*/
{
P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
m=P1;
switch(m&0xf0) /*取行的高4位元,侦测那一行被按*/
{
case 0x70: ptr=i+12; /*第一行被按否?是则扫描指标=列X4*/
FLAG0=1; /*是则设FLAG0=1表有按键输入*/
break; /*跳出此循环*/
case 0xb0: ptr=i+8; /*第二行被按否?是则扫描指标=列X4+1*/
FLAG0=1; /*是则设FLAG0=1表有按键输入*/
break; /*跳出此循环*/
case 0xd0: ptr=i+4; /*第三行被按否?是则扫描指标=列X4+2*/
FLAG0=1; /*是则设FLAG0=1表有按键输入*/
break; /*跳出此循环*/
case 0xe0: ptr=i; /*第四行被按否?是则扫描指标=列X4+3*/
FLAG0=1; /*是则设FLAG0=1表有按键输入*/
default: break; /*跳出此循环*/
}
if(FLAG0==1)break; /*不为1,则扫描列右移,扫描下一列*/
a1=a1<<1|0x01;
/*高位补1,由于P1.7~P1.4未接+5V,而是由指令加载高电平*/
}
a1=0xf0;
while(m!=0xf0)
{
P1 =0xff;
a1=0xf0;
P1=a1; /*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
m=P1;
}
if(FLAG0==1)
return ptr;
else return 0x40;
} /*返回主程式*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -