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

📄 mb9002.c

📁 楼宇对讲系统里用的文字信息接收。用可视对讲话机的TFT屏可看到从管理中心发过来的广播信息和本户的特发信息
💻 C
📖 第 1 页 / 共 2 页
字号:

/***********************************************************/
/*							                               */
/*                CPU:AT89c55   20MHZ                      */
/*                Copyright  2004.09  Comelit              */
/*                AUTHOR:  LV_XIAO_LU                      */
/*                                                         */
/***********************************************************/
/*  对于MB90092来说,行地址ROW = 0X00--0X0B ,列地址COW=0X00--0X17  */
/*************    VRAM address setting                  *************/
/*               bit7  bit 6  bit5  bit4  bit3  bit2  bit1  bit0     */
/*first byte       1    0      0      0     0    VSL   RA8   RA7     */
/*second byte      0   RA6    RA5    CA4   CA3   CA2   CA1   CA0     */
/*********************************************************************/
/*                   COMMAND1-1                                      */
/*               bit7  bit 6  bit5  bit4  bit3  bit2  bit1  bit0     */
/*first byte       1    0      0      1     1    MA    MB    AT      */
/*second byte      0    CG    CR     CB     MC   BG    BR    BB      */
/*                   COMMAND2-1                                      */
/*first byte       1    0      0      1     0    M9    M8    M7      */
/*second byte      0    M6     M5     M4    M3   M2    M1    M0      */
/*********************************************************************/

#include "reg52.h"
#include "typedef.h"
#include "define.h"
#include "variable.h"
#include "define.h"
#include "intrins.h"
#define byte unsigned char
/*该系统所用字体颜色为红色,且固定*/

sbit  IC_CS	=  P1^4;
sbit  IC_SLK = P1^3;
sbit  IC_SIN = P1^2;


	typedef	union{										// font data type
		          	unsigned int	wcode ;

					struct {
								unsigned	char	high ;
								unsigned	char	low ;
						   } scode ;
				  } TCODE ;

	 typedef struct{
	                   unsigned char row;
					   unsigned char col;
					   unsigned char size: 4 ;
					   unsigned char bc:   4 ;
					   unsigned char cc:   4 ;
					   unsigned char at:   1 ;
					   unsigned char dummy: 3 ;
					}DISP_ATTR;

     typedef struct{
	                unsigned char *str;         //待显示的字符串
                    DISP_ATTR str_attr;
					}ATTR;
 
void Turn_disp_off(void);
void Turn_disp_on(void);
void Vram_clear(void);
void Send_byte(byte I_data);
//void Delay(void);
void  Disp_color(byte row);
void Disp_num(byte row,byte col,unsigned int adr,byte size,byte bc,byte cc,byte at);

void  Init_mb9002_ic(byte bc);
void Turn_disp_off(void);
int	 Isascii2( int c ) ;
unsigned char* Disp_next_font(unsigned char *s);
unsigned char  *Disp_next_content(unsigned char *s) ;
unsigned int  Dfontadr( unsigned int font_code );
void Set_str_attr(byte x,byte y,byte size,byte bc,byte cc,byte at);
void Set_content_attr(byte x,byte y,byte size,byte bc,byte cc,byte at);
void Disp_content(unsigned char *pointer,byte x,byte y,byte size,byte bc,byte cc,byte at);
void Disp_str(unsigned char *pointer,byte x,byte y,byte size,byte bc,byte cc,byte at);

/*********************************************************/
/*********************************************************/

void Turn_disp_off(void)
{
		Send_byte(COMMAND_4+0x02);   //内同步,非隔行扫描,一般性的屏幕背景显示
  		Send_byte(0x2a);             /*区域控制:一般显示,显示颜色:彩色,放大控制:不放大*/
							         /*制式:PAL制,显示控制:使能显示输出 */
}	

/*********************************************************/
/*********************************************************/
void Turn_disp_on(void)
{
	Send_byte(COMMAND_4+0x02);   
    Send_byte(0x2b); 
}	

/*********************************************************/
/*********************************************************/
void Vram_clear(void)
{
   register unsigned char i,j;
   for(i=0;i<13;i++)	
		{
			for(j=0;j<24;j++)
   			{
   				Disp_num(i,j,0x00,3,0,0,0);
			
			}
		}
}
/*********************************************************/
/*********************************************************/


/*********************************************************/
/*    发送字节到90092  I_data:待发送的数                 */
/*********************************************************/
void Send_byte(byte I_data)
{
	register char i;
	IC_CS = 0;
	for(i=0;i<8;i++)
	{
		IC_SLK = 0 ;
		if(I_data&0x01)
           IC_SIN = 1;
		else
		   IC_SIN = 0; 

		I_data >>= 1;
		IC_SLK = 1;	
	}

	IC_CS = 1;
}

/**********************************************************/
/*  延时程序                                              */
/**********************************************************/
/*void Delay(void)
{
	byte i;
	for(i=0;i<0xff;i++)
	{
	  i++;
  	  i--;
	}
}*/
/**********************************************************/
/*                                                        */
/*	在屏幕上显示字符                                      */
/*	row:行地址                                            */
/*	col:列地址                                            */
/*	addr:要显示的字符的地址                               */
/*	flag:标志位,主要字符状态                              */
/**********************************************************/

void  Disp_color(byte row)
{
	register byte temp1,temp2;
	


    temp1=((row >> 2)&0x3)+0x84;
	temp2=((row<<5)&0x60)+1;
	
/* COMMAND0:VSL=1,CA0=1 */
	Send_byte(temp1);
	Send_byte(temp2);
/*  COMMAND1-3*/
	Send_byte(0x88);
	Send_byte(0x0);
/*  COMMAND2-3*/	
	Send_byte(0x90);
	Send_byte(0x0);
}


/***************************************************************/
/*vram row:行,vram col:列,addr:字体地址,size:尺寸,bc:背景颜色,*/
/*cc:前景颜色,at:特殊显示标记                                  */
/***************************************************************/

//void  Disp_num(byte row,byte col,int addr,byte size,byte bc,byte cc,byte ff)
//{
//	byte temp1,temp2,color;
	/* VRAM ADDRESS SET :COMMAND0 */
//	temp1=((row>>2)&0x3)+CAMMAND_0;     /* Get VRAM SET COMMAND0 :first byte   */
//	temp2=((row<<5)&0x60)+col;     /* Get VRAM SET COMMAND0 :second byte  */	
//	send_byte(temp1);   
//	send_byte(temp2);
	
	/* command 6 用于指定字体大小和行的位置 */
//	send_byte(COMMAND_6+size);/* command 6 */
//	send_byte(0x20+row);
	
//	if (singal==4)   
//	{
//		cc=7;
//		bc=0;
//	}

/*   command1-1   */
//	color=((cc<<4)&0x70)+bc;	
//	Send_byte(0x88+ff);
//	Send_byte(color);
	
/* command2-1 */
//	Send_byte(0x90+addr/128);
//	Send_byte(addr%128);
//}



/***************************************************************/
/*   at:特殊显示标记                                           */
/***************************************************************/
void  Disp_num(byte row,byte  col,unsigned int  adr,byte  size,byte  bc,byte  cc,byte  at)
{
   
	register byte  temp1,temp2,high_adr;
/* VRAM ADDRESS SET :COMMAND0 */
	temp1=((row >> 2)&0x3) + COMMAND_0 ;     /* Get VRAM SET COMMAND0 :first byte   */
	temp2=((row << 5)&0x60) + col ;          /* Get VRAM SET COMMAND0 :second byte  */	
	Send_byte(temp1);   
	Send_byte(temp2);
	
/* command 6 用于指定字体大小和行的位置 */
	Send_byte(COMMAND_6+size);/* command 6 */
	Send_byte(0x20+ row);
	

/*   command1-1   */

/* 先做如下地址变换: 
 将font->code_addr =  XX XX XX MC MB MA BIT9 BIT8 BIT7 BIT6 BIT5 BIG4 BIT3 BIT2 BIT1 BIT0
    ----> temp1 =                                  0     0    0    0   0    MC    MB   MA   
*/						 
    temp1=(unsigned char)(adr>>10);
    high_adr = temp1 & 0x03 ;
/*再做如下变换              BIT7  BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 */
/*	      将temp1    =       0     0    0    0    0     MC    MB   MA   
     ---->	high_adr =	     0     0    0    0    0     MA    MB   0  */

	if(high_adr == 1)
	   high_adr = 4;
	else if(high_adr == 3)
	   high_adr = 6;
	
	Send_byte(COMMAND_1+high_adr+at);
/*再做如下变换              BIT7  BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 */
/*	      将temp1    =       0     0    0    0    0     MC    MB   MA   
     ---->	high_adr =	     0     0    0    0    MC    0      0   0  */
 
    high_adr = (temp1<<1)&0x08 ; 
	Send_byte(cc+bc+high_adr);
	
/* command2-1 */

/* 先做如下地址变换: 
 将font->code_addr =  XX XX XX MC MB MA BIT9 BIT8 BIT7 BIT6 BIT5 BIG4 BIT3 BIT2 BIT1 BIT0
    ----> temp1 =                                  0     0    0    0   0   bit9 bit8 bit7   
*/	
    temp1=(unsigned char)(adr>>7)&0x07; 			
	Send_byte(COMMAND_2 + temp1);
/* 做如下地址变换: 
 将font->code_addr =  XX XX XX MC MB MA BIT9 BIT8 BIT7 BIT6 BIT5 BIG4 BIT3 BIT2 BIT1 BIT0
    ----> temp1 =                                  0   bit6 bit5 bit4 bit3 bit2 bit1 bit0      
*/	
	temp1=(unsigned char)(adr & 0x7f); 
	Send_byte(temp1);
}
/*************************************************/
/* bc 代表整屏的背景色                           */
/*************************************************/
void  Init_mb9002_ic(byte bc)
{
   unsigned char  i;
	IC_CS=0;
	_nop_();
//	Delay();
	IC_CS=1;
//	Delay();
    _nop_();
	IC_CS=0;
	_nop_();
//	Delay();
	IC_CS=1;
	_nop_();
//	Delay();

	IC_CS=0;
	_nop_();
//	Delay();
	IC_CS=1;
	_nop_();
//	Delay();

	IC_CS=0;
	_nop_();
//	Delay();
	IC_CS=1;

	/*--------command 3----------*/
	/*FIL 位,此命令可以不动 */
     	Send_byte(COMMAND_3);
        Send_byte(0);	
    /*--------command 5----------*/
  	/*;KID=0;APC与颜色无关;GYZ=0;W3--W0为行间距;10101 KID APC GYZ, 0 BH2 BH1 BH0 W3 W2 W1 W0*/

   //     Send_byte(COMMAND_5);
        Send_byte(0xaa);
        Send_byte(0x10);  //彩色相位控制:0 DEGREE,无行间距
        					
    /*--------command 7 ----------*///BD 
   	/*垂直位置设定*/
        Send_byte(COMMAND_7+0x04);
        Send_byte(0x2a);
  /*  10111 EC LP FO

⌨️ 快捷键说明

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