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

📄 spi.txt

📁 视频字符叠加器模块SPI接口c51公共函数(包含文件)
💻 TXT
字号:
视频字符叠加器模块SPI接口c51公共函数(包含文件)
*********************************************************/
#define UN  unsigned char
//定义SPI引脚,读者可根据实际使用修改
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  write_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 zfc[]);//字符数组的显示
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(UN 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);}
//---------------------------------------------
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);}

//----------------------------------------
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);}

//----------------------------------------
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 idata 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<j-1);
     if(j/6==0){delay_ms(1);}//3个字符约延时1MS,此延时也可放在本函数之后处理,需删掉

                      //最后这两行
    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=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;
        spiclk=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<nMs)////利用T0做定时计数器,循环采样,直到达到定时值
 {
  TH0=0;
  TL0=20;
  while(TH0<4)
  {;
  }
  n++;
 }
 TR0=0;
}

⌨️ 快捷键说明

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