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

📄 k0108lcd_qd.txt

📁 编写规范的ks0108型12864液晶驱动
💻 TXT
📖 第 1 页 / 共 2 页
字号:
       Set_EN_H; 
           asm("nop"); 
           asm("nop"); 
           asm("nop"); 
           asm("nop"); 
           busy=lcd_DATA_IN; 
       Set_EN_L; 
       busy=0x90&busy; 
      }while(!(busy==0x00)); 

} 

/****************************************************************************  
* 名称:write_command()  
* 功能:写指令 
* 入口参数:指令,KS0108共有7条指令 
* 出口参数:无  
* 说明: 
****************************************************************************/  
void Write_command(unsigned char command) 
{     If_Busy(); 
      lcd_DATA_DDR=0XFF; 
      lcd_DATA_OUT=command; 
      Set_RS_L; 
      Set_RW_L; 
      Set_EN_H; 
      asm("nop"); 
          asm("nop"); 
          asm("nop"); 
          asm("nop"); 
      Set_EN_L; 
} 

/****************************************************************************  
* 名称:write_data()  
* 功能:写数据 
* 入口参数:显示数据 
* 出口参数:无  
* 说明: 
****************************************************************************/  
void Write_data(unsigned char data) 
{  If_Busy(); 
   lcd_DATA_DDR=0XFF; 
   lcd_DATA_OUT=data; 
   Set_RW_L; 
   Set_RS_H; 
   Set_EN_H; 
   asm("nop"); 
   asm("nop"); 
   asm("nop"); 
   asm("nop"); 
   Set_EN_L; 
} 

/****************************************************************************  
* 名称:Lcd_sele()  
* 功能:左右屏选择 
* 入口参数:显示数据 
* 出口参数:无  
* 说明:CS1=H,CS2=L,选中左屏;CS1=L,CS2=H,选中右屏 
****************************************************************************/  
void Lcd_sele(unsigned char lr) 
{ 
        if(lr) 
        {         
                Set_CS1_L; 
                Set_CS2_H; 
        } 
        else 
        {         
                Set_CS1_H; 
                Set_CS2_L; 
        } 
} 

/****************************************************************************  
* 名称:Set_Xpage()  
* 功能:设置页地址 
* 入口参数:左屏/右屏,页地址 
* 出口参数:无  
* 说明:Left为左屏,Right为右屏,X范围为0~7 
****************************************************************************/  
void Set_Xpage(unsigned char lr,unsigned char x) 
{ 
        Lcd_sele(lr); 
        Write_command(0xb8+x); 
} 

/****************************************************************************  
* 名称:Set_Ypage()  
* 功能:设置列地址 
* 入口参数:左屏/右屏,列地址 
* 出口参数:无  
* 说明:Left为左屏,Right为右屏,Y范围为0~63 
****************************************************************************/  
void Set_Ypage(unsigned char lr,unsigned char y) 
{ 
        Lcd_sele(lr); 
        Write_command(0x40+y); 
} 

/****************************************************************************  
* 名称:Set_StartLine()  
* 功能:设置起始行 
* 入口参数:左屏/右屏,行地址 
* 出口参数:无  
* 说明:Left为左屏,Right为右屏,Y范围为0~63 
****************************************************************************/  
void Set_startLine(unsigned char lr,unsigned char i) 
{ 
        Lcd_sele(lr); 
        Write_command(0xc0+i); 
} 

/****************************************************************************  
* 名称:Lcd_clear()  
* 功能:清屏 
* 入口参数:无 
* 出口参数:无  
* 说明: 
****************************************************************************/  
void Lcd_clear(void) 
{ 
        unsigned char i,j; 
        for(j=0;j<8;j++) 
        { 
                Set_Xpage(Left,j); 
                for (i=0;i<64;i++) 
        {  
                        Set_CS1_H; 
                        Set_CS2_L; 
            Write_data(0x00); 
                } 
                Set_Xpage(Right,j);                 
                for (i=0;i<64;i++) 
        {  
                        Set_CS1_L; 
                        Set_CS2_H; 
            Write_data(0x00); 
                } 
        } 
} 

/****************************************************************************  
* 名称:Dot()  
* 功能:描点函数 
* 入口参数:纵坐标x,横坐标y 
* 出口参数:无  
* 说明:X范围为0~63,Y范围为0~127 
****************************************************************************/  
void Dot(unsigned char x,unsigned char y) 
{ 
        unsigned char page_x,page_y,bit,value; 
        page_x=x/8; 
        bit=x%8; 
        value|=(0x01<<bit); 
        if(y>63) 
                {         
                        page_y=y-64; 
                        Set_Xpage(Right,page_x); 
                        Set_Ypage(Right,page_y); 
                        Write_data(value); 
                } 
        else 
                {         
                        page_y=y; 
                        Set_Xpage(Left,page_x); 
                        Set_Ypage(Left,page_y); 
                        Write_data(value); 
                } 
} 

/****************************************************************************  
* 名称:print_char()  
* 功能:显示一个字符,point需指向欲显示数组 
* 入口参数:字符宽度width 
* 出口参数:无  
* 说明:可以自动切换左右屏,取模模式为列行式 
****************************************************************************/  
void print_char(unsigned char width) 
{         
        unsigned char i,j; 
        j=line; 
        if(line<64) 
        { 
                Set_Xpage(Left,page); 
                Set_Ypage(Left,line); 
                for(i=0;i<width;i++) 
                { 
                        Write_data(pgm_read_byte(point++)); 
                        j++; 
                        if(j==64) 
                        { 
                                Set_Xpage(Right,page); 
                                Set_Ypage(Right,0); 
                                j=0; 
                        } 
                } 
                j=line; 
                Set_Xpage(Left,page+1); 
                Set_Ypage(Left,line); 
                for(i=0;i<width;i++) 
                { 
                        Write_data(pgm_read_byte(point++)); 
                        j++; 
                        if(j==64) 
                        { 
                                Set_Xpage(Right,page+1); 
                                Set_Ypage(Right,0); 
                                j=0; 
                        } 
                } 
        } 
        else 
        { 
                Set_Xpage(Right,page); 
                Set_Ypage(Right,line-64); 
                for(i=0;i<width;i++) 
                        Write_data(pgm_read_byte(point++)); 
                Set_Xpage(Right,page+1); 
                Set_Ypage(Right,line-64); 
                for(i=0;i<width;i++) 
                        Write_data(pgm_read_byte(point++)); 
        } 
} 

/****************************************************************************  
* 名称:print_english()  
* 功能:显示英文字符串 
* 入口参数:坐标x,y,欲显示字符s[] 
* 出口参数:无  
* 说明:可以自动换行,x取值范围0~7,y取值范围0~127 
****************************************************************************/  
void print_english(unsigned char x,unsigned char y,const prog_uchar s[]) 
{         
        unsigned i=0; 
        page=x; 
        line=y; 
        while(s[i]) 
        { 
                if(line>120) 
                { 
                        page=page+2; 
                        line=0; 
                } 
                point=ASCII+16*(s[i++]-0x20); 
                print_char(8); 
                line=line+8; 
        } 
} 

/****************************************************************************  
* 名称:print_chinese()  
* 功能:显示中文字符串 
* 入口参数:坐标x,y,文字数N,欲显示字符addr[] 
* 出口参数:无  
* 说明:可以自动换行,x取值范围0~7,y取值范围0~127 
****************************************************************************/  
void print_chinese(unsigned char x,unsigned char y,unsigned char N,const prog_uchar *addr) 
{ 
        unsigned i=0; 
        page=x; 
        line=y; 
        point=addr; 
        while(N--) 
        { 
                if(line>128-cn_width) 
                { 
                        page=page+2; 
                        line=0; 
                } 
                print_char(cn_width); 
                line=line+cn_width; 
        } 
} 
/****************************************************************************  
* 名称:Display_Pic()  
* 功能:显示图片 
* 入口参数:纵坐标x,横坐标y,图片高度h,图片宽度w,图片地址*p 
* 出口参数:无  
* 说明:X范围为0~7,Y范围为0~127,图片尺寸大小不超过128*64 
****************************************************************************/  
void display_bmp(unsigned char x,unsigned char y,unsigned char h,unsigned char w,unsigned char *p) 
{ 
        unsigned i,j; 

        for(i=x;i<x+h;i++) 
        {         

                for(j=y;j<y+w;j++) 
                {         
                        if(j>63) 
                        {         
                                Set_Xpage(Right,i); 
                                Set_Ypage(Right,j-64); 
                        } 
                        else 
                        {         
                                Set_Xpage(Left,i); 
                                Set_Ypage(Left,j); 
                        } 
                        Write_data(pgm_read_byte(p++)); 
                } 
        } 
} 
 

⌨️ 快捷键说明

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