📄 e.c
字号:
Write_Box_ditu();
}
void mov_right()
{
Clr_Box_ditu();
this.y++;
if((Check_Box_ditu())||(Check_Box_gameline()))//crack
this.y--;
Write_Box_ditu();
}
void mov_ratation()
{
Clr_Box_ditu();
if(Check_Box_ditu_ratation()==0) ///////////////////////////////////////
{
//状态转变
this.Status ++;
if(this.Status >= TtrsBlckStsNum[this.BlckIndex]) this.Status = 0;
this.pPIC = TtrsBlck
+ TtrsBlckPoint[this.BlckIndex]
+ (this.Status) * 4;
}
Write_Box_ditu();
}
//////////////////////////////////
//crack_state=0;can move down
//crack_state=1;can not move down check is have full lines then delete it
//////////////////////////////////
void mov_down()
{
down_time=0;
Clr_Box_ditu();
this.x++;
if((Check_Box_ditu())||(Check_Box_gameline()))//crack
{this.x--; crack_state=1;}
else crack_state=0;
Write_Box_ditu();
if(crack_state==1)check_ditu();
}
////////////////////////////////////////////////////延时
void delay_us(unsigned int a)
{
while(a>0)a--;
}
void delay_ms(unsigned int a)
{
while(a>0)
{a--;delay_us(250);}
}
//////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////
////////////////////////////////////////////////////液晶基本函数
char RdStateLcd( )
{
unsigned char state;
Rs_Lcd=0;
Rw_Lcd=1;
En_Lcd=1;
state=DataBuss;
En_Lcd=0;
return(state);
}
char WrCommandIc(unsigned char Command)
{
unsigned char state,tmp;
state=0;
for(tmp=0xFF;(RdStateLcd( )&0x80)&&(tmp>0x00);tmp--)
{ ; }
if(tmp==0)
{ state=0xFF; }
else
{
Rs_Lcd=0;
Rw_Lcd=0;
DataBuss=Command;
En_Lcd=1;
En_Lcd=0;
}
return(state);
}
char WrCommandLcd(unsigned char Command)
{
unsigned char state;
Cs1_Lcd=1;
Cs2_Lcd=0;
state=WrCommandIc(Command);
if(state==0)
{
Cs1_Lcd=0;
Cs2_Lcd=1;
state=WrCommandIc(Command);
}
return(state);
}
char WrDataLcd(unsigned char dat)
{
unsigned char state,tmp;
state=0;
for(tmp=0xFF;(RdStateLcd( )&0x80)&&(tmp>0x00);tmp--)//ban mang ?
{ ; }
if(tmp==0)
{ state=0xFF; }
else
{
Rw_Lcd=0;
Rs_Lcd=1;
DataBuss=dat;
En_Lcd=1;
En_Lcd=0;
}
return(state);
}
//***********************************************
//* Name: SetStarLine
//* Function: 设置显示开始行
//*********************************/
char SetStarLine(char line)
{
char state;
line=(line&0x3F)|0xC0;
state=WrCommandLcd(line);
return(state);
}
void InitDis(void)
{
SetStarLine(0x00);
WrCommandLcd(0x3F);//kai xian shi
}
char SysInit(void)
{
unsigned char i, state;
// Rst_Lcd=0; //复位lcd
for(i=0xFF;i>0;i--) //延时1ms
{ ; }
//Rst_Lcd=1;
SetStarLine(0x00);
InitDis( );
return(state);
}
//********************************/
//* Name: SetStarLine
//* Function: 设置当前页地址
//* Input: page=页地址
//***************************************/
char SetPageAddr(char page)
{
char state;
page=(page&0x07)|0xB8;
state=WrCommandLcd(page);
return(state);
}
//*******************/
//* Name: SetStarLine
//* Function: 设置当Y地址
//* Input: line=开始显示的行数?
/////////// **********/
char SetYAddr(char y)
{
char state;
y=(y&0x3F)|0x40;
state=WrCommandLcd(y);
return(state);
}
//////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////
////////////////////////////////////////////////////显示某点
void Dispoint(unsigned char page,unsigned char y)
{
unsigned char tmp=0;
unsigned char state=0;
SetPageAddr(page/8);
SetYAddr(y);
if(y<64) {Cs1_Lcd=1;Cs2_Lcd=0;}
else {Cs1_Lcd=0;Cs2_Lcd=1;}
En_Lcd=0;
for(tmp=0xFF;(RdStateLcd()&0x80)&&(tmp>0x00);tmp--)
{ ; }
if(tmp==0)
{ state=0xFF; }
else
{
Rs_Lcd=1;
Rw_Lcd=1;
En_Lcd=1; delay_us(2);
dat=DataBuss;
En_Lcd=0; delay_us(2);
En_Lcd=1; delay_us(2);
dat=DataBuss;
En_Lcd=0; delay_us(2);
}
dat|=(1<<(page%8));
SetPageAddr(page/8);
SetYAddr(y);
if(y<64) {Cs1_Lcd=1;Cs2_Lcd=0;}
else {Cs1_Lcd=0;Cs2_Lcd=1;}
for(tmp=0xFF;(RdStateLcd( )&0x80)&&(tmp>0x00);tmp--)//ban mang ?
{ ; }
if(tmp==0)
{ state=0xFF; }
else
{
Rw_Lcd=0;
Rs_Lcd=1;
DataBuss=dat;
En_Lcd=1;
En_Lcd=0;
}
}
////////////////////////////////////////////////////清除某点
void Clrpoint(unsigned char page,unsigned char y)
{
unsigned char tmp=0;
unsigned char state=0;
SetPageAddr(page/8);
SetYAddr(y);
if(y<64) {Cs1_Lcd=1;Cs2_Lcd=0;}
else {Cs1_Lcd=0;Cs2_Lcd=1;}
En_Lcd=0;
for(tmp=0xFF;(RdStateLcd( )&0x80)&&(tmp>0x00);tmp--)
{ ; }
if(tmp==0)
{ state=0xFF; }
else
{
Rs_Lcd=1;
Rw_Lcd=1;
En_Lcd=1; delay_us(10);
dat=DataBuss;
En_Lcd=0; delay_us(10);
En_Lcd=1; delay_us(10);
dat=DataBuss;
En_Lcd=0; delay_us(10);
}
dat&=~(1<<(page%8));
SetPageAddr(page/8);
SetYAddr(y);
if(y<64) {Cs1_Lcd=1;Cs2_Lcd=0;}
else {Cs1_Lcd=0;Cs2_Lcd=1;}
for(tmp=0xFF;(RdStateLcd( )&0x80)&&(tmp>0x00);tmp--)//ban mang ?
{ ; }
if(tmp==0)
{ state=0xFF; }
else
{
Rw_Lcd=0;
Rs_Lcd=1;
DataBuss=dat;
En_Lcd=1;
En_Lcd=0;
}
}
////////////////////////////////////////////////////请屏幕
void ClrScreen(void)
{
char i,j,state;
for(j=0;j<8;j++)
{
state=SetPageAddr(j);
state=SetYAddr(0x00);
Cs1_Lcd=1;
Cs2_Lcd=0;
for(i=0;i<64;i++) //清
{
state=WrDataLcd(0);
}
Cs1_Lcd=0;
Cs2_Lcd=1;
for(i=0;i<64;i++) //清
{
state=WrDataLcd(0);
}
}
}
void DisChar(unsigned char *p,unsigned char page,unsigned char y,char state)
{
unsigned char i,j,tmp;
for(j=0;j<2;j++)
{
SetPageAddr(page+j);
if(y<64)
{ i=y; }
else
{ i=y-64; }
SetYAddr(i);
//SetStarLine(i);
if(y<64)
{
Cs1_Lcd=1;
Cs2_Lcd=0;
}
else
{
Cs1_Lcd=0;
Cs2_Lcd=1;
}
for(i=8;i<16;i++)
{
tmp=p[i-8*j];
if(state==0x01)
{ tmp=~tmp; }
WrDataLcd(tmp);
}
}
}
////////////////////////////////////////////////////状态机按键
unsigned char read_key(unsigned char a,unsigned char key)
{
char key_press, key_return = 0;
key_press = key;// 读按键I/O电平
switch (key_state[a])
{
case key_state_0:// 按键初始态
if (!key_press) key_state[a] = key_state_1;// 键被按下,状态转换到键确认态
break;
case key_state_1:// 按键确认态
if (!key_press)
{
key_return = 1; // 按键仍按下,按键确认输出为“1”
key_state[a] = key_state_2; // 状态转换到键释放态
}
else
key_state[a] = key_state_0; // 按键已抬起,转换到按键初始态
break;
case key_state_2:
if (key_press) key_state[a] = key_state_0; //按键已释放,转换到按键初始态
break;
}
return key_return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -