1、视频字符叠加模块(器)-单片机SPI测试程序 作者:佚名 来源:强联单片机科技有限公司 发布时间:2006-8-11 12:32:50 发布人:george 减小字体 增大字体 简要说明: 1,本测试程序使用AT89S51,晶振12MHZ 2,字符串的使用,数字/英文/及空格需用全角输入,换行为"0x13,0x13" 3,包含文件视频字符叠加器(模块)SPI接口c51公共函数 *********************************************************/ #define UN unsigned char //定义SPI引脚,读者
2、可根据实际使用修改 sbit spics=P2^0; sbit spidi =P2^1; sbit spido =P2^2; sbit spiclk=P2^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; unsigned char read_1byte(void); void w
3、rite_1byte(unsigned char x); void Tx4b(UN a,b,c,d); void csf_spi(void); void MoRen_Color(UN ys);//设置默认字符颜色,ys高位0-7,低位0-7 void Cls_Main(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 Tx_arry(UN idata zf
4、c[]);//字符数组的显示 void Tx_nei_ma(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(U
5、N idata x);//内外频及扫描方式选择 /*说明: 0:PAL内频隔行 1:PAL内频逐行 2:PAL外频隔行 3:PAL外频逐行 4:NTSC内频隔行 5:NTSC内频逐行 6:NTSC外频隔行 7:NTSC外频逐行 */ void delay_ms(unsigned int nMs);//豪秒级的延时<65535ms,,延时函数读者可根据实际使用编写 //-------按指定颜色清屏0-7---------------- void Cls_Main(UN ys) {Tx4b(1,ys,0,0);} //------------------------
6、 void Neiwai_SaoMiao(UN idata x)//内外屏及扫描方式选择 {Tx4b(2,x,0,0);} //---------------------------------------- void HDP(UN idata x)////设定水平方向开始显示的位置x:0-63 {Tx4b(3,x,0,0);} //---------------------------------------- void VDP_P(UN idata x)//PAL方式下设定垂直方向开始显示的位置0-63 {Tx4b(4,x,0,0)
7、} //---------------------------------------- void VDP_N(UN idata x)//在PAL制式下按NTSC显示,设定扫描的起始垂直位置,范围从0—63 {Tx4b(5,x,0,0);} //-------字符大小,设置指定行的字符大小,size:大小,h:行号 void Size(UN size,h) {Tx4b(6,size,h,0);} //-------定位,设置要显示的起始位置-------------------- void Ding_Wei(UN H,L) {Tx4b(7,H,L,0);} //-----
8、 void Tx_nei_ma(UN idata nmH,nmL)//按字符内码显示1字符 {Tx4b(8,nmH,nmL,0);} //-------设置默认字符颜色-------------------- void MoRen_Color(UN ys) {Tx4b(9,ys,0,0);} ////行距设定0-15 void Hang_ju(UN idata x) {Tx4b(10,x,0,0);} //------------------------------ void Tx_arry(UN ida
9、ta zfc[])//字符数组的显示,ql501,ql502数组最大长度为120,ql503最大长度为240
{UN idata i,j;
j=strlen(zfc);//计算字符串长度
Tx4b(11,j,2,0xff);//开始发送J个字节的字符串
i=0xff;
do
{i++;write_1byte(zfc[i]);}//发送字符代码
while(i 10、//最后这两行
else{delay_ms(j/6);}
}
void Tx4b(UN a,b,c,d)//连续写4个字节--1个指令
{write_1byte(a);write_1byte(b);write_1byte(c);write_1byte(d);}
void csf_spi(void)//初始化SPI
{
spics=1;
spiclk=0;
}
void write_1byte(unsigned char x)//写1个字节
{ unsigned char i=0;
bm 11、x;
spics=0;
do
{spidi=bm0;
spiclk=1;
spiclk=0;
bm=bm>>1;
i++;}
while (i!=8);
spics=1;
}
unsigned char read_1byte(void)//读1个字节
{ unsigned char i=0;
spics=0;
do{bm=bm>>1;
spiclk=1;
bm7=spido;
spicl 12、k=0;i++;}
while(i<8);
spics=1;
return bm;
}
void delay_ms(unsigned int nMs)//毫秒延时<65535ms(12M晶振),读者可根据需要另行编写
{
unsigned int n=0;
TMOD=0x21;
TR0=1;
while(n 13、```````````````````````````````````````````````````````````````````````````````````````````````````````````
*/
#include 14、 code zfc0[]="强联科技";
UN code zfc1[]="视频字符 叠加技术";
UN code zfc2[]="强联单片机科技有限公司";
//============================================================================
//主程序
//============================================================================
void main(void)
{UN i,j,h;
csf_spi();//初始化SPI 15、
csf_main();//初始化叠加的默认值
MoRen_Color(0x06);//设置以下要显示的默认字符颜色(黄色背景,黑色字符)
Ding_Wei(5,2);//③定位,设置要显示的起始位置,//从第5行第2列开始显示
Size(1,5);//把第5行字符大小设为1号
//**********************************
//第①种显示方式
//**********************************
Tx_arry(zfc2);//送字符数组zfc2[]显示
//////////////////// 16、//////////////////////////////////////
//“房地产”的内码分别为:B7BF, B5D8, B2FA
Ding_Wei(6,2);//从第6行第2列开始显示
Size(3,6);//把第6行字符大小设为3号
//**********************************
//第②种显示方式
//**********************************
Tx_nei_ma(0xb7,0xBF);
Tx_nei_ma(0xb5,0xd8);
Tx_nei_ma(0xb2,0xfa);
17、
//最简单的显示直接利用函数Tx—arry()显示字符串;英文数字,空格等需用全角输入
Ding_Wei(1,2);//从第7行第2列开始显示
Size(0,1);//把第7行字符大小设为0号
MoRen_Color(0x72);
//**********************************
//第③种显示方式
//**********************************
Tx_arry("最简单的显示直接利最简单的显示直接利用函数Tx—arry()显示字符串空格等需用全角输入");
cls1h(7);
Din 18、g_Wei(8,2);//从第7行第2列开始显示
Tx_arry("最简单的显示直接利最简单");
while(1){;}//主循环
}
//==========================================================================
void csf_main(void)//初始化叠加的默认值
{UN idata i;
Neiwai_SaoMiao(0);//内外频及扫描方式选择,选择内频(即内同步)隔行扫描方式
HDP(3);//设定水平方向开始显示的位置x:0-63
VDP_P(28);//P 19、AL方式下设定垂直方向开始显示的位置0-63
//VDP_N(28);//在PAL制式下按NTSC格式显示,设定扫描的起始垂直位置,范围从0—63
Hang_ju(5);//行距设定为5
MoRen_Color(0x71);//设置默认字符颜色(蓝色背景,白色字符)
Cls_Main(1);//按蓝色清屏
delay_ms(1);//清屏后至少插入1ms的延时
i=1;do{ Size(1,i);i++;}while(i<13);//把12行字符大小全设为1号(2倍宽2倍高)
}
//----------------------------------------------------------------------------------
void cls1h(UN h)//清指定行
{Ding_Wei(h,1);
Tx_arry(" ");//公24个全角空格
}
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818