网站首页  |  关于强联  |  产品展示  |  典型应用  | 人才招聘  |  联系我们  |  强联淘宝店1强联淘宝店2
视频产品
   字符叠加器系列(多用于监控)
通用视频字符叠加模块QL504A 热门

通用视频字符叠加器QL505A

视频字符叠加模块QL503F
四路通用字符叠加器QL505-4
   电视字幕机系列(多用于电视广告)
通用视频滚动字幕机QLV6253 热门
通用视频滚动字幕机QLV6254
通用高级电视字幕机QLV6255
全球通用电视字幕机QLV6331
四路电视字幕机QLV-4系列
8路电视字幕机QL668(有二维码 热门
4路电视字幕机QL664(有二维码 热门
   视频叠加专用系列
工业计数器视频字符叠加器J200
测深测长字符叠加器X500A 热门
十字线圆形矩形角度图形字符叠加器QL650 热门
计米器、测深测长字符叠加器X600热门
旋转编码器测深测长字符叠加器X500
矿井深度测量视频字符叠加器 X500
水深测量视频字符叠加器 X500
距离、长度测量视频字符叠加器X500
视频十字线叠加器QL511SA模块热门
视频圆形十字线叠加器QL512模块
视频十字线叠加器QL510S (老产品)
温湿度字符叠加器QL505-W1    
高级静态图文字幕机QLV6300A
   典型应用
电视字幕机在KTV行业的应用
字幕机在酒店医院有线电视的应用
电视字幕机取代LED显示屏
QL62XX字幕机/模块的应用参考
□ QLV6255字幕机在商场商铺的应用
其它产品                
温湿度变送器QL102
旋转编码器测长测深测角速模块 X200
无线数传模块  可用于字幕机…
USB转RS485模块 可用于字幕机…
温湿度变送器QL101B
广告机 数字标牌 教学 商品导购
教学、导购、广告 3合1系统 TMA
多媒体课件制作软件 KJ-TMA
数字标牌/广告机软件 QL68S

QL50系列视频字符叠加器SPI接口测试程序
      2012年4月20日起 强联科技QL50xx系列产品软硬件全面升级 ,硬件版本号为“1203”,运行速度提高1倍,新增可设置点阵扫描时钟频率功能,其中QL504A模块新增4路10位AD转换器。PC测试软件升级为QL500-V8.4。
 ■ QL50系列视频字符叠加器SPI接口测试程序 (keil)
/* 2015-08-12
程序名称:QL50系列全部产品的SPI接口测试程序
测试环境:使用任何单片机芯片
本程序使用以下芯片测试过:STC12C5608,STC11F32XE,AT89S51/STC89C51RC ....
晶振 :11.0592MHZ
适用于:QL504A,QL505A,QL503F,QL508F,等QL50系列全部产品的SPI接口
c51 SPI程序,包含串口通信
适用:本程序为C51代码,稍加修改可使用其他单片机芯片
这个程序包含了很多内容,包括如何读取时钟数据显示,如何调用"72 X 96点阵的31个常用的数字、日期、箭头等图片式字符
显示


重要提示:★★★★★★★★★★★★★

1,对于QL503F模块用户
QL503F模块预留了与AT89C2051(DIP20)引脚兼容的单片机芯片PCB座,51单片机芯片可直接操作QL503F模块的SPI接口,通过修改K1,K2,K3选择电
阻(0Ω)的焊接位置,即改焊接在左侧两焊盘,可直接使用QL503F模块的RS232,RS485及TX、RX接口。除串口通信接口外,其它的I/O口都与一10芯座连接,这样在有
些使用场合,用户可无需重新设计与模块接口的MCU电路,插上自己的单片机及晶振就可设计控制QL503F模块的程序。与AT89C2051(DIP20)兼容的单片
机芯片很多,如ATTINY3213、STC系列芯片如STC12C5608AD… 、AT89C4051、华邦,新茂…
对于QL503F模块的用户,读者如使用STC12C5608(DIP20),STC12C5608AD(DIP20)....等芯片即可做在线下载开发。
硬件连接请参考 《使用QL503F模块上的20脚51单片机做二次开发说明》word 文件说明。
2,对于QL504A模块用户
由于QL504A模块没有预留用户单片机芯片PCB座,用户只能通过外接单片机芯片,通过SPI或UART来操作QL504A模块。

*/
//*************一下程序使用STC12C5608AD,晶振:11.0592MHZ测试通过*******************************************
//#include<STC12C5410AD.H>
#include<reg51.h>
#include<intrins.h>
#include<stdio.h>
#include<string.h>
#define UN unsigned char
#define Uint unsigned int
//定义SPI引脚,读者可根据实际使用修改
sbit spics=P1^4;
sbit spidi =P1^5;
sbit spido =P1^6;
sbit spiclk=P1^7;
sbit SYN=P1^3;//此脚连接同步信号(可不连接)
sfr16 DPTR=0x82;
sbit R_T=P3^7;//RS485收发控制引脚
unsigned char bdata bm;//在片内RAM中定义一个可位选址的变量
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;
unsigned char read_1byte(void);//读出一个字节
void write_1byte(unsigned char x);//写入一个字节
void cmd_4byte(UN a,b,c,d);//连续写四个字节
void csf_uart();//串口初始化
void csf_spi(void);//SPI初始化
void csf_djq(void);//初始化叠加器

void Set_smclk(UN idata x);//设置点阵扫描时钟,仅v1203以上版本有效
void MoRen_Color(UN ys);//设置默认字符颜色,ys高位0-7,低位0-7
void cls(UN ys);//按指定颜色清屏0-7
void Ding_Wei(UN H,L);//定位,设置要显示的起始位置H:行号1-12,L:列号1-24
void Size(UN size,h);//字符大小,设置指定行的字符大小,size:大小0-3,h:行号1-12
void Dis1Char(UN idata nmH,nmL);//按字符内码显示1字符,nmH:内码高字节,nmL:内码低字节
void Hang_ju(UN idata x);//行距设定0-15
void HDP(UN idata x);////设定水平方向开始显示的位置x:0-63
void VDP_P(UN idata x);//PAL方式下设定垂直方向开始显示的位置0-63
void VDP_N(UN idata x);//在PAL制式下按NTSC格式显示,设定扫描的起始垂直位置,范围从0-63
void Neiwai_SaoMiao(UN idata x);//内外频及扫描方式选择
void TimeKG(UN x,ys);//时间开关
UN ReadTime(UN x);//读出时间
void WriteTime(UN sj,dat);
void delay_ms(unsigned int nMs);//豪秒级延时<65535ms,,延时函数读者可根据实际使用编写
void distp(UN h,l,n);
void diskong(UN h,l);
void dis_time();
void dis_date(UN x);
void cmd_4byte_undelay(UN a,b,c,d);//连续写4个字节--1个指令

UN idata allcs[7];
#define sjh allcs[0]//时间显示行
#define sjl allcs[1]//时间显示列
#define spwy allcs[2]//水平位移
#define czwy allcs[3]//垂直位移
#define hangju allcs[4]//行距
#define sjms allcs[5]//时间显示模式
#define sjkg allcs[6]//时间显示开关

//72 X 96点阵的31个常用的数字、日期、箭头等图片式字符的首地址
unsigned int code neima[]={0xA4A0,0xA4B0,0xA4C0,0xA4D0,0xA4E0,0xA4F0,0xA5A0,0xA5B0,
0xA5C0,0xA5D0,0xA5E0,0xA5F0,0xA6A0,0xA6B0,0xA6C0,0xA6D0,0xA6E0,0xA6F0,0xA7A0,0xA7B0,0xA7C0,0xA7D0,0xA7E0,0xA7F0,0xA8A0,0xA8B0,0xA8C0,0xA8D0,0xA8E0,0xA8F0,0xA2A0};
void delay(unsigned int x);
UN code bj0[]={"中华人民共和国A 123⒉78"};//英文数字得使用全角输入
//============================================================================
//主程序
//============================================================================
void main(void)
{ UN i,h,l,m;


R_T=0;//RS485处于接收状态
//WDT_CONTR=0x3f;
delay_ms(1000);//延时,因为需要有设备初始化的过程
//WDT_CONTR=0x3f;
csf_uart();//初始化UART
csf_spi();//初始化SPI
csf_djq();//初始化叠加器

/*===========================================================================
显示示例1:
下列4行代码实现 从第4行第1列显示UN code bj0[]={"中华人民共和国A 123⒉78"};
=============================================================================*/
Ding_Wei(4,1);//设置显示位置:从第4行第1列开始显示
m=sizeof(bj0)-1;//测试数组bj0的长度
for(i=0;i<m/2;i++)
{Dis1Char(bj0[i*2],bj0[i*2+1]);}//发送"中华人民共和国A 123⒉78"的汉字内码,即显示



/*===========================================================================
显示示例2:
下列3行代码实现 从第5行第1列显示 “AB”
=============================================================================*/
Ding_Wei(5,1);//设置显示位置:从第5行第1列开始显示
Dis1Char(0xa3,0xc1);//"A"的汉字内码为0xA3C1
Dis1Char(0xa3,0xc2);//"B"的汉字内码为0xA3C2




/*===========================================================================
显示示例3:
下列4行代码实现 显示72*96点阵字符 8756
=============================================================================*/
distp(6,8,8);
distp(6,11,7);
distp(6,14,5);
distp(6,17,6);
//-------------------------------------------




sjms=0;
ES=EA=1;
sjh=1;//时间显示行为11
sjl=3;//时间显示列为3
while(1)

{ // WDT_CONTR=0x3f;
//SBUF=ReadTime(6); while(TI==0);TI=0;delay_ms(500);
//SBUF=ReadTime(2); while(TI==0);TI=0;delay_ms(500);
//SBUF=ReadTime(1); while(TI==0);TI=0;delay_ms(500);
//SBUF=ReadTime(0); while(TI==0);TI=0;delay_ms(500);
//SBUF=ReadTime(3); while(TI==0);TI=0;delay_ms(500);
//SBUF=ReadTime(4); while(TI==0);TI=0;delay_ms(500);
//SBUF=ReadTime(0); while(TI==0);TI=0;delay_ms(500);

//for(i=0;i<7;i++){SBUF=ReadTime(i);while(TI==0);TI=0;delay_ms(50);}
//delay_ms(1000);


/*===========================================================================
显示示例4:
下列5行代码实现 显示并刷新时间日期,如不需要显示时间可屏蔽此段代码
=============================================================================*/
if(sjkg==1)//刷新时间
{ Ding_Wei(sjh,sjl);

if(sjms<2)
{dis_date(sjms);Dis1Char(0xa1,0xa1);}
dis_time();
}
//------------------------- -------------------------------
}
}
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
void csf_uart()//串口初始化
{
TMOD=0x22;TH1=0xfa;TL1=0xfa;SCON=0x50;PCON=0x80;
TR1=1;//IT0=1;EX0=1;ES=EA=1;
TH0=TL0=6;TR0=0;ET0=0;
}

void csf_djq(void)
{UN i;
hangju=0;//行距为0
spwy=6;//水平位移为6
czwy=36;//垂直位移为36
sjkg=1;//开时间显示
sjh=11;//时间显示行为11
sjl=3;//时间显示列为3
Set_smclk(3);//设置点阵扫描时钟,仅v1203以上版本有效,这个设置可改变字符的显示宽度
MoRen_Color(0x71);
Neiwai_SaoMiao(12);//先使用内频进行显示参数的设置,以保证参数设置有效
HDP(spwy);//设定水平方向开始显示的位置x:0-63
VDP_P(czwy);//PAL方式下设定垂直方向开始显示的位置0-63
Hang_ju(hangju);//行距设定为
delay_ms(1);
i=1;do{ Size(0,i);i++;}while(i<13);//把12行字符大小全设为0号
delay_ms(50);
Neiwai_SaoMiao(17);//扫描方式设为17
TimeKG(0,0x71);//关叠加器时间显示
cls(1);//按蓝色清屏
}

/*以下串口中断用于设置时间*/
void uart() interrupt 4
{UN i;
UN sz[8];
unsigned int cc;

RI=0;
if(SBUF!=0x55){goto out;}

EA=0;
loop:
i=0;
do{cc=0xffff;while(RI==0){cc--;if(cc==0){i--;goto out;}}sz[i]=SBUF;RI=0;if(sz[0]==0x55){goto loop;}i++;}
while(i!=4);

if(sz[0]==0x17)
{ i=0;
do{cc=0xffff;while(RI==0){cc--;if(cc==0){goto out;}}sz[i]=SBUF;RI=0;i++;} while(i!=7);
for(i=0;i<7;i++)
{WriteTime(i,sz[i]);}
}

out:
EA=1;
}
//==========================================================================
//秒0,分1,时2,日3,月4,星期5,年6
void dis_time()
{UN ff,shi,ge;

ff=ReadTime(2);
delay_ms(8);
shi=ff>>4;
ge=ff&0x0f;
if(shi>0){Dis1Char(0xa3,0xb0+shi);}else{Dis1Char(0xa1,0xa1);}
Dis1Char(0xa3,0xb0+ge);//时
Dis1Char(0xa1,0xc3);//:

ff=ReadTime(1);
delay_ms(8);
shi=ff>>4;
ge=ff&0x0f;
Dis1Char(0xa3,0xb0+shi);
Dis1Char(0xa3,0xb0+ge);//分

Dis1Char(0xa1,0xc3);//

ff=ReadTime(0);
delay_ms(8);
shi=ff>>4;
ge=ff&0x0f;
Dis1Char(0xa3,0xb0+shi);
Dis1Char(0xa3,0xb0+ge);//miao
out:;
}

//==========================================================================
//秒0,分1,时2,日3,月4,星期5,年6
void dis_date(UN x)
{UN ff,shi,ge;
if(x==0)
{Dis1Char(0xa3,0xb2);Dis1Char(0xa3,0xb0);
ff=ReadTime(6);
delay_ms(8);
shi=ff>>4;
ge=ff&0x0f;
Dis1Char(0xa3,0xb0+shi);Dis1Char(0xa3,0xb0+ge);//
//Dis1Char(0xa3,0xb8);Dis1Char(0xa3,0xb0+2);
delay_ms(8);Dis1Char(0xa3,0xad);//-
}
ff=ReadTime(4);
delay_ms(8);
shi=ff>>4;
ge=ff&0x0f;
Dis1Char(0xa3,0xb0+shi);Dis1Char(0xa3,0xb0+ge);Dis1Char(0xa3,0xad);//-

ff=ReadTime(3);
delay_ms(8);
shi=ff>>4;
ge=ff&0x0f;
Dis1Char(0xa3,0xb0+shi);Dis1Char(0xa3,0xb0+ge);//-

}
void cls(UN ys)//清屏选择屏幕背景颜色
{cmd_4byte(1,ys,0,0);delay_ms(1);}
//---------------------------------------------
void Neiwai_SaoMiao(UN idata x)//内外屏及扫描方式选择
{cmd_4byte(2,x,0,0);}

//----------------------------------------
void HDP(UN idata x)////设定水平方向开始显示的位置x:0-63
{cmd_4byte(3,x,0,0);}

//----------------------------------------
void VDP_P(UN idata x)//PAL方式下设定垂直方向开始显示的位置0-63
{cmd_4byte(4,x,0,0);}

//----------------------------------------
void huifucc(void)
{cmd_4byte(20,0xaa,0xaa,0);}

//----------------------------------------
void VDP_N(UN idata x)//在PAL制式下按NTSC显示,设定扫描的起始垂直位置,范围从0-63
{cmd_4byte(5,x,0,0);}

//-------字符大小,设置指定行的字符大小,size:大小,h:行号
void Size(UN size,h)
{cmd_4byte(6,size,h,0);}

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

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

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

//行距设定0-15
void Hang_ju(UN idata x)
{cmd_4byte(10,x,0,0);}

//开关时间显示x=0关,x=1开;ys为时间的颜色
void TimeKG(UN x,ys)//
{cmd_4byte(0X16,x,ys,0);
delay_ms(10);//关闭时间显示至少有4ms的延时
}
//------------------------------
//分别写入时间(sj),秒,分,时,日,月,星期,年 ,dat为数据
void WriteTime(UN sj,dat)
{cmd_4byte(0X17,sj,dat,0);}
//------------------------------

//分别读出时间,秒,分,时,日,月,星期,年
UN ReadTime(UN x)//
{cmd_4byte(0X18,x,0,0);
return read_1byte();
}

//---------------------------------------------
void Set_smclk(UN idata x)//设置点阵扫描时钟
{cmd_4byte(0x47,0,x,0);}

//---------------------------------------------
void cmd_4byte_undelay(UN a,b,c,d)//连续写4个字节--1个指令
{write_1byte(a);write_1byte(b);write_1byte(c);write_1byte(d);}
//---------------------------------------------
void cmd_4byte(UN a,b,c,d)//连续写4个字节--1个指令
{write_1byte(a);write_1byte(b);write_1byte(c);write_1byte(d);
//delay_ms(1);//延时1ms以上,当你的单片机运行速度较快,请适当提高指令间隔延时时间
delay(300);//11.0592MHZ STC11F32XE
}
//--------------------------------------------------------------
void csf_spi(void)//初始化SPI
{
spics=1;
spiclk=0;
}
//-----------------------------------------------------------------
void write_1byte(unsigned char x)//写1个字节
{ unsigned char i=0;
spics=0;
for(i=0;i<8;i++)
{spidi=(x>>i)&1;
spiclk=1;//_nop_();
spiclk=0;//_nop_();
}
spics=1;
}
//-----------------------------------------------------------
unsigned char read_1byte(void)//读1个字节
{ unsigned char i=0;
spics=0;//_nop_();_nop_();
do{bm=bm>>1;
spiclk=1;//_nop_();_nop_();
bm7=spido;
spiclk=0;//_nop_();_nop_();
i++;}
while(i<8);
spics=1;//_nop_();_nop_();
return bm;
}
//-------------------------------------------------------------------------
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;
TMOD=0x22;TH1=0xfa;TL1=0xfa;
}

void distp(UN h,l,n)
{UN H,L;
//DPTR=neima(n);
H=neima[n]>>8;L=neima[n];
Ding_Wei(h,l);Dis1Char(H,L);L++;Dis1Char(H,L);L++;Dis1Char(H,L);L++;h++;
Ding_Wei(h,l);Dis1Char(H,L);L++;Dis1Char(H,L);L++;Dis1Char(H,L);L++;h++;
Ding_Wei(h,l);Dis1Char(H,L);L++;Dis1Char(H,L);L++;Dis1Char(H,L);//L++;h++;
//Ding_Wei(h,l);Dis1Char(H,L);L++;Dis1Char(H,L);L++;Dis1Char(H,L);L++;Dis1Char(H,L);
}

//空显示
void diskong(UN h,l)
{
Ding_Wei(h,l);Dis1Char(0xa2,0xe4);Dis1Char(0xa2,0xe4);Dis1Char(0xa2,0xe4);
Ding_Wei(h+1,l);Dis1Char(0xa2,0xe4);Dis1Char(0xa2,0xe4);Dis1Char(0xa2,0xe4);
Ding_Wei(h+2,l);Dis1Char(0xa2,0xe4);Dis1Char(0xa2,0xe4);Dis1Char(0xa2,0xe4);//L++;h++;
//Ding_Wei(h,l);Dis1Char(H,L);L++;Dis1Char(H,L);L++;Dis1Char(H,L);L++;Dis1Char(H,L);
}
//短延时
void delay(unsigned int x)
{do{x--;}
while(x!=0);
}
 


 

· 下载QL50系列视频字符叠加器SPI接口测试程序
· 使用QL503F模块上的20脚51单片机做二次开发说明
· 视频字符叠加器QL508F,QL505A,QL504A,QL503F--中文简体版演示软件下载 V8.4版
· 内码转换程序下载
· QL505A视频字符叠加叠加器 用户手册下载(PDF)  更新日期 2012-04-20

 
 业务咨询电话:0595-28011587

  技术咨询电话:0595-22570937 王工
 
 
 
泉州强联单片机科技有限公司  Copyright 2004-2018 www.qlmcu.com All Rights Reserved
备案号:闽ICP备05037255号