📄 fun_16.c
字号:
/******************************Copyright (c)*********************************
** 文件说明
**---------------------------------------------------------------------------
**文 件 名: fun_16.c
**创 建 人: 杨宏伟
**修 改 人: 杨宏伟
**创 建 日 期:2003年10月19日
**最后修改日期: 2004年10月22日
**描 述: FOR HD66773,FOR ARM LPC2100
** 软件模拟8080时序,并行,8位数据传输接口
****************************************************************************/
#include "config.h"
extern uint8 G_CurrContrastValue; // 全局变量,设置对比度值
extern void delay(uint32 dly);
/****************************************************************************
** 函数实现
*****************************************************************************/
/*===========================================================================
** 函数名称: data_out()
** 功能描述: 输出数据,并行,软件模拟8080
============================================================================*/
void data_out(uint8 i)
{
// interface 8080
IO0CLR = 0x000000FF;
IO1CLR = CS1;
IO1SET = DC1;
IO1SET = RD1;
IO1CLR = WR1;
IO0SET = i;
IO1SET = WR1;
IO1SET = CS1;
}
/*===========================================================================
** 函数名称: comm_out()
** 功能描述: 输出指令,并行,软件模拟8080
============================================================================*/
void comm_out(uint8 i)
{
// interface 8080
IO0CLR = 0x000000FF;
IO1CLR = CS1;
IO1CLR = DC1;
IO1SET = RD1;
IO1CLR = WR1;
IO0SET = i;
IO1SET = WR1;
IO1CLR = WR1;
IO0SET = i;
IO1SET = WR1;
IO1SET = CS1;
}
void InitialFunction1(void)
{
comm_out(0x00); //R00H,Start Oscillation
data_out(0x00);
data_out(0x01);
comm_out(0x01); //R01H,Driver Output Control
data_out(0x01);
data_out(0x15);
comm_out(0x02); //R02H,LCD-Driving-Waveform Control
data_out(0x07);
data_out(0x00);
comm_out(0x05); //R05H,Entry Mode
data_out(0x12);
data_out(0x30);
comm_out(0x06); //R06H,Compare Register
data_out(0x00);
data_out(0x00);
comm_out(0x0B); //R0BH,Frame Cycle Control
data_out(0x00);
data_out(0x08);
}
void InitialFunction2(void)
{
//R30H ~ R37H,R3AH,R3BH
comm_out(0x30); //Gamma Control
data_out(0x07);
data_out(0x00);
comm_out(0x31);
data_out(0x00);
data_out(0X07);
comm_out(0x32);
data_out(0x00);
data_out(0x00);
comm_out(0x33);
data_out(0x01);
data_out(0x00);
comm_out(0x34);
data_out(0x07);
data_out(0x07);
comm_out(0x35);
data_out(0x00);
data_out(0x07);
comm_out(0x36);
data_out(0x07);
data_out(0x07);
comm_out(0x37);
data_out(0x00);
data_out(0x01);
comm_out(0x3B);
data_out(0x18);
data_out(0x00);
comm_out(0x3A);
data_out(0x00);
data_out(0x07);
comm_out(0x0F); //R0FH,Gate Scan Position
data_out(0x00);
data_out(0x00);
comm_out(0x11); //R11H,Vertical Scroll Control
data_out(0x00);
data_out(0xa0);
comm_out(0x14); //R14H,First display drive position
data_out(0x9F);
data_out(0x00);//5c00
comm_out(0x15); //R15H,Second display drive position
data_out(0x9F);
data_out(0x5d);//a05d
comm_out(0x16); //R16H,Horizontal RAM Address Position
data_out(0x7F);
data_out(0x00);//0x7F00
comm_out(0x17); //R17H,Vertical RAM Address Position
data_out(0x9F);
data_out(0x00);//0xa000
}
void PowerSettingFunction1(void)
{
comm_out(0x07); //R07H,Display Control
data_out(0x00);
data_out(0x02);
comm_out(0x0D); //R0D,Power Control 4
data_out(0x04);
data_out(0x01);
comm_out(0x0E); //R0E,Power Control 5
data_out(0x0d);//0x0d
data_out(0x18);//0x18
}
void PowerSettingFunction2(void)
{
comm_out(0x0c); //R0CH,Power Control 3
data_out(0x00); //0x00
data_out(0x03); //0x03
comm_out(0x03); //R03H,Power Control 1
data_out(0x00); //0x00
data_out(0x14); //0x14
comm_out(0x04); //R04H,Power Control 2
data_out(0x80); //0x80
data_out(0x00); //0x00
delay(50);
comm_out(0x0E); //R0EH,Power Control 5
data_out(0x29); //0x29
data_out(0x10); //0x10
delay(50);
comm_out(0x0D); //R0DH,Power Control 4
data_out(0x09);//0x09
data_out(0x18);//0x18
}
void DisplayOffFunction(void)
{
comm_out(0x07); //R07H,Display Control
data_out(0x00);
data_out(0x05);
delay(50);
comm_out(0x07);
data_out(0x00);
data_out(0x27);
delay(50);
comm_out(0x07);
data_out(0x00);
data_out(0x37);
comm_out(0x03);
data_out(0x07);
data_out(0xfc);
}
void DisplayOnFunction(void)
{
comm_out(0x07); //R07H,Display Control
data_out(0x00);
data_out(0x05);
delay(50);
comm_out(0x07);
data_out(0x00);
data_out(0x25);
comm_out(0x07);
data_out(0x00);
data_out(0x27);
delay(50);
comm_out(0x07);
data_out(0x00);
data_out(0x37);
comm_out(0x21); //R21H,RAM Address Set
data_out(0x00);
data_out(0x00);//0x0000
comm_out(0x22); //R22H,Write Data to GRAM
}
/*===========================================================================
** 函数名称: ini_lcd()
** 功能描述: 实现对LCD的初始化操作
============================================================================*/
void ini_lcd(void)
{
PowerSettingFunction1();
delay(50);
InitialFunction1();
delay(50);
PowerSettingFunction2();
delay(50);
InitialFunction2();
delay(50);
DisplayOnFunction();
}
/*===========================================================================
** 函数名称: selectSeries()
** 功能描述: 时序选择,0-8080,1-6800
============================================================================*/
void selectSeries(uint8 i)
{
//SELECT SERIES
switch(i)
{
case 0:
//SELECT 8080
IO1SET = RD1;
IO1SET = WR1;
break;
case 1:
//SELECT 6800
IO1CLR = RD1;
IO1CLR = WR1;
break;
default:
;
}
}
void dispColor(uint16 row,uint16 col,uint8 rgb1,uint8 rgb2,uint16 dly)
{
uint16 i,j;
comm_out(0x21);
data_out(0x00);
data_out(0x00);
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
comm_out(0x22);
data_out(rgb1 );
data_out(rgb2);
// delay(dly);
}
}
}
void dispPic(uint16 row,uint16 col,const uint8 *picture)
{
uint16 i,j;
//uint16 temp1,temp2;
comm_out(0x21);
data_out(0x00);
data_out(0x00);
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
//temp1 = *picture;
//temp2 = *(++picture);
//data_out( ((temp1<<8)&(0xff00))|((temp2)&(0xff)) );
//picture ++;
comm_out(0x22);
data_out(*picture);
data_out(*(picture+1));
picture=picture+2;
}
}
}
/*===========================================================================
** 函数名称: dispColorY()
** 功能描述: 显示垂直色条(4种颜色)
============================================================================*/
void dispColorY(uint16 row, uint16 col,
uint16 rgbA1,uint16 rgbA2,
uint16 rgbB1,uint16 rgbB2,
uint16 rgbC1,uint16 rgbC2,
uint16 rgbD1,uint16 rgbD2,
uint16 rgbE1,uint16 rgbE2,
uint16 rgbF1,uint16 rgbF2,
uint16 rgbG1,uint16 rgbG2,
uint16 rgbH1,uint16 rgbH2
)
{
uint16 i,j,k;
k=col/8;
for(i=0;i<row;i++)
{
for(j=0;j<k;j++)
{
data_out(rgbA1);
data_out(rgbA2);
}
for(j=0;j<k;j++)
{
data_out(rgbB1);
data_out(rgbB2);
}
for(j=0;j<k;j++)
{
data_out(rgbC1);
data_out(rgbC2);
}
for(j=0;j<k;j++)
{
data_out(rgbD1);
data_out(rgbD2);
}
for(j=0;j<k;j++)
{
data_out(rgbE1);
data_out(rgbE2);
}
for(j=0;j<k;j++)
{
data_out(rgbF1);
data_out(rgbF2);
}
for(j=0;j<k;j++)
{
data_out(rgbG1);
data_out(rgbG2);
}
for(j=0;j<k;j++)
{
data_out(rgbH1);
data_out(rgbH2);
}
}
}
/*===========================================================================
** 函数名称: dispColorX()
** 功能描述: 显示水平色条(4种颜色)
============================================================================*/
void dispColorX(uint16 row, uint16 col,
uint16 rgbA1,uint16 rgbA2,
uint16 rgbB1,uint16 rgbB2,
uint16 rgbC1,uint16 rgbC2,
uint16 rgbD1,uint16 rgbD2,
uint16 rgbE1,uint16 rgbE2,
uint16 rgbF1,uint16 rgbF2,
uint16 rgbG1,uint16 rgbG2,
uint16 rgbH1,uint16 rgbH2
)
{
uint16 i,j,k;
k = row /8;
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
data_out(rgbA1);
data_out(rgbA2);
}
}
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
data_out(rgbB1);
data_out(rgbB2);
}
}
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
data_out(rgbC1);
data_out(rgbC2);
}
}
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
data_out(rgbD1);
data_out(rgbD2);
}
}
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
data_out(rgbE1);
data_out(rgbE2);
}
}
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
data_out(rgbF1);
data_out(rgbF2);
}
}
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
data_out(rgbG1);
data_out(rgbG2);
}
}
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
data_out(rgbH1);
data_out(rgbH2);
}
}
}
/*===========================================================================
** 函数名称: dispColorW()
** 功能描述: 显示色块窗口(前景色和背景色)
============================================================================*/
void dispColorW(uint16 row, uint16 col,
uint16 Frgb1,uint16 Frgb2,
uint16 Brgb1,uint16 Brgb2
)
{
uint16 i,j,k;
k = row /4;
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
data_out( (Brgb1<<8)|(Brgb2) );
}
}
for(i=0;i<k*2;i++)
{
for(j=0;j<col/4;j++)
{
data_out( (Brgb1<<8)|(Brgb2) );
}
for(j=0;j<col/2;j++)
{
data_out( (Frgb1<<8)|(Frgb2) );
}
for(j=0;j<col/4;j++)
{
data_out( (Brgb1<<8)|(Brgb2) );
}
}
for(i=0;i<k;i++)
{
for(j=0;j<col;j++)
{
data_out( (Brgb1<<8)|(Brgb2) );
}
}
}
/*===========================================================================
** 函数名称: dispColorG()
** 功能描述: 显示绿色渐变(绿 ->白)
============================================================================*/
void dispColorG(uint16 row,uint16 col)
{
//white 0xff,0xff red 0xf8,0x00 green 0x07,0xe0 blue 0x00,0x1f
uint16 i,j;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
data_out( ( (0x07+(j/4)*8)<<8)|((0xe0+j/4)) );
}
}
}
/*===========================================================================
** 函数名称: dispGraphic_8()
** 功能描述: 显示图形(8*8,区分前景色和背景色)
============================================================================*/
void dispGraphic_8(uint16 row,uint16 col,
uint8 *Graphic,
uint16 F_RGB1,uint16 F_RGB2,
uint16 B_RGB1,uint16 B_RGB2
)
{
uint16 n, i,j,k;
uint8 tempGraphic;
//p64kd
for(n=0;n<row/8;n++)
{
for(i=0;i<8;i++)
{
for(j=0;j<col/8;j++)
{
tempGraphic = Graphic[i];
for(k=0;k<8;k++)
{
if(((tempGraphic)&(0x80))!= 0)
{
data_out( (F_RGB1<<8)|(F_RGB2) );
}else
{
data_out( (B_RGB1<<8)|(B_RGB2) );
}
tempGraphic = tempGraphic << 1;
}
}
}
}
}
/*===========================================================================
** 函数名称: dispGraphic_16()
** 功能描述: 显示图形(16*16,区分前景色和背景色)
============================================================================*/
void dispGraphic_16(uint16 row,uint16 col,
uint8 *Graphic,
uint16 F_RGB1,uint16 F_RGB2,
uint16 B_RGB1,uint16 B_RGB2
)
{
uint16 n, i,j,k;
uint8 tempGraphic;
//p64kd
for(n=0;n<row/16;n++)
{
for(i=0;i<16;i++)
{
for(j=0;j<col/16;j++)
{
tempGraphic = Graphic[i*2];
for(k=0;k<8;k++)
{
if(((tempGraphic)&(0x80))!= 0)
{
data_out( (F_RGB1<<8)|(F_RGB2) );
}else
{
data_out( (B_RGB1<<8)|(B_RGB2) );
}
tempGraphic = tempGraphic << 1;
}
tempGraphic = Graphic[i*2+1];
for(k=0;k<8;k++)
{
if(((tempGraphic)&(0x80))!= 0)
{
data_out( (F_RGB1<<8)|(F_RGB2) );
}else
{
data_out( (B_RGB1<<8)|(B_RGB2) );
}
tempGraphic = tempGraphic << 1;
}
}
}
}
}
/*********************************************************************************************************
** End Of File
**********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -