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

📄 ql300spi.c

📁 MB90092字符叠模块应用 通用视频字符叠加器模块QL300A SPI接口C51源程序
💻 C
字号:
/*视频字符叠加模块(器)spi接口测试程序(仅供参考)
本程序仅提供常用的基本功能,其它功能读者请自行编写
应用产品:QL300A
编译环环境: KEIL C         
简要说明:
本测试程序使用AT89S51,晶振11.0592MHZ
  注:读者如果使用更高运行速度请在指令结束插入适当的延时
*/

#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#include<string.h>
//#include<ql503_spi_public.c>
#define UN  unsigned char

void csf_main(void);//初始化叠加的默认值

UN code zfc[]={0,0,0,0,12,0,0,30,0,0,14,0,0,14,0,31,
255,254,31,255,254,24,0,14,24,0,14,24,0,14,24,0,
14,0,0,16,3,255,240,3,255,240,0,12,0,0,12,0,
0,12,0,3,140,0,3,143,252,3,143,252,7,12,0,7,
12,0,7,140,0,15,204,0,15,204,0,28,236,0,28,124,
1,60,63,254,56,15,254,8,0,0,0,0,0,0,0,0};//定
void csf_uart();
sfr16 DPTR=0x82;
sbit    spics=P1^0;
sbit    spidi =P1^1;
sbit    spido =P1^2;
sbit    spiclk=P1^3;

unsigned char bdata bm;
sbit  bm0=bm^0;
sbit  bm1=bm^1;
sbit  bm2=bm^2;
sbit  bm3=bm^3;
sbit  bm4=bm^4;
sbit  bm5=bm^5;
sbit  bm6=bm^6;
sbit  bm7=bm^7;
void csf_spi(void);//初始化SPI
void  write_1byte(unsigned char x);
void Tx4b(UN a,b,c,d);
void cls(UN ys);//cm1//按指定颜色清屏0-7
void Neiwai_SaoMiao(UN x);//cm2//内外频及扫描方式选择0-1
void hwy(UN  h,l);//cm3//设定水平方向开始显示的位置0-511
void vwy(UN  h,l);//cm4 PAL方式下设定垂直方向开始显示的位置0-511
void zfjj(UN x);//cm5
void size(UN x);//cm6//字符大小,设置指定行的字符大小,size:大小0-3
void Ding_Wei(UN H,L);//cm7 //定位,设置要显示的起始位置H:行号1-16,L:列号1-35
//void Tx_arry(UN  zfc[]);//字符数组的显示
void Tx_nei_ma(UN  nmH,nmL);//cm8//按字符内码显示1字符,nmH:内码高字节,nmL:内码低字节
void MoRen_Color(UN ys);//cm9//设置默认字符颜色,ys高位0-7,低位0-7
void hj(UN x);//cm10//行距设定0-7
void bk(UN x);//cm11
void yy_ys(UN x);//cm12
void fxg(UN x);//cm13
void yykg(UN x);//cm14
void blinking(UN x);//cm15
void lxfszf();//cm16

void wcode(UN idata zfc[],UN x);//cm17
//无cm18
void copy_f_r(UN m,n);//cm19
void disram(UN x);//cm20

void delay(unsigned int x);
void delay_ms(unsigned int nMs);//豪秒级的延时<65535ms,,延时函数读者可根据实际使用编写
//#define addr  0xff
//============================================================================
//主程序
//============================================================================
void  main(void)
 {UN i,j,h,a,b,a1,b1;
 unsigned int old1,new1;
  csf_spi();
delay_ms(200);
cls(1);//按蓝色清屏
delay_ms(60);//发清屏指令后延时
blinking(0);//不闪烁
hj(0);//设行距为0
hwy(0,10);//设水平位移
vwy(0,12);//设垂直位移
yy_ys(0);//设阴影颜色为黑色
yykg(2);//设强阴影

Ding_Wei(2,7);//定位,第2行第7列
disram(8);//调出显示用户自定义RAM的8个字符

Ding_Wei(3,9);//定位,第3行第9列
MoRen_Color(0x16);//改变默认字符颜色为蓝底黄字
disram(4);//调出显示用户自定义RAM的8个字符


MoRen_Color(0x17);//改变默认字符颜色为蓝底白字
Tx_nei_ma(0,0xa0);//按字符内码显示1字符
Tx_nei_ma(0,0xa1);//按字符内码显示1字符
Tx_nei_ma(0,0xa2);//按字符内码显示1字符
Tx_nei_ma(0,0x02);//按字符内码显示1字符
Tx_nei_ma(0,0x03);//按字符内码显示1字符

yykg(0);////设为无阴影
Ding_Wei(4,2);//定位,第4行第2列
hj(2);//设行距为2
i=0;
while(i<15){Tx_nei_ma(0,0x11+i);i++;}//按字符内码循环显示字符


Ding_Wei(5,2);//定位,第5行第2列
size(2);//设字符大小为2号字
zfjj(1);//设字间距为1
bk(2);//有背景显示且框架阴影在底边
MoRen_Color(0x27);//
i=0;
while(i<15){Tx_nei_ma(0,0x11+i);i++;}//按字符内码显示字符
Ding_Wei(6,2);
size(3);
zfjj(3);
//bk(1);//有背景显示且框架阴影在底边
yykg(0);//设无阴影

MoRen_Color(0x60);

i=0;
while(i<8){Tx_nei_ma(0,0x11+i);i++;}//按字符内码显示字符

bk(0);//有背景显示且框架阴影在底边
Ding_Wei(7,2);
MoRen_Color(0x17);
disram(8);


Ding_Wei(7,2);
blinking(1);//设闪烁
MoRen_Color(0x17);
disram(8);
wcode(zfc,5);//写入1个用户自定义字符点阵数据(96个字节)到用户RAM 5区;
Ding_Wei(7,10);
size(3);
Tx_nei_ma(0,0xa0);//按字符内码显示1字符
copy_f_r(15,6);//复制用户FLASH 15区的点阵数据到指定的用户RAM 6区 。
//---------------------------------------------------------
Ding_Wei(1,10);
lxfszf();//连续发送字符代码显示
write_1byte(1);write_1byte(0xce);delay(100);write_1byte(1);write_1byte(0xcf);delay(100);write_1byte(1);write_1byte(0xd0);delay(100);
write_1byte(1);write_1byte(0x40);delay(100);write_1byte(1);write_1byte(0x41);delay(100);write_1byte(1);write_1byte(0x42);delay_ms(3);
//------------------------------------------------------------------------
Ding_Wei(1,17);Tx_nei_ma(0,0xa0);//按字符内码显示1字符
 
 
 
 
  while(1){;}//主循环

}
//==========================================================================
void csf_main(void)//初始化叠加的默认值
{UN idata i;

  cls(1);//按蓝色清屏

  delay_ms(70);//清屏后至少插入70ms的延时
	}
