📄 lcd.c
字号:
unsigned char address = Lcd_Char_Add[ y*8 + x ];
unsigned char number = Lcd_Num_Code[ z ];
Lcd_Command( LCD_COMM, 0x30 );
Lcd_Command( LCD_COMM, address );
Lcd_Command( LCD_DATA, 0xA3 );
Lcd_Command( LCD_DATA, number );
}
void Lcd_Xy_Dot_Common( alt_u8 x, alt_u8 y ) // 在XY画点_LCD_BMP_COMMON
{
unsigned char screen_x, screen_y;
unsigned char read_h, read_l;
unsigned char dot_h, dot_l;
if( x % 16 == 0 ) dot_h = 0x80, dot_l = 0x00;
else if( x % 16 == 1 ) dot_h = 0x40, dot_l = 0x00;
else if( x % 16 == 2 ) dot_h = 0x20, dot_l = 0x00;
else if( x % 16 == 3 ) dot_h = 0x10, dot_l = 0x00;
else if( x % 16 == 4 ) dot_h = 0x08, dot_l = 0x00;
else if( x % 16 == 5 ) dot_h = 0x04, dot_l = 0x00;
else if( x % 16 == 6 ) dot_h = 0x02, dot_l = 0x00;
else if( x % 16 == 7 ) dot_h = 0x01, dot_l = 0x00;
else if( x % 16 == 8 ) dot_h = 0x00, dot_l = 0x80;
else if( x % 16 == 9 ) dot_h = 0x00, dot_l = 0x40;
else if( x % 16 == 10 ) dot_h = 0x00, dot_l = 0x20;
else if( x % 16 == 11 ) dot_h = 0x00, dot_l = 0x10;
else if( x % 16 == 12 ) dot_h = 0x00, dot_l = 0x08;
else if( x % 16 == 13 ) dot_h = 0x00, dot_l = 0x04;
else if( x % 16 == 14 ) dot_h = 0x00, dot_l = 0x02;
else if( x % 16 == 15 ) dot_h = 0x00, dot_l = 0x01;
if( y < 32 ) screen_x = x / 16 + 0x80;
if( y > 31 ) screen_x = x / 16 + 0x88;
screen_y = 0x80 + y % 32;
if( x/16 == 0 ) read_h = Lcd_Bmp_Common[y][0], read_l = Lcd_Bmp_Common[y][1];
else if( x/16 == 1 ) read_h = Lcd_Bmp_Common[y][2], read_l = Lcd_Bmp_Common[y][3];
else if( x/16 == 2 ) read_h = Lcd_Bmp_Common[y][4], read_l = Lcd_Bmp_Common[y][5];
else if( x/16 == 3 ) read_h = Lcd_Bmp_Common[y][6], read_l = Lcd_Bmp_Common[y][7];
else if( x/16 == 4 ) read_h = Lcd_Bmp_Common[y][8], read_l = Lcd_Bmp_Common[y][9];
else if( x/16 == 5 ) read_h = Lcd_Bmp_Common[y][10], read_l = Lcd_Bmp_Common[y][11];
else if( x/16 == 6 ) read_h = Lcd_Bmp_Common[y][12], read_l = Lcd_Bmp_Common[y][13];
else if( x/16 == 7 ) read_h = Lcd_Bmp_Common[y][14], read_l = Lcd_Bmp_Common[y][15];
dot_h = dot_h | read_h;
dot_l = dot_l | read_l;
if( x/16 == 0 ) Lcd_Bmp_Common[y][0] = dot_h, Lcd_Bmp_Common[y][1] = dot_l;
else if( x/16 == 1 ) Lcd_Bmp_Common[y][2] = dot_h, Lcd_Bmp_Common[y][3] = dot_l;
else if( x/16 == 2 ) Lcd_Bmp_Common[y][4] = dot_h, Lcd_Bmp_Common[y][5] = dot_l;
else if( x/16 == 3 ) Lcd_Bmp_Common[y][6] = dot_h, Lcd_Bmp_Common[y][7] = dot_l;
else if( x/16 == 4 ) Lcd_Bmp_Common[y][8] = dot_h, Lcd_Bmp_Common[y][9] = dot_l;
else if( x/16 == 5 ) Lcd_Bmp_Common[y][10] = dot_h, Lcd_Bmp_Common[y][11] = dot_l;
else if( x/16 == 6 ) Lcd_Bmp_Common[y][12] = dot_h, Lcd_Bmp_Common[y][13] = dot_l;
else if( x/16 == 7 ) Lcd_Bmp_Common[y][14] = dot_h, Lcd_Bmp_Common[y][15] = dot_l;
Lcd_Command( LCD_COMM, 0x34 );
Lcd_Command( LCD_COMM, screen_y );
Lcd_Command( LCD_COMM, screen_x );
Lcd_Command( LCD_COMM, 0x30 );
Lcd_Command( LCD_DATA, dot_h );
Lcd_Command( LCD_DATA, dot_l );
Lcd_Command( LCD_COMM, 0x36 );
}
void Lcd_Xy_Dot_Circle( alt_u8 x, alt_u8 y ) // 在XY画点_LCD_BMP_CIRCLE
{
unsigned char screen_x, screen_y;
unsigned char read_h_0, read_h_1, read_l_0, read_l_1;
unsigned char dot_h_0, dot_h_1, dot_l_0, dot_l_1;
unsigned char i;
unsigned char ref_x_0, ref_x_1;
ref_x_0 = x % 16;
ref_x_1 = x / 16;
if( ref_x_0 == 0 ) dot_h_0 = 0x80, dot_l_0 = 0x00;
else if( ref_x_0 == 1 ) dot_h_0 = 0x40, dot_l_0 = 0x00;
else if( ref_x_0 == 2 ) dot_h_0 = 0x20, dot_l_0 = 0x00;
else if( ref_x_0 == 3 ) dot_h_0 = 0x10, dot_l_0 = 0x00;
else if( ref_x_0 == 4 ) dot_h_0 = 0x08, dot_l_0 = 0x00;
else if( ref_x_0 == 5 ) dot_h_0 = 0x04, dot_l_0 = 0x00;
else if( ref_x_0 == 6 ) dot_h_0 = 0x02, dot_l_0 = 0x00;
else if( ref_x_0 == 7 ) dot_h_0 = 0x01, dot_l_0 = 0x00;
else if( ref_x_0 == 8 ) dot_h_0 = 0x00, dot_l_0 = 0x80;
else if( ref_x_0 == 9 ) dot_h_0 = 0x00, dot_l_0 = 0x40;
else if( ref_x_0 == 10 ) dot_h_0 = 0x00, dot_l_0 = 0x20;
else if( ref_x_0 == 11 ) dot_h_0 = 0x00, dot_l_0 = 0x10;
else if( ref_x_0 == 12 ) dot_h_0 = 0x00, dot_l_0 = 0x08;
else if( ref_x_0 == 13 ) dot_h_0 = 0x00, dot_l_0 = 0x04;
else if( ref_x_0 == 14 ) dot_h_0 = 0x00, dot_l_0 = 0x02;
else if( ref_x_0 == 15 ) dot_h_0 = 0x00, dot_l_0 = 0x01;
for( i=0; i<64; i++ ) {
if( ref_x_1 == 0 ) read_h_0 = Lcd_Bmp_Circle[i][0], read_l_0 = Lcd_Bmp_Circle[i][1];
else if( ref_x_1 == 1 ) read_h_0 = Lcd_Bmp_Circle[i][2], read_l_0 = Lcd_Bmp_Circle[i][3];
else if( ref_x_1 == 2 ) read_h_0 = Lcd_Bmp_Circle[i][4], read_l_0 = Lcd_Bmp_Circle[i][5];
else if( ref_x_1 == 3 ) read_h_0 = Lcd_Bmp_Circle[i][6], read_l_0 = Lcd_Bmp_Circle[i][7];
else if( ref_x_1 == 4 ) read_h_0 = Lcd_Bmp_Circle[i][8], read_l_0 = Lcd_Bmp_Circle[i][9];
else if( ref_x_1 == 5 ) read_h_0 = Lcd_Bmp_Circle[i][10], read_l_0 = Lcd_Bmp_Circle[i][11];
else if( ref_x_1 == 6 ) read_h_0 = Lcd_Bmp_Circle[i][12], read_l_0 = Lcd_Bmp_Circle[i][13];
else if( ref_x_1 == 7 ) read_h_0 = Lcd_Bmp_Circle[i][14], read_l_0 = Lcd_Bmp_Circle[i][15];
read_h_1 = read_h_0 & dot_h_0;
read_l_1 = read_l_0 & dot_l_0;
if( read_h_1 != 0x00 || read_l_1 != 0x00 ) {
dot_h_1 = ~dot_h_0;
dot_l_1 = ~dot_l_0;
read_h_0 = read_h_0 & dot_h_1;
read_l_0 = read_l_0 & dot_l_1;
if( ref_x_1 == 0 ) Lcd_Bmp_Circle[i][0] = read_h_0, Lcd_Bmp_Circle[i][1] = read_l_0;
else if( ref_x_1 == 1 ) Lcd_Bmp_Circle[i][2] = read_h_0, Lcd_Bmp_Circle[i][3] = read_l_0;
else if( ref_x_1 == 2 ) Lcd_Bmp_Circle[i][4] = read_h_0, Lcd_Bmp_Circle[i][5] = read_l_0;
else if( ref_x_1 == 3 ) Lcd_Bmp_Circle[i][6] = read_h_0, Lcd_Bmp_Circle[i][7] = read_l_0;
else if( ref_x_1 == 4 ) Lcd_Bmp_Circle[i][8] = read_h_0, Lcd_Bmp_Circle[i][9] = read_l_0;
else if( ref_x_1 == 5 ) Lcd_Bmp_Circle[i][10] = read_h_0, Lcd_Bmp_Circle[i][11] = read_l_0;
else if( ref_x_1 == 6 ) Lcd_Bmp_Circle[i][12] = read_h_0, Lcd_Bmp_Circle[i][13] = read_l_0;
else if( ref_x_1 == 7 ) Lcd_Bmp_Circle[i][14] = read_h_0, Lcd_Bmp_Circle[i][15] = read_l_0;
if( i < 32 ) screen_x = ref_x_1 + 0x80;
if( i > 31 ) screen_x = ref_x_1 + 0x88;
screen_y = 0x80 + i % 32;
Lcd_Command( LCD_COMM, 0x34 );
Lcd_Command( LCD_COMM, screen_y );
Lcd_Command( LCD_COMM, screen_x );
Lcd_Command( LCD_COMM, 0x30 );
Lcd_Command( LCD_DATA, read_h_0 );
Lcd_Command( LCD_DATA, read_l_0 );
Lcd_Command( LCD_COMM, 0x36 );
}
}
if( y < 32 ) screen_x = ref_x_1 + 0x80;
if( y > 31 ) screen_x = ref_x_1 + 0x88;
screen_y = 0x80 + y % 32;
if( x/16 == 0 ) read_h_0 = Lcd_Bmp_Circle[y][0], read_l_0 = Lcd_Bmp_Circle[y][1];
else if( x/16 == 1 ) read_h_0 = Lcd_Bmp_Circle[y][2], read_l_0 = Lcd_Bmp_Circle[y][3];
else if( x/16 == 2 ) read_h_0 = Lcd_Bmp_Circle[y][4], read_l_0 = Lcd_Bmp_Circle[y][5];
else if( x/16 == 3 ) read_h_0 = Lcd_Bmp_Circle[y][6], read_l_0 = Lcd_Bmp_Circle[y][7];
else if( x/16 == 4 ) read_h_0 = Lcd_Bmp_Circle[y][8], read_l_0 = Lcd_Bmp_Circle[y][9];
else if( x/16 == 5 ) read_h_0 = Lcd_Bmp_Circle[y][10], read_l_0 = Lcd_Bmp_Circle[y][11];
else if( x/16 == 6 ) read_h_0 = Lcd_Bmp_Circle[y][12], read_l_0 = Lcd_Bmp_Circle[y][13];
else if( x/16 == 7 ) read_h_0 = Lcd_Bmp_Circle[y][14], read_l_0 = Lcd_Bmp_Circle[y][15];
read_h_0 = dot_h_0 | read_h_0;
read_l_0 = dot_l_0 | read_l_0;
if( ref_x_1 == 0 ) Lcd_Bmp_Circle[y][0] = read_h_0, Lcd_Bmp_Circle[y][1] = read_l_0;
else if( ref_x_1 == 1 ) Lcd_Bmp_Circle[y][2] = read_h_0, Lcd_Bmp_Circle[y][3] = read_l_0;
else if( ref_x_1 == 2 ) Lcd_Bmp_Circle[y][4] = read_h_0, Lcd_Bmp_Circle[y][5] = read_l_0;
else if( ref_x_1 == 3 ) Lcd_Bmp_Circle[y][6] = read_h_0, Lcd_Bmp_Circle[y][7] = read_l_0;
else if( ref_x_1 == 4 ) Lcd_Bmp_Circle[y][8] = read_h_0, Lcd_Bmp_Circle[y][9] = read_l_0;
else if( ref_x_1 == 5 ) Lcd_Bmp_Circle[y][10] = read_h_0, Lcd_Bmp_Circle[y][11] = read_l_0;
else if( ref_x_1 == 6 ) Lcd_Bmp_Circle[y][12] = read_h_0, Lcd_Bmp_Circle[y][13] = read_l_0;
else if( ref_x_1 == 7 ) Lcd_Bmp_Circle[y][14] = read_h_0, Lcd_Bmp_Circle[y][15] = read_l_0;
Lcd_Command( LCD_COMM, 0x34 );
Lcd_Command( LCD_COMM, screen_y );
Lcd_Command( LCD_COMM, screen_x );
Lcd_Command( LCD_COMM, 0x30 );
Lcd_Command( LCD_DATA, read_h_0 );
Lcd_Command( LCD_DATA, read_l_0 );
Lcd_Command( LCD_COMM, 0x36 );
}
// 私有函数
void Lcd_Command( unsigned char dat_comm, unsigned char content ) // 向Lcd发指令
{
unsigned char a = content, i, j;
unsigned char b;
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CS_BASE, 0xFF );
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0x00 );
IOWR_ALTERA_AVALON_PIO_DATA( LCD_DATA_BASE, 0xFF );
Lcd_Delay();
for( i=0; i<5; i++ ) {
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0xFF ); Lcd_Delay();
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0x00 ); Lcd_Delay();
}
IOWR_ALTERA_AVALON_PIO_DATA( LCD_DATA_BASE, 0x00 );
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0xFF ); Lcd_Delay();
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0x00 ); Lcd_Delay();
if( dat_comm ) IOWR_ALTERA_AVALON_PIO_DATA( LCD_DATA_BASE, 0xFF );
else IOWR_ALTERA_AVALON_PIO_DATA( LCD_DATA_BASE, 0x00 );
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0xFF ); Lcd_Delay();
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0x00 ); Lcd_Delay();
IOWR_ALTERA_AVALON_PIO_DATA( LCD_DATA_BASE, 0x00 );
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0xFF ); Lcd_Delay();
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0x00 ); Lcd_Delay();
for( j=0; j<2; j++ ) {
for( i=0; i<4; i++ ) {
b = ( a >> 7 ) % 2 ; a = a<<1;
IOWR_ALTERA_AVALON_PIO_DATA( LCD_DATA_BASE, b );
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0xFF ); Lcd_Delay();
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0x00 ); Lcd_Delay(); }
IOWR_ALTERA_AVALON_PIO_DATA( LCD_DATA_BASE, 0x00 );
for( i=0; i<4; i++ ) {
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0xFF ); Lcd_Delay();
IOWR_ALTERA_AVALON_PIO_DATA( LCD_CLK_BASE, 0x00 ); Lcd_Delay();
}
}
Lcd_Delay();
}
void Lcd_Delay( void ) // LCD延时
{
volatile int i;
for( i = 0; i<LCD_TIME; i++ );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -