📄 display.c
字号:
fnDataW(afill); // 写数据
}
fnCmd(LC_AUT_OVR); // 自动写结束
var.u.locat.word += 30;
}
return(0);
}
unsigned char lcd_cls(unsigned char lcdx,unsigned char lcdy,unsigned char kuan,unsigned char gao)
{
unsigned char i,j;
//unsigned int lcdadd;
var.u.locat.word = lcdy * 30 + lcdx;
for(i = 0;i < gao;i++){
fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]); // 置地址指针
fnCmd(LC_AUT_WR); // 自动写
for(j = 0;j < kuan;j++){
fnDataW(0x00); // 写数据
}
fnCmd(LC_AUT_OVR); // 自动写结束
var.u.locat.word += 30;
}
return(0);
}
void lcd_sxian(unsigned char data,unsigned char len)
{
unsigned char i;
for(i = 0;i < len;i++){
fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]); // 置地址指针
//fnCmd(LC_NOC_WR); // 数据一次写,地址不变
fnCmd(LC_AUT_WR); // 自动写
fnDataW(data); // 写数据
fnCmd(LC_AUT_OVR); // 自动写结束
var.u.locat.word += LCDKUAN;
}
}
void disp_bmps()
{
unsigned char i,j;
for(i = 0;i < var.u.gao;i++){
fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]); // 置地址指针
fnCmd(LC_AUT_WR); // 自动写
for(j = 0;j < var.u.kuan;j++){
fnDataW(*var.u.addr); // 写数据
var.u.addr++;
}
fnCmd(LC_AUT_OVR); // 自动写结束
var.u.locat.word += LCDKUAN;
}
}
void disp_bmph()
{
unsigned char i,j,*ptr;
var.u.len = var.u.gao / 8;
LCMRD = 1;
LCMWR = 1;
LCMDIR = 0xff;
for(i = 0;i < var.u.kuan;i++){
ptr = var.u.addr + var.u.kuan - 1 - i;
for(j = 0;j < 128;j++){
var.u.movea.byte[j] = *ptr;
ptr += var.u.kuan;
}
writeh2s8();
}
}
void disp_str(unsigned char* ptr)
{
unsigned char i,j,k,n;
if(stc.flash.bit.dir){
for(i = 0;i < var.u.len;i++){
var.u.addr = ZK816_ADDR;
j = *(ptr + i);
var.u.addr += j * 16;
for(j = 0;j < 8;j++){
fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]); // 置地址指针
fnCmd(LC_AUT_WR); // 自动写
for(k = 0;k < 2;k++){
fnDataW(*var.u.addr); // 写数据
var.u.addr++;
}
fnCmd(LC_AUT_OVR); // 自动写结束
var.u.locat.word += LCDKUAN;
}
}
}else{
for(i = 0;i < 2;i++){
n = 0;
for(j = 0;j < var.u.len;j++){
var.u.addr = ZK816_ADDR + 1 - i;
k = *(ptr + j);
var.u.addr += k * 16;
for(k = 0;k < 8;k++){
var.u.movea.byte[n] = *(var.u.addr + (k * 2));
n++;
}
}
writeh2s8();
}
}
}
void disp_bmpb(unsigned char * ptr)
{
unsigned char i,j,abuff[16];
union{
unsigned char * ptrb;
unsigned char byte[2];
//unsigned int word;
}bmp;
LCMCE = 0;
LCMRD = 1;
LCMWR = 1;
LCMDIR = 0xff;
var.u.kuan = (*(ptr + 5)) / 8;
var.u.kuan %= LCDKUAN;
var.u.gao = (*(ptr + 4));
var.u.gao %= LCDGAO;
var.u.len = var.u.gao / 8;
//var.u.len %= 16;
bmp.byte[0] = (*(ptr + 7));
bmp.byte[1] = (*(ptr + 6));
var.u.addr = bmp.ptrb;
if(var.u.kuan == 0xff){
;
}else if(var.u.kuan){//图像
if(stc.flash.bit.dir){
var.u.locat.word = (*(ptr + 3)) * LCDKUAN + ((*(ptr + 2)) / 8);
for(i = 0;i < var.u.gao;i++){
fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]); // 置地址指针
fnCmd(LC_AUT_WR); // 自动写
for(j = 0;j < var.u.kuan;j++){
fnDataW(*var.u.addr); // 写数据
var.u.addr++;
}
fnCmd(LC_AUT_OVR); // 自动写结束
var.u.locat.word += LCDKUAN;
}
}else{
for(i = 0;i < var.u.kuan;i++){
ptr = var.u.addr + var.u.kuan - 1 - i;
for(j = 0;j < 128;j++){
var.u.movea.byte[j] = *ptr;
ptr += var.u.kuan;
}
writeh2s8();
}
}
}else{//字符串
for(i = 0;i < var.u.len;i++){
bmp.byte[1] = *var.u.addr;
if(bmp.byte[1] == 0xff){//立即数
abuff[i] = *(var.u.addr + 1);
}else{
bmp.byte[0] = *(var.u.addr + 1);
abuff[i] = *bmp.ptrb;
}
var.u.addr += 2;
}
disp_str(abuff);
}
LCMCE = 1;
}
void disp_bmpbb(unsigned char * ptr)
{
unsigned char i,j;
union{
unsigned char * ptrb;
unsigned char byte[2];
//unsigned int word;
}bmp;
LCMCE = 0;
LCMRD = 1;
LCMWR = 1;
LCMDIR = 0xff;
bmp.byte[0] = (*(ptr + 7));
bmp.byte[1] = (*(ptr + 6));
if(bmp.byte[1]){
var.u.addr = bmp.ptrb;
var.u.kuan = (*(ptr + 5)) / 8;
var.u.kuan %= LCDKUAN;
var.u.gao = (*(ptr + 4));
var.u.gao %= LCDGAO;
var.u.len = var.u.gao / 8;
var.u.len %= 16;
if(stc.flash.bit.dir){
var.u.locat.word = (*(ptr + 3)) * LCDKUAN + ((*(ptr + 2)) / 8);
for(i = 0;i < var.u.gao;i++){
fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]); // 置地址指针
fnCmd(LC_AUT_WR); // 自动写
for(j = 0;j < var.u.kuan;j++){
fnDataW(*var.u.addr); // 写数据
var.u.addr++;
}
fnCmd(LC_AUT_OVR); // 自动写结束
var.u.locat.word += LCDKUAN;
}
}else{
var.u.locat.word = (*(ptr + 1)) * LCDKUAN + ((*(ptr + 0)) / 8);
for(i = 0;i < var.u.kuan;i++){
ptr = var.u.addr + var.u.kuan - 1 - i;
for(j = 0;j < 128;j++){
var.u.movea.byte[j] = *ptr;
ptr += var.u.kuan;
}
writeh2s8();
}
}
}else{
if(stc.flash.bit.dir){
var.u.locat.word = (*(ptr + 3)) * LCDKUAN + ((*(ptr + 2)) / 8);
var.u.kuan = (*(ptr + 5)) / 8;
var.u.kuan %= LCDKUAN;
var.u.gao = (*(ptr + 4));
var.u.gao %= LCDGAO;
}else{
var.u.locat.word = (*(ptr + 1)) * LCDKUAN + ((*(ptr + 0)) / 8);
var.u.kuan = (*(ptr + 4)) / 8;
var.u.kuan %= LCDKUAN;
var.u.gao = (*(ptr + 5));
var.u.gao %= LCDGAO;
}
for(i = 0;i < var.u.gao;i++){
fnCmd2(LC_ADD_POS,var.u.locat.byte[0],var.u.locat.byte[1]); // 置地址指针
fnCmd(LC_AUT_WR); // 自动写
for(j = 0;j < var.u.kuan;j++){
fnDataW(bmp.byte[0]); // 写数据
}
fnCmd(LC_AUT_OVR); // 自动写结束
var.u.locat.word += LCDKUAN;
}
}
LCMCE = 1;
}
void get_str(unsigned char * asrc,unsigned char * adst,unsigned char len)
{
unsigned char i,j,k;
union{
unsigned char byte[2];
unsigned char *ptr;
}u;
for(i = 0;i < len;){
u.byte[0] = * asrc;
asrc++;
u.byte[1] = * asrc;
asrc++;
if(u.byte[1] == 0){//立即数
adst[i] = u.byte[0];
i++;
}else if(u.byte[1] == 0xfc){//从起始地址取j个字符
j = u.byte[0];
u.byte[0] = * asrc;
asrc++;
u.byte[1] = * asrc;
asrc++;
for(k = 0;(k < j) && (i < len);k++){
adst[i] = *(u.ptr + k);
i++;
}
}else if(u.byte[1] == 0xfd){//从起始地址取jX2个压缩字符
j = u.byte[0];
u.byte[0] = * asrc;
asrc++;
u.byte[1] = * asrc;
asrc++;
for(k = 0;(k < j) && (i < len);k++){
adst[i] = *(u.ptr + k) >> 4;
i++;
adst[i] = *(u.ptr + k) & 0x0f;
i++;
}
}else{
adst[i] = *u.ptr >> 4;
i++;
adst[i] = *u.ptr & 0x0f;
i++;
}
}
}
void disp_bmp(unsigned char * ptr)
{
unsigned char i,j,k,n;
unsigned int aword;
union{
unsigned char byte[32];
struct{
unsigned char c0;
unsigned char c1;
unsigned char x;
unsigned char y;
unsigned char kuan;
unsigned char gao;
unsigned char *ptro;
unsigned char *ptrb;
unsigned int aword;
unsigned char byte[16];
}bit;
}bmp;
bmp.bit.c0 = *ptr;
/*
if(stc.flash.bit.dir){
ptr += 2;
}else{
ptr += 10;
}
for(i = 0;i < 10;i++){
bmp.byte[i + 2] = *(ptr + i);
}
LCMCE = 0;
var.u.locat.word = bmp.bit.y * LCDKUAN + (bmp.bit.x / 8);
var.u.kuan = bmp.bit.kuan / 8;
var.u.kuan %= (LCDKUAN + 1);
var.u.gao = bmp.bit.gao;
var.u.gao %= (LCDGAO + 1);
//var.u.len = var.u.gao / 8;
//var.u.len %= 16;
if((unsigned int)bmp.bit.ptro == 0){
aword = 0;
}else{
aword = *bmp.bit.ptro;
}
aword *= var.u.kuan;
aword *= var.u.gao;
var.u.addr = bmp.bit.ptrb + aword;
*/
if(bmp.bit.c0 == 0){//清屏
if(stc.flash.bit.dir){
ptr += 2;
}else{
ptr += 10;
}
for(i = 0;i < 10;i++){
bmp.byte[i + 2] = *(ptr + i);
}
LCMCE = 0;
var.u.locat.word = bmp.bit.y * LCDKUAN + (bmp.bit.x / 8);
var.u.kuan = bmp.bit.kuan / 8;
var.u.kuan %= (LCDKUAN + 1);
var.u.gao = bmp.bit.gao;
var.u.gao %= (LCDGAO + 1);
//var.u.len = var.u.gao / 8;
//var.u.len %= 16;
if((unsigned int)bmp.bit.ptro == 0){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -