我现在想用富士通的视频叠加MB90092芯片子屏显示功能,主屏可以正常显示。
子屏显示的字符为一段乱码,代码如下:
void MB90092_DisChar (UCHAR x,UCHAR y,int addr,UCHAR mul,UCHAR bc,UCHAR cc,UCHAR ff)
{
UCHAR temp1,temp2,color;
if (x>0x17||y>0x0B) return; //invalid col number or row number
temp1=((y>>2)&0x3)+0x80;
temp2=((y<<5)&0x60)+x;
MB90092_WriteByte(temp1); //command 0,设置写入地址,行和列
MB90092_WriteByte(temp2);
MB90092_WriteByte(0xB0|mul); //command 6,mul->字符尺寸控制(datasheel82),设置一整行
MB90092_WriteByte(0x20|y);
if (synchronization==SYN_EXTERNAL){ //外控制显示
cc=7;
bc=0;
}
color=((cc<<4)&0x70)|bc;
MB90092_WriteByte(0x88|ff); //ff控制是否特显
MB90092_WriteByte(color); //command1-1,设置字符颜色,背景颜色
MB90092_WriteByte(0x90+addr/128); //command2-1,设置字符点阵在外rom的地址
MB90092_WriteByte(addr%128);
}
//主屏字符
void MB90092_DisSub(UCHAR y,int addr, UCHAR bc, UCHAR cc,UCHAR ff)
{ UCHAR temp3,temp4,color;
if(y>0x0b) return;
temp3=((y>>2)&0x3)+0x84;
temp4=((y<<5)&0x60);
MB90092_WriteByte(temp3);
MB90092_WriteByte(temp4);
// MB90092_WriteByte(0xB0|mul); //command 6,mul->字符尺寸控制(datasheel82),设置一整行
// MB90092_WriteByte(0x20|y);
if (synchronization==SYN_EXTERNAL){
cc=7;
bc=0;
}
color=0x02;
MB90092_WriteByte(0xDf); //command 11子屏控制
MB90092_WriteByte(0x00);
MB90092_WriteByte(0xE1);
MB90092_WriteByte(0x10) ; //command 12子屏起始位
MB90092_WriteByte(0xE9);
MB90092_WriteByte(0x50); //command 13子屏起始位
MB90092_WriteByte(0x88|ff); //ff控制是否特显
MB90092_WriteByte(color); //command1-1,设置字符颜色,背景颜色
MB90092_WriteByte(0x90+addr/128); //command2-1,设置字符点阵在外rom的地址
MB90092_WriteByte(addr%128);
}//子屏字符
void Screen_Init (UCHAR bc)
{
UCHAR i;
CS=0;
Delay_ms(10); //程序开始时,要输入CS四次去清除上电复位,然后所作的设置才是有效的。
CS=1;
Delay_ms(10);
CS=0;
Delay_ms(10);
CS=1;
Delay_ms(10);
CS=0;
Delay_ms(10);
CS=1;
Delay_ms(10);
CS=0;
Delay_ms(10);
CS=1;
Delay_ms(10);
MB90092_WriteByte(0xA0); //command 4,首先选择内同步
MB90092_WriteByte(0x00);
MB90092_WriteByte(0xAD); //command 5