📄 ledfution.c
字号:
#include "config.h"
extern data struct PRINTLED PRINT_INFOR;
extern set_data_l(uchar xdata *pt, uchar xdata *ptr_d, uchar j);
extern movedata(uchar xdata *pt, uchar xdata *i, uchar xdata *j);
extern adddata(uchar xdata *pt, uchar xdata *i, uchar xdata *j);
extern movedata_l(uchar xdata *pt, uchar xdata *i,uchar lie,uchar hang);
extern movedata_r(uchar xdata *pt, uchar xdata *i, uchar xdata *j);
uint system_run; //系统运行监视
extern bit rell_print; //可以更新显存标记
extern uchar comtimeout;
#ifdef STATIC
uchar xdata static_print[HANGDIP][LIEDIP/8]; //静态应用的
#endif
/*****************************************************************************************************************************************************
*宏结实,下面是函数开始
*****************************************************************************************************************************************************/
static void changpage(struct windows xdata *pt) //new
{
/*扫描的*/
CS_RAM=0;
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
PRINT_INFOR.PRINTBUF2_R1 =(uchar xdata *)&pt->PRINT2_R[0][0];
#ifndef ALONE
PRINT_INFOR.PRINTBUF2_R2 =(uchar xdata *)&pt->PRINT2_R[16][0];
#endif
while(PRINT_INFOR.CHANG < pt->movsize[pt->plan]) REBOOT;
while(!rell_print);
PRINT_INFOR.CHANG = 0;
PRINT_INFOR.SWAP = SWAP_PRINT2;
}
else
{
PRINT_INFOR.PRINTBUF1_R1 =(uchar xdata *)&pt->PRINT1_R[0][0];
#ifndef ALONE
PRINT_INFOR.PRINTBUF1_R2 =(uchar xdata *)&pt->PRINT1_R[16][0];
#endif
while(PRINT_INFOR.CHANG < pt->movsize[pt->plan]) REBOOT;
while(!rell_print);
PRINT_INFOR.CHANG = 0;
PRINT_INFOR.SWAP = SWAP_PRINT1;
}
}
/*****************************************************************************************************************************************************
*LED屏从上到下添加行=逐行显示
*****************************************************************************************************************************************************/
#ifdef PRINT_UP_HANG
void print_up_hang(struct windows xdata *pt) //new
{
uchar xdata *data ptr_s, *ptr_d;
while(1)
{
if(comtimeout != 0) break;
/*数据搬家开始*/
CS_RAM=0;
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_s = &pt->PRINT1_R[0][0];
ptr_d = &pt->PRINT2_R[0][0];
movedata(ptr_s,ptr_d,&pt->PRINT2_R[HANGDIP][0]); //调用汇编拷贝全屏数据
}
else
{
ptr_s = &pt->PRINT2_R[0][0];
ptr_d = &pt->PRINT1_R[0][0];
movedata(ptr_s,ptr_d,&pt->PRINT1_R[HANGDIP][0]); //调用汇编拷贝全屏数据
}
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_d = &pt->PRINT2_R[pt->hang][0];
}
else
{
ptr_d = &pt->PRINT1_R[pt->hang][0];
}
/*数据搬家结束*/
ptr_s = &pt->printbuf[pt->plan][pt->hang*(LIEDIP/8)];
adddata(ptr_s,ptr_d,ptr_d+LIEDIP/8);
//通知打印换页
changpage(pt);
if(++pt->hang == HANGDIP)
{
PRINT_INFOR.CHANG = 0;
while(PRINT_INFOR.CHANG < pt->showtime[pt->plan]);
break;
}
}
}
#endif
/*****************************************************************************************************************************************************
*LED屏上移动扫描方式 ok
*****************************************************************************************************************************************************/
#ifdef PRINT_UP
void print_up(struct windows xdata *pt) //new
{
uchar xdata *data ptr_s, *ptr_d;
while(1)
{
if(comtimeout != 0) break;
/*数据搬家开始*/
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_s = &pt->PRINT1_R[1][0];
ptr_d = &pt->PRINT2_R[0][0];
movedata(ptr_s,ptr_d,&pt->PRINT2_R[HANGDIP-1][0]); //调用汇编上移动数据
ptr_d = &pt->PRINT2_R[HANGDIP-1][0];
}
else
{
ptr_s = &pt->PRINT2_R[1][0];
ptr_d = &pt->PRINT1_R[0][0];
movedata(ptr_s,ptr_d,&pt->PRINT1_R[HANGDIP-1][0]); //调用汇编上移动数据
ptr_d = &pt->PRINT1_R[HANGDIP-1][0];
}
/*数据搬家结束*/
ptr_s = &pt->printbuf[pt->plan][pt->hang*(LIEDIP/8)];
CS_RAM=0;
adddata(ptr_s,ptr_d,ptr_d+LIEDIP/8);
//通知打印换页
changpage(pt);
if(++pt->hang == HANGDIP)
{
PRINT_INFOR.CHANG = 0;
while(PRINT_INFOR.CHANG < pt->showtime[pt->plan]);
break;
}
}
}
#endif
/*****************************************************************************************************************************************************
*LED屏上移动扫描方式 ok
*****************************************************************************************************************************************************/
#ifdef PRINT_DOWN
void print_down(struct windows xdata *pt) //new
{
uchar xdata *data ptr_s, *ptr_d;
while(1)
{
if(comtimeout != 0) break;
/*数据搬家开始*/
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_s = &pt->PRINT1_R[0][0];
ptr_d = &pt->PRINT2_R[1][0];
movedata(ptr_s,ptr_d,&pt->PRINT2_R[HANGDIP][0]); //调用汇编下移动数据
}
else
{
ptr_s = &pt->PRINT2_R[0][0];
ptr_d = &pt->PRINT1_R[1][0];
movedata(ptr_s,ptr_d,&pt->PRINT1_R[HANGDIP][0]); //调用汇编下移动数据
}
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_d = &pt->PRINT2_R[0][0];
}
else
{
ptr_d = &pt->PRINT1_R[0][0];
}
/*数据搬家结束*/
ptr_s = &pt->printbuf[pt->plan][(HANGDIP-1-pt->hang)*(LIEDIP/8)];
adddata(ptr_s,ptr_d,ptr_d+LIEDIP/8);
//通知打印换页
changpage(pt);
if(++pt->hang == HANGDIP)
{
PRINT_INFOR.CHANG = 0;
while(PRINT_INFOR.CHANG < pt->showtime[pt->plan]);
break;
}
}
}
#endif
/*****************************************************************************************************************************************************
*LED屏从下到上添加行=逐行显示
*****************************************************************************************************************************************************/
#ifdef PRINT_DOWN_HANG
void print_down_hang(struct windows xdata *pt) //new
{
uchar xdata *data ptr_s, *ptr_d;
while(1)
{
if(comtimeout != 0) break;
/*数据搬家开始*/
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_s = &pt->PRINT1_R[0][0];
ptr_d = &pt->PRINT2_R[0][0];
movedata(ptr_s,ptr_d,&pt->PRINT2_R[HANGDIP][0]); //调用汇编下移动数据
}
else
{
ptr_s = &pt->PRINT2_R[0][0];
ptr_d = &pt->PRINT1_R[0][0];
movedata(ptr_s,ptr_d,&pt->PRINT1_R[HANGDIP][0]); //调用汇编下移动数据
}
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_d = &pt->PRINT2_R[(HANGDIP-1)-pt->hang][0];
}
else
{
ptr_d = &pt->PRINT1_R[(HANGDIP-1)-pt->hang][0];
}
/*数据搬家结束*/
ptr_s = &pt->printbuf[pt->plan][(HANGDIP-1-pt->hang)*(LIEDIP/8)];
adddata(ptr_s,ptr_d,ptr_d+LIEDIP/8);
//通知打印换页
changpage(pt);
if(++pt->hang == HANGDIP)
{
PRINT_INFOR.CHANG = 0;
while(PRINT_INFOR.CHANG < pt->showtime[pt->plan]);
break;
}
}
}
#endif
/*****************************************************************************************************************************************************
*LED屏左移动扫描方式 ok
*****************************************************************************************************************************************************/
#ifdef PRINT_L
void print_l(struct windows xdata *pt) //new
{
uchar data ii=0;
uchar xdata *data ptr_s, *ptr_d;
while(1)
{
if(comtimeout != 0) break;
/*数据搬家开始*/
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_s = &pt->PRINT1_R[0][0];
ptr_d = &pt->PRINT2_R[0][0];
}
else
{
ptr_s = &pt->PRINT2_R[0][0];
ptr_d = &pt->PRINT1_R[0][0];
}
ptr_s += (LIEDIP/8-1);
ptr_d += (LIEDIP/8-1);
movedata_l(ptr_s,ptr_d,LIEDIP/8,HANGDIP); //调用汇编全部拷贝数据
/*数据搬家结束*/
for(ii=0; ii<HANGDIP; ii++) //装载一行数据
{
ptr_s = &pt->printbuf[pt->plan][ii*(LIEDIP/8)]; //得到对应行的首地址
ptr_s += pt->lie;
set_data_l(ptr_s, ptr_d, pt->bit_cont);//汇编处理
ptr_d += (LIEDIP/8);
}
//通知打印换页
changpage(pt);
if(++pt->bit_cont == 8)
{
pt->bit_cont = 0;
if(++pt->lie == LIEDIP/8)
{
PRINT_INFOR.CHANG = 0;
while(PRINT_INFOR.CHANG < pt->showtime[pt->plan]);
break;
}
}
}
}
#endif
/*****************************************************************************************************************************************************
*LED屏从右到左添加列=逐列显示
*****************************************************************************************************************************************************/
#ifdef PRINT_L_LIE
void print_l_lie(struct windows xdata *pt) //new
{
uchar data ii=0;
uchar data DATA;
uchar xdata *data ptr_s, *ptr_d;
while(1)
{
if(comtimeout != 0) break;
/*数据搬家开始*/
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_s = &pt->PRINT1_R[0][0];
ptr_d = &pt->PRINT2_R[0][0];
movedata(ptr_s,ptr_d,&pt->PRINT2_R[HANGDIP][0]); //调用汇编全屏拷贝数据
}
else
{
ptr_s = &pt->PRINT2_R[0][0];
ptr_d = &pt->PRINT1_R[0][0];
movedata(ptr_s,ptr_d,&pt->PRINT1_R[HANGDIP][0]); //调用汇编全屏拷贝数据
}
/*数据搬家结束*/
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
for(ii=0; ii<HANGDIP; ii++) //装载一行数据
{
ptr_s = &pt->printbuf[pt->plan][ii*(LIEDIP/8)]; //得到对应行的首地址
ptr_s += (LIEDIP/8 - 1);
ptr_s -= pt->lie;
DATA = 0x01<<pt->bit_cont;
if(DATA & *ptr_s) pt->PRINT2_R[ii][LIEDIP/8-1-pt->lie] |= DATA;
else pt->PRINT2_R[ii][LIEDIP/8-1-pt->lie] &= ~DATA;
}
}
if(PRINT_INFOR.SWAP == SWAP_PRINT2)
{
for(ii=0; ii<HANGDIP; ii++) //装载一行数据
{
ptr_s = &pt->printbuf[pt->plan][ii*(LIEDIP/8)]; //得到对应行的首地址
ptr_s += (LIEDIP/8 - 1);
ptr_s -= pt->lie;
DATA = 0x01<<pt->bit_cont;
if(DATA & *ptr_s) pt->PRINT1_R[ii][LIEDIP/8-1-pt->lie] |= DATA;
else pt->PRINT1_R[ii][LIEDIP/8-1-pt->lie] &= ~DATA;
}
}
//通知打印换页
changpage(pt);
if(++pt->bit_cont == 8)
{
pt->bit_cont = 0;
if(++pt->lie == LIEDIP/8)
{
PRINT_INFOR.CHANG = 0;
while(PRINT_INFOR.CHANG < pt->showtime[pt->plan]);
break;
}
}
}
}
#endif
/*****************************************************************************************************************************************************
*LED屏右移动扫描方式 ok
*****************************************************************************************************************************************************/
#ifdef PRINT_R
void print_r(struct windows xdata *pt) //new
{
uchar data ii=0;
uchar data DATA;
uchar xdata *data ptr_s, *ptr_d;
while(1)
{
if(comtimeout != 0) break;
/*数据搬家开始*/
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_s = &pt->PRINT1_R[0][0];
ptr_d = &pt->PRINT2_R[0][0];
movedata_r(ptr_s,ptr_d,&pt->PRINT2_R[HANGDIP][0]); //调用汇编全部拷贝数据
}
else
{
ptr_s = &pt->PRINT2_R[0][0];
ptr_d = &pt->PRINT1_R[0][0];
movedata_r(ptr_s,ptr_d,&pt->PRINT1_R[HANGDIP][0]); //调用汇编全部拷贝数据
}
/*数据搬家结束*/
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
for(ii=0; ii<HANGDIP; ii++) //装载一行数据
{
ptr_s = &pt->printbuf[pt->plan][ii*(LIEDIP/8)]; //得到对应行的首地址
ptr_s += (LIEDIP/8 - 1);
ptr_s -= pt->lie;
DATA = *ptr_s;
DATA >>= pt->bit_cont;
if(DATA & 0x01) pt->PRINT2_R[ii][0] |= 0x80;
else pt->PRINT2_R[ii][0] &= 0x7f;
}
}
if(PRINT_INFOR.SWAP == SWAP_PRINT2)
{
for(ii=0; ii<HANGDIP; ii++) //装载一行数据
{
ptr_s = &pt->printbuf[pt->plan][ii*(LIEDIP/8)]; //得到对应行的首地址
ptr_s += (LIEDIP/8 - 1);
ptr_s -= pt->lie;
DATA = *ptr_s;
DATA >>= pt->bit_cont;
if(DATA & 0x01) pt->PRINT1_R[ii][0] |= 0x80;
else pt->PRINT1_R[ii][0] &= 0x7f;
}
}
//通知打印换页
changpage(pt);
if(++pt->bit_cont == 8)
{
pt->bit_cont = 0;
if(++pt->lie == LIEDIP/8)
{
PRINT_INFOR.CHANG = 0;
while(PRINT_INFOR.CHANG < pt->showtime[pt->plan]);
break;
}
}
}
}
#endif
/*****************************************************************************************************************************************************
*LED屏从左到右添加列=逐列显示
*****************************************************************************************************************************************************/
#ifdef PRINT_R_LIE
void print_r_lie(struct windows xdata *pt) //new
{
uchar data ii=0;
uchar data DATA;
uchar xdata *data ptr_s, *ptr_d;
while(1)
{
/*数据搬家开始*/
if(comtimeout != 0) break;
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
ptr_s = &pt->PRINT1_R[0][0];
ptr_d = &pt->PRINT2_R[0][0];
movedata(ptr_s,ptr_d,&pt->PRINT2_R[HANGDIP][0]); //调用汇编全屏拷贝数据
}
else
{
ptr_s = &pt->PRINT2_R[0][0];
ptr_d = &pt->PRINT1_R[0][0];
movedata(ptr_s,ptr_d,&pt->PRINT1_R[HANGDIP][0]); //调用汇编全屏拷贝数据
}
/*数据搬家结束*/
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
for(ii=0; ii<HANGDIP; ii++) //装载一行数据
{
ptr_s = &pt->printbuf[pt->plan][ii*(LIEDIP/8)]; //得到对应行的首地址
ptr_s += pt->lie;
DATA = 0x80>>pt->bit_cont;
if(DATA & *ptr_s) pt->PRINT2_R[ii][pt->lie] |= DATA;
else pt->PRINT2_R[ii][pt->lie] &= ~DATA;
}
}
if(PRINT_INFOR.SWAP == SWAP_PRINT2)
{
for(ii=0; ii<HANGDIP; ii++) //装载一行数据
{
ptr_s = &pt->printbuf[pt->plan][ii*(LIEDIP/8)]; //得到对应行的首地址
ptr_s += pt->lie;
DATA = 0x80>>pt->bit_cont;
if(DATA & *ptr_s) pt->PRINT1_R[ii][pt->lie] |= DATA;
else pt->PRINT1_R[ii][pt->lie] &= ~DATA;
}
}
//通知打印换页
changpage(pt);
if(++pt->bit_cont == 8)
{
pt->bit_cont = 0;
if(++pt->lie == LIEDIP/8)
{
PRINT_INFOR.CHANG = 0;
while(PRINT_INFOR.CHANG < pt->showtime[pt->plan]);
break;
}
}
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -