📄 43019264_demo_0806.c
字号:
/*-- 文字: . --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: C --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,
/*-- 文字: O --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: M --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,
};
unsigned char seg[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0xbf,0x86,0xdb,0xcf,
0xe6,0xed,0xfd,0x87,
0xff,0xef,0xf7,0xfc,
0xb9,0xde,0xf9,0xf1,
0x80,0x40,0x00,0x73,0xc0};
uchar key_buffer=0;
unsigned int hantemp[100];
void delay(long v)
{
while(v!=0)v--;
}
void disp(void)
{
unsigned char i=0,j=0;
unsigned char temp_wei=0x04,temp_duan=0;
// P1IE=0X0;
P1DIR = 0x1f;
for(i=0;i<8;i++)
{
P1OUT &= ~BIT3;
temp_duan=seg[disbuffer[i]] ;
for(j=0;j<8;j++)
{
if(temp_duan&0x80)
P1OUT |= BIT0;
else
P1OUT &= ~BIT0;
temp_duan=temp_duan<<1;
P1OUT &= ~BIT4; P1OUT |= BIT4;
}
P1OUT = (P3IN&0xf8) | temp_wei;
P1OUT |= BIT3;
temp_wei++;
delay(80);
}
for(i=0;i<8;i++)
{ P1OUT &= ~BIT0; P1OUT &= ~BIT4; P1OUT |= BIT4;
}
P1DIR=0XF;
P1OUT=0XF;
P1IFG=0;
P1IE=0xf0;
}
uchar key_just(void) //00:down 0xff:no down
{
P1DIR=0xf;
P1OUT=0xf;
if((P1IN&0xf0)==0)
return(0xff);
return(0);
}
uchar key_code(void)
{uchar in;
P1DIR=0XF;
P1OUT=0x8;
in=P1IN&0x0f0;
if(in!=0)
{
if(in==0X10)
return(0); //C-F
if(in==0X20)
return(1);
if(in==0X40)
return(2);
if(in==0X80)
return(3);
}
P1OUT=0X4;
in=P1IN&0x0f0;
if(in!=0)
{
if(in==0X10)
return(4); //8-B
if(in==0X20)
return(5);
if(in==0X40)
return(6);
if(in==0X80)
return(7);
}
P1OUT=0X2;
in=P1IN&0x0f0;
if(in!=0)
{
if(in==0X10)
return(8); //4-7
if(in==0X20)
return(9);
if(in==0X40)
return(10);
if(in==0X80)
return(11);
}
P1OUT=0X1;
in=P1IN&0x0f0;
if(in!=0)
{
if(in==0X10)
return(12); //0-3
if(in==0X20)
return(13);
if(in==0X40)
return(14);
if(in==0X80)
return(15);
}
return(0xff);
}
uchar key(void)
{
uchar temp=0xff ;//=key_buffer;
uint time=0;
P1IFG=0;
if(key_just()==0)
delay(500);
if(key_just()!=0)
return(temp);
temp=key_code();
key_buffer=temp;
key_loop:
if(key_just()==0)
goto key_loop;
else
{
P1IFG=0;
return(temp);
}
}
//***************************************
void wcode(uchar c,uchar cs1,uchar cs2,uchar cs3)
{
//先片选:CS1,CS2
//D/I=0
//R-W=0
//数据
//E:0-1-0
//硬件: 4脚-P50 5脚-P51 6脚-P52 15脚-P57 16脚-P56 17脚-P55 18--P53
// RS R/W E CS1 RES CS2 CS3
if(cs1==1)
{
P5OUT&=~BIT3;
P5OUT&=~BIT4;
}
if(cs2==1)
{
P5OUT&=~BIT4;
P5OUT|=BIT3;
}
if(cs3==1)
{
P5OUT|=BIT4;
P5OUT&=~BIT3;
}
P5OUT&=~BIT2; //RS
P5OUT&=~BIT1; //R/W
P4OUT=c;
P5OUT&=~BIT0; //E
P5OUT|=BIT0; //
P5OUT&=~BIT0; //
}
void wdata(uchar c,uchar cs1,uchar cs2,uchar cs3)
{
//先片选:CS1,CS2 :P35,P36 /P44 , P45
//D/I=1 :P32 /P24
//R-W=0 :P33 /P25
//数据 :P2 /P3
//E:0-1-0 :P34 /P26
//硬件: 4脚-P50 5脚-P51 6脚-P52 15脚-P57 16脚-P55 17脚-P56 18--P53
// RS (d/i) R/W E CS1 RES CS2 CS3
if(cs1==1)
{
P5OUT&=~BIT3;
P5OUT&=~BIT4;
}
if(cs2==1)
{
P5OUT&=~BIT4;
P5OUT|=BIT3;
}
if(cs3==1)
{
P5OUT|=BIT4;
P5OUT&=~BIT3;
}
P5OUT|=BIT2;
P5OUT&=~BIT1;
P4OUT=c;
P5OUT&=~BIT0;
P5OUT|=BIT0;
P5OUT&=~BIT0;
}
void set_startline(uchar i,uchar cs1,uchar cs2,uchar cs3)
{
i=0xc0+i;
wcode(i,cs1,cs2,cs3);
}
void set_adr(uchar x,uchar y,uchar cs1,uchar cs2,uchar cs3)
{
x=x+0xb8;y=y+0x40;
wcode(x,cs1,cs2,cs3);
wcode(y,cs1,cs2,cs3);
}
void dison_off(uchar o,uchar cs1,uchar cs2,uchar cs3)
{
o=o+0x3e;
wcode(o,cs1,cs2,cs3);
}
void reset(void)
{
//RST=0,1 :P55
P5OUT&=~BIT5;
delay(150);
P5OUT|=BIT5;
delay(150);
}
void clr(void)
{ uchar loop,i;
for(i=0;i<8;i++)
{
set_adr(i,0,1,0,0);
set_startline(0,1,0,0);
for(loop=0;loop<64;loop++)
{ wdata(0,1,0,0);
}
set_adr(i,0,0,1,0);
set_startline(0,0,1,0);
for(loop=0;loop<64;loop++)
{wdata(0,0,1,0);
}
set_adr(i,0,0,0,1);
set_startline(0,0,0,1);
for(loop=0;loop<64;loop++)
{wdata(0,0,0,1);
}
}
}
void full(void)
{ uchar loop,i;
for(i=0;i<8;i++)
{
set_adr(i,0,1,0,0);
set_startline(0,1,0,0);
for(loop=0;loop<64;loop++)
{ wdata(0xff,1,0,0);
}
set_adr(i,0,0,1,0);
set_startline(0,0,1,0);
for(loop=0;loop<64;loop++)
{wdata(0xff,0,1,0);
}
set_adr(i,0,0,0,1);
set_startline(0,0,0,1);
for(loop=0;loop<64;loop++)
{wdata(0xff,0,0,1);
}
}
}
void han_16_16(uchar *p,uchar lline,uchar x) //正显一个汉字16*16,一行有12个字符(12个列)
{
uchar i,y,cs1,cs2,cs3;
if(x<4)
{ cs1=1; cs2=0; cs3=0 ; y=x*16;
}
else if(x<8)
{ x=x-4; cs1=0; cs2=1; cs3=0 ; y=x*16;
}
else
{ x=x-8; cs1=0; cs2=0; cs3=1 ; y=x*16;
}
set_adr(2*lline,y,cs1,cs2,cs3);
set_startline(0,cs1,cs2,cs3);
for(i=0;i<16;i++)
{
wdata(*(p+i),cs1,cs2,cs3);
}
set_adr(2*lline+1,y,cs1,cs2,cs3);
set_startline(0,cs1,cs2,cs3);
for(i=16;i<32;i++)
{
wdata(*(p+i),cs1,cs2,cs3);
}
}
void han_24_24(uchar *p,uchar lline,uchar x) //正显一个汉字16*16,一行有12个字符(12个列)
{
uchar i,y,cs1,cs2,cs3;
if(x<4)
{ cs1=1; cs2=0; cs3=0 ; y=x*16;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -