?? 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 + -