📄 mb9002.c
字号:
/***********************************************************/
/* */
/* 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 + -