📄 zi.c
字号:
#include "SPCE061V004.H"
#include "lcd.h"
extern bno;
//=======================================================================================
//
//=======================================================================================
io_init(void)
{
*P_IOA_Dir=0xffff;
*P_IOA_Data=0xffff;
*P_IOA_Attrib=0xffff;
*P_IOB_Dir=0xffff;
*P_IOB_Data=0xffff;
*P_IOB_Attrib=0xffff;
*P_SystemClock=0x0051;
}
//=======================================================================================
//*写坐标轴
//*全局变量 x,y
//=======================================================================================
w_xy(void)
{
int xr,yr;
x_all=x;
if(x<64)
{
wp=*P_IOA_Buffer&0xe7ff; //?1110 0111??
*P_IOA_Data=wp|0x0800; //?0000 1000??
}
else
{
wp=*P_IOA_Buffer&0xe7ff; //?1110 0111??
*P_IOA_Data=wp|0x1000; //?0001 0000??
}
xr=(x&0x3f)|0x0040; //01AA AAAA
i_send(xr);
yr=y|0x00b8; //1011 1AAA
i_send(yr);
}
//=======================================================================================
//*写一个字节数据到显示屏
//*入口 数据内容
//*当数据当前坐标到了64则调用w_xyall()函数
//=======================================================================================
w_b(int i)
{
d_send(i);
}
//=======================================================================================
//*写指令到显示屏函数
//*入口 指令数据内容
//=======================================================================================
i_send(int i)
{
wp=*P_IOA_Buffer&0xf800; //?1111 1000??
*P_IOA_Data=i|(wp|0x0400); //?0000 0100?? e-w\r-d\i:1-0-0
delay(5);
wp=*P_IOA_Buffer&0xf8ff; //?1111 1000?? e-w\r-d\i:0-0-0
*P_IOA_Data=wp; // ????? ???
// wp=*P_IOA_Buffer|0x0400; //?1111 1000?? e-w\r-d\i:1-0-0
//*P_IOA_Data=wp; // ?????
}
//=======================================================================================
//*写一个字节数据到显示屏
//*入口 显示数据内容
//=======================================================================================
d_send(int i)
{
wp=*P_IOA_Buffer&0xf800; //?1111 1000??
*P_IOA_Data=i|(wp|0x0500); //?0000 0101?? e-w\r-d\i:1-0-1
delay(5);
wp=*P_IOA_Buffer&0xf9ff; //?1111 1001?? e-w\r-d\i:0-0-1
*P_IOA_Data=wp; // ????? ???
//wp=*P_IOA_Buffer|0x0500; //?0000 0101?? e-w\r-d\i:1-0-1
//*P_IOA_Data=wp; // ?????
}
//=======================================================================================
//*显示开
//=======================================================================================
displayon() //显示开
{
int i=0x003f; //0011 1111
i_send(i);
}
//=======================================================================================
//*延时并喂狗
//=======================================================================================
delay(int i)
{
int j,k=0;
for(j=0;j<i;j++) *P_Watchdog_Clear=0x0001;
}
//=======================================================================================
//*刷新显示屏数据
//=======================================================================================
int p;
void w_scr(void)
{
int i;
*P_IOA_Data=*P_IOA_Buffer|0x8000;
for(p=0;p<8;p++)
{
x=0;
y=p;
w_xy();
for(i=0;i<64;i++)
{
w_b(display[p][i]); //显示一行中的左半行
}
x=64;
w_xy();
for(i=64;i<128;i++)
{
w_b(display[p][i]); //显示一行中的右半行
}
}
*P_IOA_Data=*P_IOA_Buffer|0x00ff;
*P_IOA_Data=*P_IOA_Buffer&0x7fff;
}
//=======================================================================================
//*把鼠标显示数据分成2上下页部分
//=======================================================================================
void di_m(void)
{
int i,j;
j=0;
j=8-line;
for(i=0;i<8;i++)
{
m_t1[i]=mouse[i]<<line;
m_t2[i]=mouse[i]>>j;
}
for(i=0;i<8;i++)
{
mt3[i]=m_t1[i]&0x00ff;
}
}
//=======================================================================================
//保存要被鼠标覆盖的数据
//=======================================================================================
void save_date(void)
{
int i,t;
t=0;
t=page+1;
for(i=0;i<8;i++)
{
d_t1[i]=display[page][m_x+i];
d_t2[i]=display[t][m_x+i];
}
}
//=======================================================================================
//把鼠标数据叠加到显示数据上
//=======================================================================================
void w_mouse(void)
{
int i,t;
t=0;
t=page+1;
for(i=0;i<8;i++)
{
display[page][m_x+i]=display[page][m_x+i]| mt3[i];
display[t][m_x+i]=display[t][m_x+i]|m_t2[i];
}
}
//=======================================================================================
//恢复显示数据,去掉鼠标数据
//=======================================================================================
void b_data(void)
{
int i,t;
t=0;
t=page+1;
for(i=0;i<8;i++)
{
display[page][m_x+i] = d_t1[i];
display[t][m_x+i] = d_t2[i];
}
}
//=======================================================================================
//写一个ASII码 number为ASII码
//=======================================================================================
void xieword(int xx,int yy,char number)
{
int i,*p;
p=&no;
p=number*8+p;
for(i=0;i<8;i++)
{
display[yy][xx+i]=*p;
p++;
}
}
//=======================================================================================
//
//=======================================================================================
void xiezi(int xx,int yy,int *p)
{
int i;
for(i=0;i<16;i++)
{
display[yy][xx+i]=*p;
p++;
}
yy++;
for(i=0;i<16;i++)
{
display[yy][xx+i]=*p;
p++;
}
}
//=======================================================================================
//*局部显示数据取反
//*起始位置 (xx,yy) yy,ye为页
//*结束位置 (xe,ye)
//=======================================================================================
void cpl(int xx,int yy,int xe,int ye)
{
int i,j;
for(j=0;j<(ye-yy+1);j++)
{
for(i=0;i<(xe-xx+1);i++)
{
display[yy+j][xx+i]=(~display[yy+j][xx+i])&0x00ff;
}
}
}
//=======================================================================================
//*写局部显示屏
//*起始位置 (xx,yy) yy,ye为页
//*结束位置 (xe,ye)
//=======================================================================================
void w_p(int xx,int yy,int xe,int ye)
{
int i,j;
for(j=0;j<(ye-yy+1);j++)
{
x=xx;y=yy+j;w_xy();
for(i=0;i<(xe-xx+1);i++)
{
if((xx+i)==64){x=64;w_xy();}
w_b(display[yy+j][xx+i]);
}
}
}
//=======================================================================================
//*鼠标在区域内,显示反白
//*起始位置 (xx,yy)------------页
//*结束位置 (xe,ye)
//*ioro 全局变量 是否在区内标志位
//=======================================================================================
b_in(int xx,int yy,int xe,int ye,int g)
{
int i,*pt,s=0;
pt=&ioro1;
pt=pt+g;
if(page>=yy&page<=ye&m_x>xx&m_x<xe)
{
if(*pt==0) i=1;
else i=0;
*pt=1;
}
else
{
if(*pt==1) i=1;
else i=0;
*pt=0;
}
if(i==1)
{
cpl(xx,yy,xe,ye);
w_scr();
s=1;
}
return s;
}
//=======================================================================================
//
//=======================================================================================
void w_word(int xx,int yy,int *p)
{
int i;
for(i=0;i<8;i++)
{
display[yy][xx+i]=*p;
p++;
}
}
//=======================================================================================
//
//=======================================================================================
void xiebword(int xx,int yy,int data )
{
int i,*p;
p=&bno;
p=16*data+p;
for(i=0;i<8;i++)
{
display[yy][xx+i]=*p;
p++;
} //上半部分
yy++;
for(i=0;i<8;i++)
{
display[yy][xx+i]=*p;
p++; //下半部分
}
}
//=======================================================================================
//
//=======================================================================================
void xieenglish(int xx,int yy,int *data )
{
int i;
for(i=0;i<8;i++)
{
display[yy][xx+i]=*data;
data++;
} //上半部分
yy++;
for(i=0;i<8;i++)
{
display[yy][xx+i]=*data;
data++; //下半部分
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -