打印
[应用方案]

LCD12864显示

[复制链接]
944|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
janewood|  楼主 | 2023-11-19 20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


液晶显示程序
void busy12864()
{
        lcdDat=0xff;    //口线置1,防止干扰
        rs=0; rw=1;           //置“命令、读”模式
        //en=1; while(lcdDat&0x80); en=0;//忙等待
}
/** 写命令 参数:comDat为要发送的命令 **/
void WriteCom(uchar comDat)
        {  
    busy12864();                     //忙,则等待
        rs=0;rw=0;                                //置“命令、写”模式
    lcdDat=comDat;en=1;en=0;//送出命令,并使之有效
}
/** 写数据 参数:dat为要发送的数据 **/
void WriteDat(uchar dat){  
    busy12864();                           //忙,则等待
        rs=1;rw=0;                                  //置“数据、写”模式
    lcdDat=dat;en=1;en=0;        //送出数据,并使之有效
}


/******** 任意尺寸点阵显示函数 ***********|
|参数:显示位置:row页数,col列号,                  |
|           字符大小:x横向像素,y纵向页数          |
|           显示内容:tab字模表          ******/
void showXY(uchar row,uchar col,uchar x,uchar y,uchar *tab){
        uchar i,j;
        bit right;
        if(col<64){right=0;}
        else {col-=64;right=1;}        
        for(i=0;i<y;i++){
                if(right)cs1=1,cs2=0;
                else  cs1=0,cs2=1;
                WriteCom(addX0+row+i);
                WriteCom(addY0+col);   
                for(j=0;j<x;j++){
                        if(col+j<64)WriteDat(tab[i*x+j]);
                        else if(right==0)
                                {                 
                                 cs1=1,cs2=0;                 
                                 WriteCom(addX0+row+i);         
                                 WriteCom(addY0+(col+j-64));
                                 WriteDat(tab[i*x+j]);
                         }                                                
                }
        }
}

/* 返回一个8*16字符索引位置 */                                       
uchar enN(uchar *s){
        uchar i;
        for(i=0;zm8x16_index[ i]!=0;i++)
                if(zm8x16_index[ i]==s[0])break;
        return i;        
}
/* 返回一个16*16字符索引位置 */
uchar cnN(uchar *s){
        uchar i;
        for(i=0;zm16x16_index[ i]!=0;i+=2)
                if(zm16x16_index[ i]==*s&&zm16x16_index[i+1]==*(s+1))break ;
        return i/2;
}
/* 显示中英文字符串 */
void showStr(uchar row,uchar col,uchar *s)
{
         uchar i;
         for(i=0;s[ i]!=0;i++){
                 if(s[ i]<0x80){      
                        showXY(row,col,8,2,zm8x16_Table[enN(&s[ i])]);
                        col+=8;
                }else{                        
                        showXY(row,col,16,2,zm16x16_Table[cnN(&s[ i])]);     
                        col+=16;i+=1;               
                }
                if(col>120)
                {         
                        col=0;
                        row+=2;
                }
         }
}


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

1301

帖子

1

粉丝