//----------------------------------------------------------------------------------


void csf_uart()
{TMOD=0x21;TH1=0xfa;TL1=0xfa;SCON=0x50;PCON=0x80;//9600波特率
        TR1=1;}
 
 
 void cls(UN ys)//按指定颜色清屏:ys:0=7
{Tx4b(1,ys,0,0);}
//---------------------------------------------
void Neiwai_SaoMiao(UN x)//内外屏及扫描方式选择:x=0为内同步;x=1为外同步
{Tx4b(2,x,0,0);}

//----------------------------------------
void hwy(UN  h,l)////设定水平方向开始显示的位置h:0-1;l:0-0xff
{Tx4b(3,h,l,0);}

//----------------------------------------
void vwy(UN  h,l)//PAL方式下设定垂直方向开始显示的位置h:0-1;l:0-0xff
{Tx4b(4,h,l,0);}

//----------------------------------------
void zfjj(UN x)//字符间距x:0-3
{Tx4b(5,x,0,0);}

//-------字符大小,设置指定行的字符大小,size=0-3:
void size(UN x)
{Tx4b(6,x,0,0);}

//-------定位,设置要显示的起始位置--------------------
void Ding_Wei(UN H,L)
{Tx4b(7,H,L,0);}

//----------------------------------------
void Tx_nei_ma(UN  nmH,nmL)//按字符内码显示1字符
{Tx4b(8,nmH,nmL,0);}

//-------设置默认字符颜色--------------------
void MoRen_Color(UN ys)
{Tx4b(9,ys,0,0);}

////行距设定0-7
void hj(UN x)
{Tx4b(10,x,0,0);}

//x=0-3;AT1=0无背景显示,AT1=1有背景显示但背景无框架,AT1=2有背景显示且框架阴影在底边,AT1=3有背景显示且框架阴影在顶边;默认为0
void bk(UN x)
{Tx4b(11,x,0,0);}
//阴影颜色x=0-7
void yy_ys(UN x)
{Tx4b(12,x,0,0);}

//框架效果;0-1;默认为1
void fxg(UN x)
{Tx4b(13,x,0,0);}

////0-2;0=无阴影;1=微阴影;2=强阴影;开关及颜色都在  行距函数里控制
void yykg(UN x)
{Tx4b(14,x,0,0);}
//0-1;0不闪,1闪
void blinking(UN x)
{Tx4b(15,x,0,0);}

void lxfszf()
{Tx4b(16,0,0,0);

}

//写入1个用户自定义字符点阵数据到指定的用户RAM区;sz[1]=0-7,第二个字节为用户区号//

void wcode(UN idata zfc[],UN x)
{UN i;
	Tx4b(17,x,0,0);
     i=0xff;
     do
     {i++;write_1byte(zfc[i]);}//发送字符代码
     while(i<96-1);
     
    
    delay_ms(3);
}

//复制1指定的FLASH区(0-15)的点阵数据到指定RAM区 (0-7)
void copy_f_r(UN m,n)
{Tx4b(19,m,n,0);delay_ms(3);}

void disram(UN x)
{Tx4b(20,x,0,0);}



void Tx4b(UN a,b,c,d)//连续写4个字节--1个指令
{write_1byte(a);write_1byte(b);write_1byte(c);write_1byte(d);delay_ms(1);}


void csf_spi(void)//初始化SPI
{  
        spics=1;
        spiclk=0;
 }


 void  write_1byte(unsigned char x)//写1个字节
{  unsigned char i=0;
   	bm=x;
   	spics=0;
   	// _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  do
       {spidi=bm0;
        
      //  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        spiclk=1;
      //  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        spiclk=0;
     // _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        bm=bm>>1;
        i++;
       // _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        }
  while (i!=8);
        spics=1;
     // _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}

void delay_ms(unsigned int nMs)//豪秒级的延时<65535ms
{
	unsigned int n=0;
	TMOD=0x21;
	TR0=1;
	while(n<nMs)////利用T0做定时计数器,循环采样,直到达到定时值
	{
		TH0=0;
		TL0=20;
		while(TH0<4)
		{;
		}
		n++;
	}
	TR0=0;
}

void delay(unsigned int x)
{do{x--;}
 while(x!=0);
}       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -