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

📄 main.c

📁 介绍一款监视器行业用的汉字字符叠加芯片 用于叠加汉字信息于摄像头采集的图像 文件中包括使用说明书,原理图及驱动程序
💻 C
字号:
/*-------------------MB90092  Demoboard  Program----------------------*/
/*
    本程序是针对富士通公司的字符芯片90092开发的演示板程序,
    处理器用89c935,Clock 为 10MHz,ANSI C.
*/

#include "test.h"

#define PUL0		IO_PUL0.byte



#define byte	unsigned char
byte flag1,flag2,m,n,flag,singal;
int	count;

/********************************/
/*
	程序名:send_byte()
	参  数:I_data
	返回值:无
	功  能:将I_data值送至MB90092	
*/
/********************************/
void send_byte(byte I_data)
{
	char i;
	unsigned short data;

	cs=0x00;
	for(i=0;i<8;i++)
	{
		slk=0x00;
		data = 0x01 & I_data;
		if(data == 0x00)
			sin = 0x00;
		else
			sin = 0x01;
		I_data=I_data >> 1;
		slk=0x01;	
	}

	cs=0x01;
}

/*------------------------------------------------*/

/*
  延时程序
*/
void delay(void)
{
	byte i;
	for(i=0;i<0xff;i++)
	{
		__asm("nop");
	}
}
/*------------------------------------------------*/

/*
	彩色初始化
*/
void  disp_color(byte row)
{
	byte temp1,temp2;
	
	temp1=row;
	temp1=((temp1>>2)&0x3)+0x84;
	temp2=row;
	temp2=((temp2<<5)&0x60)+1;
	
	send_byte(temp1);
	send_byte(temp2);

	send_byte(0x88);
	send_byte(0x0);
	
	send_byte(0x90);
	send_byte(0x0);
}

/* row:行,col:列,addr:地址,flag:尺寸,bc:背景颜色,cc:前景颜色,at:特殊显示标记*/
void  disp_num(byte row,byte col,int addr,byte flag,byte bc,byte cc,byte ff)
{
	byte temp1,temp2,color;
	
	temp1=row; 
	temp1=((temp1>>2)&0x3)+0x80;
	temp2=row;
	temp2=((temp2<<5)&0x60)+col;
	
	send_byte(temp1);/*command 0*/
	send_byte(temp2);
	
	send_byte(0xb0+flag);/*command 6*/
	send_byte(0x20+row);
	
	if (singal==4)   
	{
		cc=7;
		bc=0;
	}
	color=((cc<<4)&0x70)+bc;
	
	send_byte(0x88+ff);
	send_byte(color);/*command1-1*/
	

	send_byte(0x90+addr/128);/*command2-1*/
	send_byte(addr%128);
}

/*芯片初始化程序*/
void  init_ic(byte bc)
{
	byte   i,j;
	cs=0;
	delay();
	cs=1;
	delay();
	cs=0;
	delay();
	cs=1;
	delay();
	cs=0;
	delay();
	cs=1;
	delay();
	cs=0;
	delay();
	cs=1;
	
     	send_byte(0x98);/*--------command 3----------*/
        send_byte(0);	/*FIL 位,此命令可以不动 */
        	
        send_byte(0xaa);/*--------command 5----------*/
        send_byte(0x10);/*;KID=0;APC与颜色有关;GYZ=0;W3--W0为行间距;10101 KID APC GYZ0 BH2 BH1 BH0 W3 W2 W1 W0*/
        					
        	
        send_byte(0xbd);/*--------command 7 ----------*/
        send_byte(0x27);/*垂直位置设定
        					;10111 EC LP FO
        					;00 Y5 Y4 Y3 Y2 Y1 Y0
        					;EC:同步信号选择 EC=0 只用行同步信号 EC=1 行场共用
        					;LP:LP=0 正常操作
        					;LP=1    NTSC/PAL 格式
        					;FO:颜色信号输出控制
        					;Y5---Y0垂直位置设定*/

        send_byte(0xc4);/*--------command 8------------*/
        send_byte(0x02);/*水平位置设定*/
        
        send_byte(0xc8);/*--------command 9---------*/
        send_byte(0x00);
                	
        	
	/*------背景设置1-------*/
		
	send_byte(0xd1);/*--------command 10----------*/
        send_byte(0x38+bc);	/*1101000 RB
        					0 BK CC BC UC UG UR UB
        					RB:背影(solid-fill)选择
        					BK:闪烁;
        					CC:彩色/黑白选择
        					BC:背景颜色
        					UC:屏幕颜色
        					UG,UR,UB 颜色选择*/
       
       
	send_byte(0xa2+singal);/*-------command 4----------*/
  	send_byte(0x2b);
  						
  	for(i=0;i<12;i++)
        {
        	disp_color(i);
    	}
    	/*全屏清屏*/
    	for(j=0;j<13;j++)	
	{
		for(i=0;i<24;i++)
   		{
   			disp_num(j,i,62,0,bc,0,0);
		}
	}
	
	/*显示FUJITSU标记*/
	disp_num(0,20,0x10,0,1,0,0);
	disp_num(0,21,0x11,0,1,0,0);
	disp_num(0,22,0x12,0,1,0,0);
	disp_num(0,23,0x13,0,1,0,0);
	
	disp_num(1,20,0x20,0,1,0,0);
	disp_num(1,21,0x21,0,1,0,0);
	disp_num(1,22,0x22,0,1,0,0);
	disp_num(1,23,0x23,0,1,0,0);
	
}

/*键盘扫描程序*/
void	scan_key()
{
	if(	key1==0)
	{
		singal=0x04;
		send_byte(0xd1);
        	send_byte(0x7);
		while (key1==0)
		{
		}
	}
	if(	key2==0)
	{
		singal=0;
		send_byte(0xd1);
        	send_byte(0x38+7);
		while (key2==0)
		{
		}
	}
	
	if(	key3==0)
	{
		flag++;
		if (flag>5)  flag=0;
		init_ic(7);

		while (key3==0)
		{
		}
	}
	
}		
/*显示主屏*/
void disp_main()
{
	byte i;
	i=3;

	
  	
	send_byte(0xa2+singal);
	send_byte(0x29);
	
	disp_num(5,i,'M',2,1,1,0);
	disp_num(5,i+1,'B',2,1,1,0);
	disp_num(5,i+2,'9',2,1,1,0);
	disp_num(5,i+3,'0',2,1,1,0);
	disp_num(5,i+4,'0',2,1,1,0);
	disp_num(5,i+5,'9',2,1,1,0);
	disp_num(5,i+6,'2',2,1,1,0);
	
	disp_num(6,i+2,0xb0,2,2,2,0);
	disp_num(6,i+3,0xb1,2,2,2,0);
	disp_num(6,i+4,0xb2,2,2,2,0);
	disp_num(6,i+5,0xb3,2,2,2,0);
	
	
	for(i=0;i<100;i++)
  	{
		delay();
		scan_key();
	}
}
/*全屏显示*/
disp_all()
{
	byte i;
	send_byte(0xaa);/*--------command 5----------*/
    	send_byte(0x15);
	for (i=0;i<24;i++)
	 	disp_num(0,i,i%10,0,0,7,1);
	for (i=0;i<24;i++)
	 	disp_num(1,i,0x30+i%10,0,1,6,1);
	for (i=0;i<24;i++)
	 	disp_num(2,i,0x41+i,0,2,0,1);
	for (i=0;i<24;i++)
		disp_num(3,i,0x61+i,0,3,7,1);
	for (i=0;i<24;i++)
	 	disp_num(4,i,0xC0+i,0,7,1,1);
	for (i=0;i<24;i++)
	 	disp_num(5,i,0xE0+i,0,5,1,1);
	for (i=0;i<24;i++)
	 	disp_num(6,i,0x100+i,0,6,1,1);
	for (i=0;i<24;i++)
		disp_num(7,i,0x120+i,0,7,0,1);
	for (i=0;i<18;i++)
	 	disp_num(8,i+3,0x162+i,0,0,7,1);
	for (i=0;i<18;i++)
	 	disp_num(9,i+3,0x180+i,0,i%7+1,0,1);
    	for (i=0;i<18;i++)
	 	disp_num(10,i+3,0x180+i,0,7,0,1);
	
	i=5;
	disp_num(11,i+1,'0',0,7,1,1);
	disp_num(11,i+2,'2',0,7,2,1);
	disp_num(11,i+3,'1',0,7,3,1);
	disp_num(11,i+4,0xa,0,7,4,1);
	disp_num(11,i+5,'6',0,7,5,1);
	disp_num(11,i+6,'3',0,7,6,1);
	disp_num(11,i+7,'3',0,7,1,1);
 	disp_num(11,i+8,'5',0,7,2,1);
 	disp_num(11,i+9,'1',0,7,3,1);
 	disp_num(11,i+10,'5',0,7,4,1);
 	disp_num(11,i+11,'9',0,7,5,1);
 	disp_num(11,i+12,'6',0,7,6,1);
 	send_byte(0xa2+singal);
  	send_byte(0x2b);
	
}

/*各种尺寸显示*/
disp_dh()
{
	yte i;
	disp_num(1,0,0xb4,7,7,0,0);
	disp_num(1,1,0xb5,7,7,0,0);
	disp_num(1,2,0xb6,7,7,0,0);
	disp_num(1,3,0xb7,7,7,0,0);
	disp_num(1,4,':', 7,7,0,0);
	
	
	for(i=0;i<7;i++)
		disp_num(4,8+i,0x1C0+i,7,1,i%7,0);
	for(i=0;i<7;i++)
		disp_num(6,2+i,0x1C0+i,2,1,i%7,0);
	for(i=0;i<3;i++)
		disp_num(8,i+1,0x1C0+i,3,1,i%7,0);

	send_byte(0xa2+singal);
  	send_byte(0x2b);	
}

/*显示计数器*/
disp_count()
{
	byte i;
  	
	disp_num(2,0,0xBA,7,0,0,0);
	disp_num(2,1,0xBB,7,0,0,0);
	disp_num(2,2,0xBC,7,0,0,0);
	disp_num(2,3,':', 7,0,0,0);
	
	count++;
	disp_num(5,4,count/10000,2,0,0,0);
	disp_num(5,5,(count%10000)/1000,2,1,1,0);
	disp_num(5,6,(count%1000)/100,2,2,2,0);
	disp_num(5,7,(count%100)/10,2,3,3,0);
	disp_num(5,8,(count%10),2,4,4,0);
	
	send_byte(0xa2+singal);
  	send_byte(0x29);
  	
  	for(i=0;i<30;i++)
  	{
		delay();
		scan_key();
	}
}

/*显示动画*/
void disp_picture()
{
	byte i;
	
	disp_num(2,0,0xB8,7,0,0,0);
	disp_num(2,1,0xB9,7,0,0,0);
	disp_num(2,2,':',7,0,0,0);
	
	n++;
	m=n%6;
	disp_num(5,4,0x140,2,m,m,0);
	disp_num(5,7,0x143,2,m,m,0);

	disp_num(6,4,0x150,2,m,m,0);
	disp_num(6,7,0x153,2,m,m,0);
	


	disp_num(5,5,0x141,2,m,m,0);
	disp_num(5,6,0x142,2,m,m,0);
	disp_num(6,5,0x151,2,m,m,0);
	disp_num(6,6,0x152,2,m,m,0);
		
	for(i=0;i<120;i++)
	{
		delay();
		scan_key();
	}
	disp_num(5,5,0x144,2,m,m,0);
	disp_num(5,6,0x145,2,m,m,0);
	disp_num(6,5,0x154,2,m,m,0);
	disp_num(6,6,0x155,2,m,m,0);
		
	for(i=0;i<180;i++)
	{
		delay();
		scan_key();
	}
	disp_num(5,5,0x146,2,m,m,0);
	disp_num(5,6,0x147,2,m,m,0);
	disp_num(6,5,0x156,2,m,m,0);
	disp_num(6,6,0x157,2,m,m,0);
	for(i=0;i<180;i++)
	{
		delay();
		scan_key();
	}
	disp_num(5,5,0x144,2,m,m,0);
	disp_num(5,6,0x145,2,m,m,0);
	disp_num(6,5,0x154,2,m,m,0);
	disp_num(6,6,0x155,2,m,m,0);
		
	for(i=0;i<180;i++)
	{
		delay();
		scan_key();
	}
	
	send_byte(0xa2+singal);
  	send_byte(0x2b);
	
}

/*图片显示*/
disp_pic()
{
	disp_num(2,0,0xAB,7,0,0,0);
	disp_num(2,1,0xAC,7,0,0,0);
	disp_num(2,2,':',7,0,0,0);
	
	disp_num(0,9,0x8b,2,2,2,0);
	disp_num(0,10,0x8c,2,2,2,0);
	disp_num(0,11,0x8d,2,2,2,0);
	
	disp_num(1,9,0x9b,2,2,2,0);
	disp_num(1,10,0x9c,2,2,2,0);
	disp_num(1,11,0x9d,2,2,2,0);
	
	
	disp_num(5,4,0x149,2,2,2,0);
	disp_num(5,5,0x14a,2,2,2,0);
	disp_num(5,6,0x14b,2,2,2,0);
	disp_num(5,7,0x14c,2,2,2,0);

	disp_num(6,4,0x159,2,2,2,0);
	disp_num(6,5,0x15a,2,2,2,0);
	disp_num(6,6,0x15b,2,2,2,0);
	disp_num(6,7,0x15c,2,2,2,0);
	
	send_byte(0xa2+singal);
  	send_byte(0x2b);
}



main()
{
	count=0;
	IO_DDR0=0x0F;
	singal=0;	
	init_ic(7);
	
	while(1)
	{
		scan_key();
		switch(flag)
		{
			case	0:
				disp_main();
				break;
			case	1:
				disp_all();
				break;
			case	2:
				disp_dh();
				break;
			case	3:
				disp_count();
				break;
			case	4:
				disp_pic();
				break;
			case	5:
				disp_picture();
				break;
			default:
				flag=0;
		}
		
	}

}
/*Program End!*/

⌨️ 快捷键说明

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