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

📄 lcd.c

📁 通讯误码仪测试软件
💻 C
📖 第 1 页 / 共 2 页
字号:
 
 get_dot_ch(charcode);
 
 row = ((LCD_DOTROW/LCD_ENGROW) * engrow);

 for(i=0;i<LCD_CHDOTROW;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 get_dot_eng(INT8U charcode)
{
 INT16U far *p;
 INT8U i;

 for(i = 0;i<LCD_ENGDOTROW;i++)
    {
     slcd.char_dot[i] = 0;	
     }	
 if(charcode==0) return;
 p = (INT16U far *)(&wordlib_eng_table[(charcode-0x20)*9]);
 for(i = 0;i<LCD_ENGLIBDOTROW;i++)
    {
     slcd.char_dot[i] = p[i + 1];	
     }	
}

void get_dot_ch(INT16U charcode)
{
 INT16U far *p;
 INT16U i,j,k,code;

 code = charcode;
 asm("pushm	r0");
 asm("mov.w	$$[FB],r0",code);
 asm("xchg.b	r0l,r0h");
 asm("mov.w	r0,$$[FB]",code);
 asm("popm	r0");

 j = (LCD_CHDOTROW-LCD_CHLIBDOTROW)/2;
 for(i = 0;i<LCD_CHDOTROW;i++)
    {
     slcd.char_dot[i] = 0;	
     }	

 if(code <= CHAR_CODE_CHCHAR) 
    {
     i = (((code>>8)-CHAR_CODE_CHL)*94)+(code&0xff)-CHAR_CODE_CHL;
//     p = (INT16U far *)(&wordlib_chascii_table[i*12]);
     for(i = 0;i<LCD_CHLIBDOTROW;i++)
        {
          slcd.char_dot[i+j] = p[i];	
          }	
     return;
     }

 if((code >= CHAR_CODE_CHWORDL) && (code <= CHAR_CODE_CHWORDH)) 
    {
     i = (((code>>8)-CHAR_CODE_CHL) * CHAR_CODE_CHL_LENGTH)+(code&0xff)-CHAR_CODE_CHL;
     k = CHAR_CODE_CHWORDL;
     k >>= 8;
     k -=  CHAR_CODE_CHL;
     k *= CHAR_CODE_CHL_LENGTH; 
     i = i-k;
     p = (INT16U far *)(&wordlib_1212_table1[i*12]);
     for(i = 0;i<LCD_CHLIBDOTROW;i++)
        {
          slcd.char_dot[i+j] = p[i];	
          }	
     }
 }

INT16U get_code_type(INT16U charcode)
{
 INT16U i,j;
 if(!(charcode&0xff00))
   {
    if(charcode == CODE_ASCII_END) return  STATUS_CODE_ASCIIEND;
    if(charcode < CHAR_CODE_ENGL) return  STATUS_CODE_ASCIICTRL;
    if((charcode >= CHAR_CODE_ENGL) && (charcode <= CHAR_CODE_ENGH)) return  STATUS_CODE_ASCII;
    if(charcode < CHAR_CODE_CHL) return  STATUS_CODE_INVALIDASCII;    
    return STATUS_CODE_NOASCII;	
    }	

 i = charcode;
 asm("pushm	r0");
 asm("mov.w	$$[FB],r0",i);
 asm("xchg.b	r0l,r0h");
 asm("mov.w	r0,$$[FB]",i);
 asm("popm	r0");
 j = i&0xff;
 if(j < CHAR_CODE_CHL) return STATUS_CODE_NOCH;
 if(j > CHAR_CODE_CHLH) return STATUS_CODE_INVALIDCH;
 if((charcode & 0xff) > CHAR_CODE_CHHH) return STATUS_CODE_INVALIDCH;
 if((i >= CHAR_CODE_CHASCIIL) && (i <= CHAR_CODE_CHASCIIH)) return STATUS_CODE_CHASCII;
 if(i <= CHAR_CODE_CHCHAR) return STATUS_CODE_CHCHAR;
 if((i >= CHAR_CODE_CHWORDL) && (i <= CHAR_CODE_CHWORDH)) return STATUS_CODE_CH1; 
 return STATUS_CODE_INVALIDCH;
 }

INT16U get_valid_code(INT16U code)
{
 INT16U status;
 
 status = get_code_type(code);
 if(status == STATUS_CODE_ASCIIEND) return 0;
 if(status == STATUS_CODE_ASCIICTRL)return 0;
 if(status == STATUS_CODE_ASCII) return code;
 if((status == STATUS_CODE_INVALIDASCII) | (status != STATUS_CODE_NOASCII)) return CODE_ASCII_SPACE;
 if((status == STATUS_CODE_CHCHAR)|(status == STATUS_CODE_CH1)|(status == STATUS_CODE_CH2)|(status == STATUS_CODE_CH3)) return code;
 if((status == STATUS_CODE_INVALIDCH) | (status != STATUS_CODE_NOCH)) return CODE_CH_SPACE;
 return 0;	
 }
  


void lcd_write_line(INT8U line)
{
 INT16U i,j,l;
 
 put_dot_line(line);
 
 l = LCD_LINE_PARA[line][5];
 for(j = 0;j < LCD_LINE_PARA[line][0];j++)
    {
     lcd_write_command(LCD_PAGE|(l+j),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(slcd.buf[l+j][i]);
         }
     }
/* 
 lcd_write_command(LCD_PAGE|(line*2),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(slcd.buf[line*2][i]);
      }

 lcd_write_command(LCD_PAGE|(line*2 + 1),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(slcd.buf[line*2 + 1][i]);
      }
*/
 }

void lcd_up_line(void)
{
 INT8U i,j;
 
 for(i = slcd.edit_upline;i < slcd.edit_downline;i++)
    {
     for(j=0;j<LCD_ENGROW;j++)
        {
         slcd.code[i+1][j] = slcd.code[i][j];
         }	
      }

 for(j=0;j<LCD_ENGROW;j++)
    {
     slcd.code[slcd.edit_upline][j] = 0x20;
     }	

 for(i = slcd.edit_downline;i > slcd.edit_upline;i--)
    {
     clear_line_dot(i);
     move_line_dot(i-1,i);
     }
 
/*
//以下也是一种刷新方式
 for(i = slcd.edit_downline;i > slcd.edit_upline;i--)
    {
     put_dot_line(i);
     }
*/ 

 clear_line_dot(slcd.edit_upline);
 }

void lcd_down_line(void)
{
 INT8U i,j;
 
 for(i = slcd.edit_upline;i < slcd.edit_downline;i++)
    {
     for(j=0;j<LCD_ENGROW;j++)
        {
         slcd.code[i][j] = slcd.code[i+1][j];
         }	
      }

 for(j=0;j<LCD_ENGROW;j++)
    {
     slcd.code[slcd.edit_downline][j] = 0x20;
     }	
/*
 for(i = slcd.edit_upline;i < slcd.edit_downline;i++)
    {
     clear_line_dot(i);
     move_line_dot(i+1,i);
     }
*/ 
/*
//以下也是一种刷新方式
 for(i = slcd.edit_upline;i < slcd.edit_downline;i++)
    {
     put_dot_line(i);
     }
 

 clear_line_dot(slcd.edit_downline);
*/	
 }

void clear_line_dot(INT8U line)
{
 INT8U i,j,l;
 l = LCD_LINE_PARA[line][5];
 for(i=0;i<LCD_LINE_PARA[line][0];i++)
    {
     for(j = 0;j<LCD_DOTROW;j++)
        {
         slcd.buf[l+i][j] &= LCD_LINE_PARA[line][i+1];
         }	
     }	
 }
 
void move_line_dot(INT8U sline,INT8U dline)
{
 INT8U i;
 INT16U j;
 
 for(i=0;i<LCD_ENGROW;i++)
    {
     get_lineeng_dot(sline,i);
     put_lineeng_dot(dline,i);	
     }	
/*
 for(i=0;i<LCD_DOTROW;i++)
    {
     j = get_linerow_dot(sline,i);
     put_linerow_dot(dline,i,j);	
     }	
*/
 } 

INT16U get_linerow_dot(INT8U line,INT8U row)
{
 INT8U dot[4],l;
 INT32U *p;
 INT16U *pp;
 pp = (INT16U *)dot;
 p = (INT32U *)dot;

 l = LCD_LINE_PARA[line][5];
 dot[0] = slcd.buf[l][row]; 
 dot[1] = slcd.buf[l+1][row]; 
 dot[2] = slcd.buf[l+2][row];
 if(LCD_LINE_PARA[line][4]) *p = (*p) >> LCD_LINE_PARA[line][4];
 *p &= 0xfff;
 return *pp;
 }

void get_lineeng_dot(INT8U line,INT8U row)
{
 INT8U dot[4],l,r,i;
 INT32U *p;
 INT16U *pp;
 pp = (INT16U *)dot;
 p = (INT32U *)dot;
 r = row * LCD_ENGDOTROW;
 l = LCD_LINE_PARA[line][5];
 for(i = 0;i < LCD_ENGDOTROW;i++)
    {
     dot[0] = slcd.buf[l][r]; 
     dot[1] = slcd.buf[l+1][r]; 
     dot[2] = slcd.buf[l+2][r];
     if(LCD_LINE_PARA[line][4]) *p = (*p) >> LCD_LINE_PARA[line][4];
     *p &= 0xfff;
     slcd.char_dot[i] = *p;
     r++;
     }
 }

void put_lineeng_dot(INT8U line,INT8U row)
{
 INT8U dot[4],l,r,i;
 INT32U *p;
 INT16U *pp;
 p = (INT32U *)dot;
 pp = (INT16U *)dot;
 r = row * LCD_ENGDOTROW;
 l = LCD_LINE_PARA[line][5];

 for(i = 0;i < LCD_ENGDOTROW;i++)
    {
     *p = 0;
     *pp = slcd.char_dot[i];
     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[3]; 
        }
     }
 }
 


 
void put_linerow_dot(INT8U line,INT8U row,INT16U data)
{
 INT8U dot[4],l;
 INT32U *p;
 INT16U *pp;
 p = (INT32U *)dot;
 pp = (INT16U *)dot;
 *p = 0;
 *pp = data;
  
 if(LCD_LINE_PARA[line][4]) *p = (*p) << LCD_LINE_PARA[line][4];
 l = LCD_LINE_PARA[line][5];
 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[3]; 
    }
 }
 
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -