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

📄 123.c

📁 12864液晶程序
💻 C
📖 第 1 页 / 共 2 页
字号:
":",0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00, 
" ",0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
"(",0x00,0x00,0x00,0xE0,0x18,0x04,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x00,0x00, 
")",0x00,0x00,0x00,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x00,0x10,0x0C,0x03,0x00,0x00, 
}; 

#define ASC_HZ_WIDTH        12 
//#define ASC_HZ_HEIGHT        12 

typedef struct typFNT_GB16        /*12*16 汉字字模显示数据结构 */ 
{ 
        char Index[2]; 
        char Msk[24]; 
}; 
struct typFNT_GB16 const GB_16[] = {        /* 宋体 9小五 显示为12*16 */ 
"液",0x19,0xE2,0x14,0x42,0xF2,0x2E,0x72,0x8F,0xAA,0x7A,0x02,0x00,0x01,0x07,0x00,0x00,0x07,0x04,0x04,0x02,0x01,0x02,0x04,0x00, 
"晶",0x00,0xC0,0x40,0x5F,0xD5,0x15,0xD5,0x55,0x5F,0x40,0xC0,0x00,0x00,0x07,0x05,0x05,0x07,0x00,0x07,0x05,0x05,0x05,0x07,0x00, 
"显",0x00,0x40,0x9F,0x15,0xD5,0x15,0xD5,0x15,0x1F,0xC0,0x00,0x00,0x04,0x04,0x05,0x04,0x07,0x04,0x07,0x06,0x05,0x04,0x04,0x00, 
"示",0x10,0x12,0x92,0x52,0x12,0xF2,0x12,0x12,0x53,0x92,0x10,0x00,0x02,0x01,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x03,0x00, 
"的",0xFC,0x44,0x46,0x45,0xFC,0x10,0x2C,0xC7,0x04,0x04,0xFC,0x00,0x07,0x02,0x02,0x02,0x07,0x00,0x00,0x04,0x04,0x04,0x03,0x00, 
"第",0x04,0xEA,0xAB,0xAE,0xAA,0xFC,0xAA,0xAB,0xAE,0xBA,0x82,0x00,0x04,0x04,0x02,0x01,0x00,0x07,0x00,0x02,0x02,0x02,0x01,0x00, 
"一",0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
"行",0x48,0x24,0xF3,0x08,0x09,0x09,0x09,0x09,0xF9,0x09,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x04,0x04,0x04,0x07,0x00,0x00,0x00, 
"二",0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00, 
"三",0x00,0x02,0x22,0x22,0x22,0x22,0x22,0x22,0x23,0x02,0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00, 
"四",0x00,0xFF,0x81,0x41,0x3F,0x01,0x01,0xFF,0x81,0x81,0xFF,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x07,0x00, 
"五",0x00,0x11,0x11,0x91,0x7F,0x11,0x11,0x11,0xF1,0x01,0x00,0x00,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x00, 

}; 

unsigned char GetPage(void) /*得到当前页*/ 
{ 
        return CurPage; 
} 

unsigned char GetCol(void) /*得到当前列*/ 
{ 
        return CurCol; 
} 

void SetPageCol(unsigned char upage, unsigned char ucol) /* 设置液晶的页和列 */ 
{ 
        CurPage = upage; 
        CurCol = ucol; 
        if(ucol<64) 
        { 
                set_page_L(upage); 
                set_col_addr_L(ucol); 
        } 
        else 
        { 
                set_page_R(upage); 
                set_col_addr_R(ucol-64); 
        } 
} 

/* 设置当前显示的页和列 */ 
void SetRowCol(unsigned char urow, unsigned char ucol)  
{ 
        unsigned char page; 
        CurRow = urow; 
        CurCol = ucol; 
         
        switch(urow) 
        { 
                case 1: 
                        page=0; 
                        CurOffset=1; 
                        break; 
                case 2: 
                        page=1; 
                        CurOffset=2; 
                        break; 
                case 3: 
                        page=3; 
                        CurOffset=1; 
                        break; 
                case 4: 
                        page=4; 
                        CurOffset=2; 
                        break; 
                case 5: 
                        page=6; 
                        CurOffset=1; 
                        break; 
        } 
        SetPageCol(page,ucol); 
} 

void disp_char(unsigned char c) 
{ 
        unsigned char k,j,uPage,uCol,ch_r,ch_w; 
        unsigned char width; 
        unsigned char len; 
        uPage = GetPage(); 
        uCol = GetCol(); 
        len=sizeof(ASC_16)/sizeof(ASC_16[0]); 
        for(k=0;k<len;k++) 
        { 
                if(c == ASC_16[k].Index[0] ) break; 
        } 
        if(k<len) 
        { 
                 
                if(c=='-'||c==':')  
                        width=ASC_CHR_WIDTH-2; 
                else if(c=='|') 
                        width=ASC_HZ_WIDTH-ASC_CHR_WIDTH; 
                else  
                        width=ASC_CHR_WIDTH; 
                 
                if(CurOffset==1) //下半部是写半个字节 
                { 
                        for(j=0;j<width;j++) 
                        { 
                                SetPageCol(uPage,uCol+j); 
                                ch_w=ASC_16[k].Msk[j]; 
                                if(uCol+j<64)        write_LCD(LEFT,DATA,ch_w);  
                                else write_LCD(RIGHT,DATA,ch_w); 
                        } 
                        SetPageCol(uPage+1,uCol); 
                         
                        for(j=0;j<width;j++) 
                        { 
                                SetPageCol(uPage+1,uCol+j); 
                                if(uCol+j<64) ch_r=read_LCD(LEFT); 
                                else ch_r=read_LCD(RIGHT); 
                                ch_r&=0xf0; 
                                ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j]&0x0f;  
                                ch_w|=ch_r; 
                                SetPageCol(uPage+1,uCol+j); 
                                if(uCol+j<64)        write_LCD(LEFT,DATA,ch_w);  
                                else write_LCD(RIGHT,DATA,ch_w);  
                        } 
                } 
                else //上半部是写半个字节 
                { 
                        for(j=0;j<width;j++) 
                        { 
                                SetPageCol(uPage,uCol+j); 
                                if(uCol+j<64) ch_r=read_LCD(LEFT); 
                                else ch_r=read_LCD(RIGHT); 
                                ch_r&=0x0f; 
                                ch_w=ASC_16[k].Msk[j]; 
                                ch_w=ch_w<<4; 
                                ch_w|=ch_r; 
                                SetPageCol(uPage,uCol+j); 
                                if(uCol+j<64)        write_LCD(LEFT,DATA,ch_w);  
                                else write_LCD(RIGHT,DATA,ch_w);  
                        } 
                        SetPageCol(uPage+1,uCol); 
                        for(j=0;j<width;j++) 
                        { 
                                SetPageCol(uPage+1,uCol+j); 
                                 
                                ch_r=ASC_16[k].Msk[j]; 
                                ch_w=ASC_16[k].Msk[ASC_CHR_WIDTH+j]; 
                                ch_r=ch_r>>4; 
                                ch_w=ch_w<<4;  
                                ch_w|=ch_r; 
                                SetPageCol(uPage+1,uCol+j); 
                                if(uCol+j<64)        write_LCD(LEFT,DATA,ch_w);  
                                else write_LCD(RIGHT,DATA,ch_w);  
                        } 
                } 
        } 
        SetPageCol(uPage,uCol+width); 
} 


void disp_hz(unsigned char const *hz) 
{ 
        unsigned char k,j,uPage,uCol,ch_r,ch_w; 
        uPage = GetPage(); 
        uCol = GetCol(); 
        for(k=0;k<sizeof(GB_16)/sizeof(GB_16[0]);k++) 
        { 
                if(hz[0] == GB_16[k].Index[0] && hz[1] == GB_16[k].Index[1]) 
                        break; 
        } 

        if(CurOffset==1)  
        { 
        for(j=0;j<ASC_HZ_WIDTH;j++) 
        { 
                SetPageCol(uPage,uCol+j); 
                ch_w=GB_16[k].Msk[j]; 
                if(uCol+j<64)        write_LCD(LEFT,DATA,ch_w); 
                else write_LCD(RIGHT,DATA,ch_w); 
        } 
        SetPageCol(uPage+1,uCol); 

        for(j=0;j<ASC_HZ_WIDTH;j++) 
        { 
                SetPageCol(uPage+1,uCol+j); 
                if(uCol+j<64) ch_r=read_LCD(LEFT); 
                else ch_r=read_LCD(RIGHT); 
                ch_r&=0xf0; 
                ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]&0x0f;  
                ch_w|=ch_r; 
                SetPageCol(uPage+1,uCol+j); 
                if(uCol+j<64)        write_LCD(LEFT,DATA,ch_w);  
                else write_LCD(RIGHT,DATA,ch_w); 
        } 
        SetPageCol(uPage,uCol+ASC_HZ_WIDTH); 
        } 

        else //汉字上半部是写半个字节 
        { 
        for(j=0;j<ASC_HZ_WIDTH;j++) 
        { 
                SetPageCol(uPage,uCol+j); 
                if(uCol+j<64) ch_r=read_LCD(LEFT); 
                else ch_r=read_LCD(RIGHT); 
                ch_r&=0x0f; 
                ch_w=GB_16[k].Msk[j]; 
                ch_w=ch_w<<4; 
                ch_w|=ch_r; 
                SetPageCol(uPage,uCol+j); 
                if(uCol+j<64)        write_LCD(LEFT,DATA,ch_w);  
                else write_LCD(RIGHT,DATA,ch_w);  
        } 
        SetPageCol(uPage+1,uCol); 
        for(j=0;j<ASC_HZ_WIDTH;j++) 
        { 
                SetPageCol(uPage+1,uCol+j); 

                ch_r=GB_16[k].Msk[j]; 
                ch_w=GB_16[k].Msk[ASC_HZ_WIDTH+j]; 
                ch_r=ch_r>>4; 
                ch_w=ch_w<<4;  
                ch_w|=ch_r; 
                SetPageCol(uPage+1,uCol+j); 
                if(uCol+j<64)        write_LCD(LEFT,DATA,ch_w);  
                else write_LCD(RIGHT,DATA,ch_w);  
        } 
        SetPageCol(uPage,uCol+ASC_HZ_WIDTH); 
        } 
} 

void disp_str(unsigned char const *p) 
{ 
        unsigned char i=0; 
        while(p[i]>0) 
        { 
                if(p[i] < 128) 
                {        /* ASCII */ 
                        disp_char(p[i]); 
                } 
                else 
                {        /* 中文 */ 
                        disp_hz(&p[i]); 
                        i++; 
                } 
                i++; 
        } 
} 
void main() 
{ 
unsigned char i; 
DDRC=0xff; 
init_lcd(); 
clr_lcd(); 

SetRowCol(1,0); 
disp_str("液晶显示的第一行1234"); 
SetRowCol(2,0); 
disp_str("液晶显示的第二行2345"); 
SetRowCol(3,0); 
disp_str("液晶显示的第三行3456"); 
SetRowCol(4,0); 
disp_str("液晶显示的第四行5678"); 
SetRowCol(5,0); 
disp_str("液晶显示的第五行6789"); 
for(i=0;i<64;i++) pixel(127,i,1); 
for(i=0;i<64;i++) pixel(0,i,1); 
for(i=0;i<128;i++) pixel(i,0,1); 
for(i=0;i<128;i++) pixel(i,63,1); 

while(1); 

} 

⌨️ 快捷键说明

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