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

📄 st7920.txt

📁 ST7920带中文字库液晶原码程序 12864 keil的
💻 TXT
📖 第 1 页 / 共 2 页
字号:
} 

//******************************************** 
//LCD功能设定,LCD数据口宽度为4bit 
//re: 1扩展指令, 0 基本指令 
//******************************************** 
void lcd_function_set(char re) 
{ 
 char db; 
 db=db|(re<<2); 
 lcd_setport(0,0,0x02); 
 lcd_setport(0,0,db); 
} 

//******************************************** 
// LCD软件复位 
//******************************************** 
void lcd_reset(void) 
{ 
 #asm("cli") 
 lcd_setport(0,0,0x03); 
 delay_ms(10); 
 lcd_setport(0,0,0x03); 
 delay_us(200); 
 lcd_setport(0,0,0x03); 
 delay_us(20); 
 lcd_setport(0,0,0x03); 
 delay_us(20); 
 lcd_function_set(0);       //使用LCD基本指令 
 #asm("sei") 
} 

//********************************************** 
//LCD开关设定 
//display: 1 显示开, 0 显示关 
//cursor:  1 光标开, 0 光标关 
//blink:   1 光标处字符闪动开, 光标处字符闪动关 
//********************************************** 
void lcd_on_off(char display,char cursor,char blink) 
{ 
char db; 
db=0x08|(display<<2)|(cursor<<1)|blink; 
lcd_setport(0,0,0x00); 
lcd_setport(0,0,db); 
} 


//********************************************** 
//LCD 清屏 
//********************************************** 
void lcd_clear(void) 
{ 
 lcd_setport(0,0,0x00); 
 lcd_setport(0,0,0x01); 
 delay_ms(7); 
} 

//********************************************** 
//LCD显示回原点,设DDRAM地址为0,DDRAM内容不变 
//********************************************** 
void lcd_return_home(void) 
{ 
 lcd_setport(0,0,0x00); 
 lcd_setport(0,0,0x02); 
} 

//********************************************** 
//输入方式设定,设定光标移动方向并指定整体是否移动 
//id :1 增量方式, 0 减量方式 
//s:  1 写入后整体移动,0 不移动 
//********************************************** 
void lcd_entry_mode(char id,char s) 
{ 
 char db; 
 db=0x04|(id<<1)|s; 
 lcd_setport(0,0,0x00); 
 lcd_setport(0,0,db); 
} 

//********************************************** 
//移动光标或整体 
//s_c: 1 整体显示移位,0 光标移动 
//r_l: 1 左移, 0 右移 
//********************************************** 
void lcd_cour_disp_shift(char s_c,char r_l) 
{ 
 char db; 
 db=db|(s_c<<3)|(r_l<<2); 
 lcd_setport(0,0,0x01); 
 lcd_setport(0,0,db); 
} 

//********************************************** 
//读取当前显示位置 
//********************************************** 
char lcd_read_address(void) 
{ 
 char address,address_l; 
  
 LCD_EN=0; 
 LCD_RS=0; 
 delay_us(5); 
 LCD_RD=1; 
 delay_us(5); 
 LCD_EN=1; 
 DDRC=0x07; 
 delay_us(5); 
 address=PINC&0x70; 
 LCD_EN=0; 
 delay_us(5); 
 LCD_EN=1; 
 delay_us(5); 
 address_l=PINC&0xF0; 
 address_l= address_l>>4; 
 address=address|address_l|0x80; 
 LCD_EN=0; 
 LCD_RD=0; 
 PORTC&=0x08; 
 DDRC|=0xF7; 
  
 return address; 
} 

//********************************************** 
//设定CGRAM地址 
//********************************************** 
void lcd_set_cgram_address(char address) 
{ 
char db; 
db=0x04|(address>>4); 
lcd_setport(0,0,db); 
db=address; 
lcd_setport(0,0,db); 
}  

//********************************************** 
//设定DDRAM地址 
//********************************************* 
void lcd_set_ddram_address(char address) 
{ 
char db; 
db=(0x08|(address>>4))&0x0B; 
lcd_setport(0,0,db); 
db=address; 
lcd_setport(0,0,db); 
}  

//********************************************** 
//写数据到CGRAM 或DDRAM 
//********************************************** 
void lcd_write_ram(char data) 
{ 
 char db; 
 db=data>>4; 
 lcd_setport(1,0,db); 
 lcd_setport(1,0,data); 
} 


//********************************************** 
//LCD初始化 
//********************************************** 
void lcd_inital(void)  
{ 
//lcd_reset(); 
#asm("cli") 
 lcd_setport(0,0,0x03); 
 delay_ms(10); 
 lcd_setport(0,0,0x03); 
 delay_us(200); 
 lcd_setport(0,0,0x03); 
 delay_us(20); 
 lcd_setport(0,0,0x03); 
 delay_us(20); 
// lcd_function_set(0);       //使用LCD基本指令 
 lcd_setport(0,0,0x02); 
 lcd_setport(0,0,0x00); 
// lcd_setport(0,0,0x02); 
// lcd_on_off(1,1,0); 
 delay_us(10); 
 lcd_setport(0,0,0x00); 
 lcd_setport(0,0,0x0E); 
// lcd_clear(); 
 delay_us(10); 
 lcd_setport(0,0,0x00); 
 lcd_setport(0,0,0x01); 
 delay_us(10); 

 //lcd_entry_mode(1,0); 
 lcd_setport(0,0,0x00); 
 lcd_setport(0,0,0x06); 

 #asm("sei") 
delay_ms(5); 
} 

//********************************************** 
//设定显示位置 
// x 列位置,范围1-8 
// y 行位置,范围1-4 
//********************************************** 
void lcd_gotoxy(char x,char y) 
{ 
 char address; 
  
 switch ( y ) 
    { 
     case 1: 
            address=0x80+x-1; 
            break; 
     case 2: 
            address=0x90+x-1; 
            break;   
     case 3: 
            address=0x88+x-1; 
            break; 
     case 4: 
            address=0x98+x-1; 
            break; 
     default: break;                 
          
    }   
lcd_set_ddram_address(address); 
} 

//********************************************** 
//显示一个字符 
//********************************************** 
void lcd_putc(unsigned char c) 
{ 
 lcd_write_ram(c); 
} 


//********************************************** 
//显示一个字符串 
//********************************************** 
void  lcd_putsf(char  flash *str) 
{ 
  char address; 

  
  for(;;) 
    {  
     if((*str)==0) 
        break; 
     else 
        { 
          address=lcd_read_address(); 
           
          if(address==0x87) 
             { 
               
              lcd_putc(*str); 
              str++; 
              if(*str==0) 
                       break; 
              lcd_putc(*str); 
              str++; 
              if(*str==0) 
                       break;  
              lcd_gotoxy(1,2);                   
             } 
            if(address==0x97) 
              { 
               
              lcd_putc(*str); 
              str++; 
              if(*str==0) 
                       break; 
              lcd_putc(*str); 
              str++; 
              if(*str==0) 
                       break;          
              lcd_gotoxy(1,3); 
             } 
           if(address==0x8F) 
              { 
               
              lcd_putc(*str); 
              str++; 
              if(*str==0) 
                       break; 
              lcd_putc(*str); 
              str++; 
              if(*str==0) 
                       break;          
              lcd_gotoxy(1,4); 
             }   
          lcd_putc(*str); 
          str++; 
       
        }    
    } 
}      


//********************************************** 
//在指定行显示一个字符串, 
//字符串长度小于16个字符或8个汉字 
//********************************************** 
void lcd_putsf_line(char  flash *str,char line) 
{   
   char i; 
   lcd_gotoxy(1,line); 
   for(i=0;i<=15;i++) 
    {  
     if(*str==0) 
        break; 
     else 
        { 
         lcd_putc(*str); 
         str++; 
       
        }    
    } 
   lcd_on_off(1,0,0); 
}   

//********************************************** 
//整屏显示一个字符串, 
//字符串长度小于64个字符或32个汉字 
//********************************************** 
void lcd_put_page(char  flash *str) 
{ 
 lcd_clear(); 
 lcd_gotoxy(1,1); 
 lcd_putsf(str); 
}   

⌨️ 快捷键说明

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