|
字符芯片D6453驅(qū)動程序,采用stc12c芯片來驅(qū)動的.
單片機(jī)源程序如下:
- /****************OSD顯示模塊********************/
- #include "STC12C5Ax.h"
- #include "main.h"
- sbit MCLK = P1^1;
- sbit MCS = P1^2;
- sbit MDATA = P1^3;
- /************送一個字節(jié)到OSD************/
- void OsdICSendOneByte(uchar osdbyte)
- {
- uchar i;
- uchar j;
-
- //EA=0;
- MCS=0;
- MDATA=1;
- MCLK=0;
- for(i = 0; i < 8; i++)
- {
- if((osdbyte & 0x80)>0)
- {
- MCLK=0;
- MDATA=1;
- j++;
- j++;
- j++;
- j++;
- j++;
- MCLK=1;
- }
- else
- {
- MCLK=0;
- MDATA=0;
- j++;
- j++;
- j++;
- j++;
- j++;
- MCLK=1;
- }
- osdbyte = osdbyte<<1;
- }
- j = 150;
- while((--j) > 0);
- MCS=1;
- //EA=1;
- }
- /************送一個字到OSD************/
- void OsdICSendTwoByte(int osdword)
- {
- uchar i;
- uchar j;
-
- MCS=0;
- MDATA=1;
- MCLK=0;
- for(i = 0;i < 8; i++)
- {
- if((osdword & 0x8000)>0)
- {
- MCLK=0;
- MDATA=1;
- j++;
- j++;
- j++;
- j++;
- j++;
- MCLK=1;
- }
- else
- {
- MCLK=0;
- MDATA=0;
- j++;
- j++;
- j++;
- j++;
- j++;
- MCLK=1;
- }
- osdword = osdword<<1;
- }
- j = 150;
- while((--j) > 0);
-
- for(i = 0;i < 8; i++)
- {
- if((osdword & 0x8000)>0)
- {
- MCLK=0;
- MDATA=1;
- j++;
- j++;
- j++;
- j++;
- j++;
- MCLK=1;
- }
- else
- {
- MCLK=0;
- MDATA=0;
- j++;
- j++;
- j++;
- j++;
- j++;
- MCLK=1;
- }
- osdword = osdword<<1;
- }
- j = 150;
- while((--j) > 0);
- MCS=1;
- }
- /*****************清屏********************/
- void OsdICInitRam(void)
- {
- OsdICSendOneByte(0x34); //Video Ram Clear (0x34);
- delay(300);
- }
- /***************字符顯示開*******************/
- void OsdICDisEn(uchar blink)
- {
- //0001,D0,LC,BL1,BL0---BL1BL0:00-off,01-2Hz,10-1Hz,11-0.5Hz
- OsdICSendOneByte(0x0c | (blink & 0x03)); //字符顯示開、震蕩開、閃爍1HZ
- }
- /**************字符背景顏色*****************/
- void OsdICDisBackColor(void)
- {
- //0011,0BS1BS00--BS1,BS0:0-NO,1-BlackFraming,2-BlackOnWhite,3-BlackFilling
- OsdICSendOneByte(0x41); //沒有背景、邊框開
- OsdICSendOneByte(0x10); //黑色邊框
- }
- /***************清屏初始化*****************/
- void OsdInitDis(void)
- {
- OsdICInitRam(); //視頻RAM清零
- OsdICDisEn(0x02); //字符顯示開、震蕩開、閃爍1HZ
- OsdICDisBackColor(); //字符背景顏色
- //OsdICSendOneByte(0x32); //字符上下拉長
- }
- /************字符顯示屏幕位置控制 32*32*************/
- void OsdICScreenPos(uchar col,uchar Line)
- {
- //1000,00V4V3,V2V1V0H4,H3H2H1H0
- uint temp;
-
- temp =col;
- temp <<=5;
- temp |=Line;
- temp |=0x8000;
- OsdICSendTwoByte(temp);//0x80e8);
- }
- /************字符顯示VRAM位置控制 12*24*************/
- void OsdCharDisPos(uchar Line,uchar col)
- {
- //1000,100AR3,AR2AR1AR0AC4,AC3AC2AC1AC0
- uint temp;
-
- temp =Line;
- temp <<=5;
- temp |=col;
- temp |=0x8400;
-
- OsdICSendTwoByte(temp);
- OsdCurPosOpt.line=Line;
- OsdCurPosOpt.col=col;
- }
- /***************字符顯示顏色控制*************/
- void OsdCharDis(uchar bl,uchar character)
- {
- //1100,R G B BL,C7C6C5C4,C3C2C1C0--BL:1-Blink RGB:0-Black 1-Blue 2-Green 3-Cyan 4-Red 5-Magenta 6-Yellow 7-White
-
- uint temp;
- uint temp1;
-
- temp=RGB_Color;
- temp<<=9;
-
- temp1=bl; //1為閃爍,0為不閃
- temp1<<=8;
-
- temp=temp | temp1 | character;
-
- temp |=0xC000;
-
- OsdICSendTwoByte(temp);
-
- }
- /*****************寫字符RAM地址****************/
- void OsdRamAddress(uchar RW,uchar RL)
- {
- //1000 011 RW3RW2RW1RW0 RL4RL3RL2RL1RL0
-
- uint temp;
-
- temp=RW;
- temp<<=5;
- temp|=RL;
- temp|=0x8600;
-
- OsdICSendTwoByte(temp);
-
- }
- /************寫字符RAM18行某行的數(shù)據(jù)*************/
- void OsdRamData(uint Character)
- {
- //1001 CR11CR10CR9CR8CR7CR6CR5CR4CR3CR2CR1CR0
- uint temp;
-
- temp=Character;
- temp|=0x9000;
-
- OsdICSendTwoByte(temp);
- }
- /************寫一個漢字的點(diǎn)陣數(shù)據(jù)到CRAM*************/
- void OsdRamCharacter(uint CharacterBuf[18])
- {
- uchar i;
-
- OsdRamData(0);
- for(i=0;i<17;i++)
- OsdRamData(CharacterBuf[i]);
-
- }
- /************寫等待界面點(diǎn)陣數(shù)據(jù)到RAM*************/
- void OsdWaitRam(void)
- {
- uchar i,x;
- uchar j;
- uint xdata CharacterBuf[18];
-
- OsdRamAddress(0,0);
-
- for(i=0;i<5;i++)
- {
- for(j=0;j<18;j++)
- {
- x=HZKTab[i][j*2];
- CharacterBuf[j]=x*256+HZKTab[i][j*2+1];
- }
- OsdRamCharacter(CharacterBuf);
- }
- }
- /************寫系統(tǒng)配置界面點(diǎn)陣數(shù)據(jù)到RAM*************/
- void OsdInfoRam(void)
- {
- uchar i,x;
- uchar j;
- uint CharacterBuf[18];
-
- OsdRamAddress(0,0);
-
- for(i=8;i<23;i++)
- {
- for(j=0;j<18;j++)
- {
- x=HZKTab[i][j*2];
- CharacterBuf[j]=x*256+HZKTab[i][j*2+1];
- }
- OsdRamCharacter(CharacterBuf);
- }
- }
- /************寫調(diào)預(yù)置位界面點(diǎn)陣數(shù)據(jù)到RAM1*************
- void OsdCallPresetRam(void)
- {
- uchar i,x;
- uchar j;
- uint xdata CharacterBuf[18];
-
- OsdRamAddress(0,0);
-
- for(i=0;i<11;i++)
- {
- for(j=0;j<18;j++)
- {
- x=HZKTab[TabCallPresetRam[i]][j*2];
- CharacterBuf[j]=x*256+HZKTab[TabCallPresetRam[i]][j*2+1];
- }
- OsdRamCharacter(CharacterBuf);
- }
- }
- /*************************************/
- void Osd3BitDis(uchar num)
- {
- uchar temp;
-
- temp=num%100;
- OsdCharDis(0,num/100);
- OsdCharDis(0,temp/10);
- OsdCharDis(0,temp%10);
- }
- /************寫主菜單界面點(diǎn)陣數(shù)據(jù)到RAM*************/
- void OsdMainMenuRam(void)
- {
- uchar i,x;
- uchar j;
- uint CharacterBuf[18];
-
- OsdRamAddress(0,0);
-
- for(i=0;i<16;i++)
- {
- for(j=0;j<18;j++)
- {
- x=HZKTab[TabMainMenuRam[i]][j*2];
- CharacterBuf[j]=x*256+HZKTab[TabMainMenuRam[i]][j*2+1];
- }
- OsdRamCharacter(CharacterBuf);
- }
- }
- /************寫各級菜單界面點(diǎn)陣數(shù)據(jù)到RAM2*************/
- void OsdWhriteRam(uchar num,uchar TabRam[])
- {
- uchar i,x;
- uchar j;
- uint CharacterBuf[18];
-
- OsdRamAddress(0,0);
-
- for(i=0;i<num;i++)
- {
- for(j=0;j<18;j++)
- {
- x=HZKTab[TabRam[i]][j*2];
- CharacterBuf[j]=x*256+HZKTab[TabRam[i]][j*2+1];
- }
- OsdRamCharacter(CharacterBuf);
- }
- }
- /*****************系統(tǒng)自檢顯示********************/
- void OsdPowWait(void)
- {
- uchar i;
- OsdInitDis(); //清屏初始化
- delay(600);
- switch(OsdKeyOpt.Language)
- {
- case 0:
- OsdWaitRam(); //寫等待界面點(diǎn)陣數(shù)據(jù)到Ram
- OsdICScreenPos(6,6); //屏幕位置
- delay(60);
- OsdCharDisPos(5,4); //字符位置
-
- for(i = 0;i < 15;i++)
- {
- OsdCharDis(0,OSDWAIT_TAB[i]); //在屏幕顯示“系統(tǒng)自檢中”
- }
- break;
- case 1:
- OsdICScreenPos(6,6); //屏幕位置
- delay(60);
- OsdCharDisPos(5,4); //字符位置
-
- for(i = 0;i < 15;i++)
- {
- OsdCharDis(0,ENOSDWAIT_TAB[i]); //在屏幕顯示“系統(tǒng)自檢中”
- }
- break;
- default: break;
- }
- delay(600);
- }
- /**************顯示初始化信息*****************/
- void OsdInforDis(void)
- {
- uchar j;
-
- OsdInitDis(); //初始化
- delay(200);
- switch(OsdKeyOpt.Language)
- {
- case 0:
- OsdInfoRam(); //寫系統(tǒng)配置點(diǎn)陣到RAM
-
- OsdICScreenPos(6,6); //屏幕位置
- delay(20);
- OsdCharDisPos(2,2);
- for(j=0;j<15;j++)
- {
- OsdCharDis(0,OSDCAMERAID[j]);
- }
- if(DipSwOpt.Softcamid == 0)Osd3BitDis(DipSwOpt.camid);
- else Osd3BitDis(DipSwOpt.Softcamid);
- OsdCharDisPos(4,2);
- for(j=0;j<10;j++)
- {
- OsdCharDis(0,OSDBAUDRATE[j]);
- }
-
- for(j=0;j<8;j++)
- {
- OsdCharDis(0,OSDBAUDRATE_VALUE[DipSwOpt.baudrat][j]);
- }
-
- OsdCharDisPos(6,2);
- for(j = 0; j < 9; j++)
- {
- OsdCharDis(0,OSDPROTOCOL[j]);
- }
-
- for(j = 0; j < 9; j++)
- {
- OsdCharDis(0,OSDPROTOCOL_VALUE[j]);
- }
-
- OsdCharDisPos(8,2);
- for(j=0;j<18;j++)
- {
- OsdCharDis(0,OSDVER[j]);
- }
- break;
- case 1:
- OsdICScreenPos(6,6); //屏幕位置
- delay(20);
- OsdCharDisPos(2,2);
- for(j=0;j<15;j++)
- {
- OsdCharDis(0,ENOSDCAMERAID[j]);
- }
- if(DipSwOpt.Softcamid == 0)Osd3BitDis(DipSwOpt.camid);
- else Osd3BitDis(DipSwOpt.Softcamid);
- OsdCharDisPos(4,2);
- for(j=0;j<10;j++)
- {
- OsdCharDis(0,ENOSDBAUDRATE[j]);
- }
-
- for(j=0;j<8;j++)
- {
- OsdCharDis(0,OSDBAUDRATE_VALUE[DipSwOpt.baudrat][j]);
- }
-
- OsdCharDisPos(6,2);
- for(j = 0; j < 18; j++)
- {
- OsdCharDis(0,ENOSDPROTOCOL[j]);
- }
- OsdCharDisPos(8,2);
- for(j=0;j<18;j++)
- {
- OsdCharDis(0,ENOSDVER[j]);
- }
- break;
- default: break;
- }
- OsdMenuOpt.inforflag = 1;
- OsdMenuOpt.enterflag = 0;
- OsdMenuOpt.osdflag= 1;
- OsdMenuOpt.swflag = 0;
- OsdMenuOpt.ymstat=0; //頁面指針指向第一頁
- OsdMenuOpt.gbstat=0; //光標(biāo)指針指向第一行
- TimeOpt.displaytime=0; //置位清屏?xí)r間
- OsdKeyOpt.AngleFlag=1; //角度顯示標(biāo)志
- }
復(fù)制代碼
|
|