📄 printplan.c
字号:
#include "config.h"
#include "Bmp.h"
data struct PRINTLED PRINT_INFOR;
struct print_asm idata printasm _at_ 0x30; //汇编程序读取其显存地址
xdata uchar word; //这个用于向主调函数返回存储器中是否有可显示的内容
bit rell_print; //可以更新显存标记
uchar NOW_ROW=0;
uchar T0H,T0L;
extern uchar comtimeout;
uchar data_load(struct windows xdata *pt) //new
{
uchar xdata *data ptr_s;
uchar code *ps;
uchar i,j;
CS_RAM=0;
if(word == 0xaa) return 0;
//初始化点阵数据库
pt->plan_flash = 1; //FLASH中的总计幕数
pt->plan_point = 1; //指向FLASH中幕数的数值
pt->plan_size = 1; //当前缓冲的幕数
pt->plan = 0;
pt->movintype[0]=0x03;
pt->movsize[0] =5; //移动速度50ms
pt->showtime[0]=100; //
ptr_s = (uchar xdata *)&pt->printbuf[0][0];
ps=&bmp;
for(i=16;i!=0;i--)
{
for(j=LIEDIP/8;j!=0;j--)
{
*ptr_s++ =*ps++;
}
}
#ifndef ALONE
ps=&bmp1;
for(i=16;i!=0;i--)
{
for(j=LIEDIP/8;j!=0;j--)
{
*ptr_s++ = *ps++;
}
}
#endif
PRINT_INFOR.PRINTBUF2_R1 =(uchar xdata *)&pt->printbuf[0][0];
#ifndef ALONE
PRINT_INFOR.PRINTBUF2_R2 =(uchar xdata *)&pt->printbuf[0][16*20];
#endif
}
void windows_init(struct windows xdata *pt)
{
uchar xdata *data ps;
//关闭显示屏
LAT = 0;
HIB = 1;
//初试化显示参数
rell_print=0;
PRINT_INFOR.CHANG = 0; //允许外部交换的标志
PRINT_INFOR.COLOR = DEFINECOLOR;
PRINT_INFOR.SWAP = SWAP_PRINT2;
//初试化显存
ps = (uchar xdata *)&pt->PRINT1_R;
while(ps != &pt->printbuf)
{
*ps++ = 0xff;
}
//读取幕数据信息
data_load(pt);
//开启显示屏
HIB = 0;
T0H=0xB8; //10mS
T0L=0x00;
//初始化T0产生打印节拍
#ifdef ALONE
T0H=0xB8; //10mS
T0L=0x00;
#else
#if(OSC_FREQ == 40000000L)
T0H=0xBE; //5mS
T0L=0xE5;
#endif//#if(OSC_FREQ == 40000000L)
#ifdef STATIC
T0H=0xD4; //6mS
T0L=0xCC;
#endif//#ifdef STATIC
#endif //end ALONE
TH0=T0H;
TL0=T0L;
ET0=1; //T0中断允许
TR0=1; //启动T0
EA = 1;
}
void Print_U(uchar xdata *data ptr1_s)
{
uchar i,j;
NOW_ROW=0;
for(i=16;i!=0;i--)
{
CS_RAM=0;
LAT=0;
HIB=0;
for(j=LIEDIP/8;j!=0;j--)
{
SDA_R1=*ptr1_s;
ptr1_s++;
CLK=0;
CLK=1;
}
ACC=NOW_ROW;
ACC|=0xF0;
LAT=1;
P1= ACC;
NOW_ROW++;
LAT=0;
}
}
void Print_D(uchar xdata *data ptr1_s)
{
uchar i,j;
NOW_ROW=0;
for(i=16;i!=0;i--)
{
CS_RAM=0;
LAT=0;
HIB=0;
for(j=LIEDIP/8;j!=0;j--)
{
SDA_R2=*ptr1_s;
ptr1_s++;
CLK=0;
CLK=1;
}
ACC=NOW_ROW;
ACC|=0xF0;
LAT=1;
P1= ACC;
NOW_ROW++;
LAT=0;
}
}
void CLOCK(void) interrupt 1 using 3 //定时10mS
{
ET0=0; //T0中断允许
TH0=T0H;
TL0=T0L;
rell_print = 0;
if(comtimeout != 0)
comtimeout--;
if(PRINT_INFOR.SWAP == SWAP_PRINT1)
{
printasm.ptr1_s = PRINT_INFOR.PRINTBUF1_R1;
#ifndef ALONE
printasm.ptr2_s = PRINT_INFOR.PRINTBUF1_R2;
#endif
}
else
{
printasm.ptr1_s = PRINT_INFOR.PRINTBUF2_R1;
#ifndef ALONE
printasm.ptr2_s = PRINT_INFOR.PRINTBUF2_R2;
#endif
}
Print_U(printasm.ptr1_s);
#ifndef ALONE
Print_D(printasm.ptr2_s);
#endif //end ALONE
rell_print = 1;
++PRINT_INFOR.CHANG;
ET0=1; //T0中断允许
}
void movedata(uchar xdata *pt, uchar xdata *i, uchar xdata *j)
{
CS_RAM=0;
while(i!=j)
{
*i++=*pt++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -