?? ql300spi.c.bak
字號:
/*視頻字符疊加模塊(器)spi接口測試程序(僅供參考)
本程序僅提供常用的基本功能,其它功能讀者請自行編寫
應(yīng)用產(chǎn)品:QL300A
編譯環(huán)環(huán)境: KEIL C
簡要說明:
本測試程序使用AT89S51,晶振11.0592MHZ
注:讀者如果使用更高運行速度請在指令結(jié)束插入適當(dāng)?shù)难訒r
*/
#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);//初始化疊加的默認(rèn)值
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//內(nèi)外頻及掃描方式選擇0-1
void hwy(UN h,l);//cm3//設(shè)定水平方向開始顯示的位置0-511
void vwy(UN h,l);//cm4 PAL方式下設(shè)定垂直方向開始顯示的位置0-511
void zfjj(UN x);//cm5
void size(UN x);//cm6//字符大小,設(shè)置指定行的字符大小,size:大小0-3
void Ding_Wei(UN H,L);//cm7 //定位,設(shè)置要顯示的起始位置H:行號1-16,L:列號1-35
//void Tx_arry(UN zfc[]);//字符數(shù)組的顯示
void Tx_nei_ma(UN nmH,nmL);//cm8//按字符內(nèi)碼顯示1字符,nmH:內(nèi)碼高字節(jié),nmL:內(nèi)碼低字節(jié)
void MoRen_Color(UN ys);//cm9//設(shè)置默認(rèn)字符顏色,ys高位0-7,低位0-7
void hj(UN x);//cm10//行距設(shè)定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,,延時函數(shù)讀者可根據(jù)實際使用編寫
//#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);//發(fā)清屏指令后延時
blinking(0);//不閃爍
hj(0);//設(shè)行距為0
hwy(0,10);//設(shè)水平位移
vwy(0,12);//設(shè)垂直位移
yy_ys(0);//設(shè)陰影顏色為黑色
yykg(2);//設(shè)強陰影
Ding_Wei(2,7);//定位,第2行第7列
disram(8);//調(diào)出顯示用戶自定義RAM的8個字符
Ding_Wei(3,9);//定位,第3行第9列
MoRen_Color(0x16);//改變默認(rèn)字符顏色為藍底黃字
disram(4);//調(diào)出顯示用戶自定義RAM的8個字符
MoRen_Color(0x17);//改變默認(rèn)字符顏色為藍底白字
Tx_nei_ma(0,0xa0);//按字符內(nèi)碼顯示1字符
Tx_nei_ma(0,0xa1);//按字符內(nèi)碼顯示1字符
Tx_nei_ma(0,0xa2);//按字符內(nèi)碼顯示1字符
Tx_nei_ma(0,0x02);//按字符內(nèi)碼顯示1字符
Tx_nei_ma(0,0x03);//按字符內(nèi)碼顯示1字符
yykg(0);////設(shè)為無陰影
Ding_Wei(4,2);//定位,第4行第2列
hj(2);//設(shè)行距為2
i=0;
while(i<15){Tx_nei_ma(0,0x11+i);i++;}//按字符內(nèi)碼循環(huán)顯示字符
Ding_Wei(5,2);//定位,第5行第2列
size(2);//設(shè)字符大小為2號字
zfjj(1);//設(shè)字間距為1
bk(2);//有背景顯示且框架陰影在底邊
MoRen_Color(0x27);//
i=0;
while(i<15){Tx_nei_ma(0,0x11+i);i++;}//按字符內(nèi)碼顯示字符
Ding_Wei(6,2);
size(3);
zfjj(3);
//bk(1);//有背景顯示且框架陰影在底邊
yykg(0);//設(shè)無陰影
MoRen_Color(0x60);
i=0;
while(i<8){Tx_nei_ma(0,0x11+i);i++;}//按字符內(nèi)碼顯示字符
bk(0);//有背景顯示且框架陰影在底邊
Ding_Wei(7,2);
MoRen_Color(0x17);
disram(8);
Ding_Wei(7,2);
blinking(1);//設(shè)閃爍
MoRen_Color(0x17);
disram(8);
wcode(zfc,5);//寫入1個用戶自定義字符點陣數(shù)據(jù)(96個字節(jié))到用戶RAM 5區(qū);
Ding_Wei(7,10);
size(3);
Tx_nei_ma(0,0xa0);//按字符內(nèi)碼顯示1字符
copy_f_r(15,6);//復(fù)制用戶FLASH 15區(qū)的點陣數(shù)據(jù)到指定的用戶RAM 6區(qū) 。
//---------------------------------------------------------
Ding_Wei(1,10);
lxfszf();//連續(xù)發(fā)送字符代碼顯示
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);//按字符內(nèi)碼顯示1字符
while(1){;}//主循環(huán)
}
//==========================================================================
void csf_main(void)//初始化疊加的默認(rèn)值
{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)//內(nèi)外屏及掃描方式選擇:x=0為內(nèi)同步;x=1為外同步
{Tx4b(2,x,0,0);}
//----------------------------------------
void hwy(UN h,l)////設(shè)定水平方向開始顯示的位置h:0-1;l:0-0xff
{Tx4b(3,h,l,0);}
//----------------------------------------
void vwy(UN h,l)//PAL方式下設(shè)定垂直方向開始顯示的位置h:0-1;l:0-0xff
{Tx4b(4,h,l,0);}
//----------------------------------------
void zfjj(UN x)//字符間距x:0-3
{Tx4b(5,x,0,0);}
//-------字符大小,設(shè)置指定行的字符大小,size=0-3:
void size(UN x)
{Tx4b(6,x,0,0);}
//-------定位,設(shè)置要顯示的起始位置--------------------
void Ding_Wei(UN H,L)
{Tx4b(7,H,L,0);}
//----------------------------------------
void Tx_nei_ma(UN nmH,nmL)//按字符內(nèi)碼顯示1字符
{Tx4b(8,nmH,nmL,0);}
//-------設(shè)置默認(rèn)字符顏色--------------------
void MoRen_Color(UN ys)
{Tx4b(9,ys,0,0);}
////行距設(shè)定0-7
void hj(UN x)
{Tx4b(10,x,0,0);}
//x=0-3;AT1=0無背景顯示,AT1=1有背景顯示但背景無框架,AT1=2有背景顯示且框架陰影在底邊,AT1=3有背景顯示且框架陰影在頂邊;默認(rèn)為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;默認(rèn)為1
void fxg(UN x)
{Tx4b(13,x,0,0);}
////0-2;0=無陰影;1=微陰影;2=強陰影;開關(guān)及顏色都在 行距函數(shù)里控制
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個用戶自定義字符點陣數(shù)據(jù)到指定的用戶RAM區(qū);sz[1]=0-7,第二個字節(jié)為用戶區(qū)號//
void wcode(UN idata zfc[],UN x)
{UN i;
Tx4b(17,x,0,0);
i=0xff;
do
{i++;write_1byte(zfc[i]);}//發(fā)送字符代碼
while(i<96-1);
delay_ms(3);
}
//復(fù)制1指定的FLASH區(qū)(0-15)的點陣數(shù)據(jù)到指定RAM區(qū) (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)//連續(xù)寫4個字節(jié)--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個字節(jié)
{ 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做定時計數(shù)器,循環(huán)采樣,直到達到定時值
{
TH0=0;
TL0=20;
while(TH0<4)
{;
}
n++;
}
TR0=0;
}
void delay(unsigned int x)
{do{x--;}
while(x!=0);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -