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

📄 lcd.c

📁 通讯误码仪测试软件
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
*********************************************************************************************************
*						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 + -