⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printplan.c

📁 多字节汉字屏显示控制程序
💻 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 + -