📄 lcd.c
字号:
/*
*********************************************************************************************************
* MPT 1327
* Trunking radio system
*
* (c) Copyright 2002-2005, Hu Jia Xi 胡家熙
* All Rights Reserved
*
* M16C620 Specific code
* Singal Chip Model
*
* File : lcd.C
* By : Hu Jia Xi
*********************************************************************************************************
*/
#define LCD_GLOBALS
#include "lcd.h"
#include "8englcd.h"
#include "1212lib.h"
/*
第一行 12 特殊字符行/输入法行
第二行 13 编辑行
第三行 13 编辑行
第四行 13 编辑行
第五行 13 提示行/编辑行
*/
// 占点阵行数,第一行屏蔽值,第二行屏蔽值,第三行屏蔽值,字模位移值,开始点阵行
const INT8U LCD_LINE_PARA[LCD_DISLINE][6] = {2,0x00,0xf0,0xff,0,0,
3,0x0f,0x00,0xfe,4,1,
2,0x01,0xc0,0xff,1,3,
3,0x3f,0x00,0xf8,6,4,
2,0x07,0x00,0xff,3,6
};
void lcd_init_hw(void)
{
portd_lcd_cs = 1;
portd_lcd_reset = 1;
portd_lcd_a0 = 1;
portd_lcd_wr = 1;
portd_lcd_rd = 1;
port_lcd_cs = 1;
port_lcd_reset = 1;
port_lcd_a0 = 1;
port_lcd_wr = 1;
port_lcd_rd = 1;
portd_lcd_data = 0;
}
void lcd_init(void)
{
INT16U i,j;
lcd_init_hw();
port_lcd_cs = 0;
for(i = 0; i < 100; i++)
{
port_lcd_reset = 0;
}
for(i = 0; i < 100; i++)
{
port_lcd_reset = 1;
}
lcd_write_command(LCD_ADC_OFF,0,0);
lcd_write_command(LCD_SHL_OFF,0,0);
lcd_write_command(LCD_BIAS_ON,0,0);
lcd_write_command(LCD_POWER|0x4,0,0);
delay(500);
lcd_write_command(LCD_POWER|0x6,0,0);
delay(500);
lcd_write_command(LCD_POWER|0x7,0,0);
lcd_write_command(LCD_REGULATOR|0,0,0);
lcd_definition(40);
delay(500);
lcd_write_command(LCD_LINE,0,0);
lcd_write_command(LCD_DISPLAY_ON,0,0);
// lcd_write_command(LCD_ENTIRE_ON,0,0);
// lcd_alls(0xff);
// delay(30000);
// lcd_write_command(LCD_ENTIRE_OFF,0,0);
lcd_alls(0xa0);
delay(30000);
lcd_alls(0);
lcd_clear_buf();
slcd.cursorl = 1;
slcd.cursorr = 0;
slcd.edit_upline = 1;
slcd.edit_downline = 4;
lcd_all();
}
void lcd_write_command(INT8U data0,INT8U data1,INT8U num)
{
port_lcd_cs = 0;
port_lcd_a0 = 0;
portd_lcd_data = 0x0ff;
lcd_write(data0);
if(num) lcd_write(data1);
}
INT8U lcd_read_status(void)
{
port_lcd_cs = 0;
port_lcd_a0 = 0;
portd_lcd_data = 0x0;
return lcd_read();
}
void lcd_write(INT8U data)
{
port_lcd_data = data;
port_lcd_wr = 0;
port_lcd_wr = 1;
}
INT8U lcd_read(void)
{
port_lcd_wr = 0;
port_lcd_wr = 1;
return port_lcd_data;
}
void lcd_sleep(void)
{
lcd_write_command(LCD_SM_ON,0,1);
lcd_write_command(LCD_DISPLAY_OFF,0,0);
lcd_write_command(LCD_ENTIRE_ON,0,0);
}
void lcd_standby(INT8U type)
{
lcd_write_command(LCD_SM_ON,type,1);
lcd_write_command(LCD_DISPLAY_OFF,0,0);
lcd_write_command(LCD_ENTIRE_ON,0,0);
}
void lcd_open(void)
{
lcd_write_command(LCD_ENTIRE_OFF,0,0);
lcd_write_command(LCD_SM_ON,3,1);
lcd_write_command(LCD_DISPLAY_ON,0,0);
}
void lcd_definition(INT16U definition)
{
lcd_write_command(LCD_REFERENCE_V,definition,1);
}
void lcd_line(INT8U line)
{
lcd_write_command(LCD_LINE|line,0,0);
}
void lcd_column(INT8U column)
{
lcd_write_command(LCD_COLUMN_H|(column >> 4),LCD_COLUMN_L|(column&0xf),1);
}
void lcd_page(INT8U page)
{
lcd_write_command(LCD_PAGE|page,0,0);
}
void delay(INT16U time)
{
INT16U i;
for(i = 0; i < time; i++)
{
port_lcd_cs = 0;
port_lcd_cs = 0;
port_lcd_cs = 0;
}
}
void lcd_alls(INT8U data)
{
lcd_writes_page(0,data);
lcd_writes_page(1,data);
lcd_writes_page(2,data);
lcd_writes_page(3,data);
lcd_writes_page(4,data);
lcd_writes_page(5,data);
lcd_writes_page(6,data);
lcd_writes_page(7,data);
}
void lcd_writes_page(INT8U page,INT8U data)
{
INT16U i;
// lcd_write_command(LCD_LINE,0,0);
lcd_write_command(LCD_PAGE|page,0,0);
lcd_write_command(LCD_COLUMN_H,LCD_COLUMN_L,1);
port_lcd_cs = 0;
port_lcd_a0 = 1;
portd_lcd_data = 0x0ff;
for(i=0;i<112;i++)
{
lcd_write(data);
}
}
void lcd_write_page(INT8U page,INT8U *pdata)
{
INT16U i;
// lcd_write_command(LCD_LINE,0,0);
lcd_write_command(LCD_PAGE|page,0,0);
lcd_write_command(LCD_COLUMN_H,LCD_COLUMN_L,1);
port_lcd_cs = 0;
port_lcd_a0 = 1;
portd_lcd_data = 0x0ff;
for(i=0;i<112;i++)
{
lcd_write(*(pdata + i));
}
}
void lcd_writes_data(INT8U data,INT8U num)
{
INT8U i;
port_lcd_cs = 0;
port_lcd_a0 = 1;
portd_lcd_data = 0x0ff;
for(i = 0; i < num; i++)
{
lcd_write(data);
}
}
void lcd_write_data(INT8U *pdata,INT8U num)
{
INT8U i;
port_lcd_cs = 0;
port_lcd_a0 = 1;
portd_lcd_data = 0x0ff;
for(i = 0; i < num; i++)
{
lcd_write(*(pdata + i));
}
}
void lcd_clear_buf(void)
{
INT8U i,j;
for(i = 0;i<8;i++)
{
for(j = 0;j<112;j++)
{
slcd.buf[i][j] = 0x0;
}
}
}
void lcd_all(void)
{
/*
lcd_write_page(0,&slcd.buf[0][0]);
lcd_write_page(1,&slcd.buf[1][0]);
lcd_write_page(2,&slcd.buf[2][0]);
lcd_write_page(3,&slcd.buf[3][0]);
lcd_write_page(4,&slcd.buf[4][0]);
lcd_write_page(5,&slcd.buf[5][0]);
lcd_write_page(6,&slcd.buf[6][0]);
lcd_write_page(7,&slcd.buf[7][0]);
*/
lcd_write_line(0);
lcd_write_line(1);
lcd_write_line(2);
lcd_write_line(3);
lcd_write_line(4);
}
void put_dot_all(void)
{
put_dot_line(0);
put_dot_line(1);
put_dot_line(2);
put_dot_line(3);
put_dot_line(4);
}
void put_dot_line(INT8U line)
{
INT8U row;
row = 0;
do{
if(row>=LCD_ENGROW) break;
if(slcd.code[line][row] < CHAR_CODE_CHL)
{
put_dot_eng(slcd.code[line][row],line,row);
row++;
}
else
{
put_dot_ch(*((INT16U *)(&slcd.code[line][row])),line,row);
row++;
row++;
}
}while(1);
}
void put_dot(INT8U line,INT8U engrow,INT8U num)
{
INT8U dot[4],row,l;
INT32U *p;
l = LCD_LINE_PARA[line][5];
row = ((LCD_DOTROW/LCD_ENGROW) * engrow) + num;
p = (INT32U *)dot;
*p = slcd.char_dot[num];
*p &= 0xffff;
*p >>= 2;
if(LCD_LINE_PARA[line][4]) *p = (*p)<< LCD_LINE_PARA[line][4];
slcd.buf[l][row] &= LCD_LINE_PARA[line][1];
slcd.buf[l+1][row] &= LCD_LINE_PARA[line][2];
slcd.buf[l][row] |= dot[0];
slcd.buf[l+1][row] |= dot[1];
if(LCD_LINE_PARA[line][0] == 3)
{
slcd.buf[l+2][row] &= LCD_LINE_PARA[line][3];
slcd.buf[l+2][row] |= dot[2];
}
}
void put_dot_eng(INT8U charcode,INT8U line,INT8U engrow)
{
INT8U i,row;
get_dot_eng(charcode);
row = ((LCD_DOTROW/LCD_ENGROW) * engrow);
for(i=0;i<LCD_ENGDOTROW;i++)
{
/*
slcd.buf[line*2][row + i] = ((INT8U *)slcd.char_dot)[i*2];
slcd.buf[line*2 + 1][row + i] = ((INT8U *)slcd.char_dot)[i*2 + 1];
*/
put_dot(line,engrow,i);
}
}
void put_dot_ch(INT16U charcode,INT8U line,INT8U engrow)
{
INT8U i,row;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -