搜索
bottom↓
回复: 20

用LCD12864怎么样才能象显示字符串那样显示中文中文

[复制链接]

出0入0汤圆

发表于 2007-7-28 13:56:51 | 显示全部楼层 |阅读模式
比如说,显示“我爱单片机”,用一个函数显示;

不想象这样用:

write_ch(wo);

write_ch(ai);

write_ch(dan);

write_ch(pian);

write_ch(ji);

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入10汤圆

发表于 2007-7-28 13:59:42 | 显示全部楼层
建议自己做个子函数,想怎么显示就怎么显示

出0入0汤圆

发表于 2007-7-28 14:05:18 | 显示全部楼层
带中文字库吗,带字库的就简单多了。

出0入0汤圆

 楼主| 发表于 2007-7-28 14:14:10 | 显示全部楼层
我想这样做:

比如显示“我爱单片机”,先在定义的数组查寻字符‘我’,如果查到,就显示‘我’后面的那32个数据(假定显示的是16X16汉字),如下:

const unsigned char hanzi[]={‘我’,0X11,0X12。。。。。。。};

但是编译时有错。这是怎么回事?请问!

出0入0汤圆

发表于 2007-7-28 14:35:10 | 显示全部楼层
#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,



};



...................

......

SetRowCol(1,0);

disp_str("液晶显示的第一行1234");

我就是这样用的呀

没有任何问题

出0入0汤圆

 楼主| 发表于 2007-7-28 14:43:47 | 显示全部楼层
再问一个菜的问题,"液"是不是3个字节的,因为中文字符是两个字节,再加上‘/0’。请问?

出0入0汤圆

发表于 2007-7-28 15:39:35 | 显示全部楼层
"液"的汉字内码就是两个字节呀,你干嘛要加'/0',这又不是串口传输数据

算了给你段代码自己看吧



这段代码是完全正常的



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>0)

        {

                if(p < 128)

                {        /* ASCII */

                        disp_char(p);

                }

                else

                {        /* 中文 */

                        disp_hz(&p);

                        i++;

                }

                i++;

        }

}

出0入0汤圆

发表于 2007-7-28 23:22:59 | 显示全部楼层
好东西,收下先。

出0入0汤圆

发表于 2007-12-18 17:28:06 | 显示全部楼层
这要看你的屏是否带汉字库,如过带汉字库就简单多了,如果没带,就要先取得汉字的字模,然后写进去就可以了
到我的博客上有完整的例子程序 http://blog.163.com/yu_gui_cao/

出0入0汤圆

发表于 2008-4-4 17:03:11 | 显示全部楼层
谢谢大家!

出0入0汤圆

发表于 2009-11-22 19:16:56 | 显示全部楼层
又学一招!

出0入0汤圆

发表于 2009-11-22 20:12:17 | 显示全部楼层
mark。

出0入0汤圆

发表于 2009-11-24 15:34:47 | 显示全部楼层
mark.

出0入0汤圆

发表于 2009-11-25 23:48:21 | 显示全部楼层
给你一个完整的12864的程序,已调试通过

#include "iom16.h"
#include "inavr.h"

#define LCD_EN   DDRD|=(0X01<<5);PORTD|=(0X01<<5)
#define LCD_DIS  DDRD|=(0X01<<5);PORTD&=~(0X01<<5)

#define LCD_R    DDRD|=(0X01<<6);PORTD|=(0X01<<6)
#define LCD_W    DDRD|=(0X01<<6);PORTD&=~(0X01<<6)

#define LCD_DATA DDRD|=(0X01<<7);PORTD|=(0X01<<7)
#define LCD_COM  DDRD|=(0X01<<7);PORTD&=~(0X01<<7)

// 片选1,高有效(前64列)*/
#define LCD_CS1_H  DDRD|=(0X01<<4);PORTD|=(0X01<<4)
#define LCD_CS1_L  DDRD|=(0X01<<4);PORTD&=~(0X01<<4)

// 片选2,高有效(后64列)
#define LCD_CS2_H  DDRD|=(0X01<<3);PORTD|=(0X01<<3)
#define LCD_CS2_L  DDRD|=(0X01<<3);PORTD&=~(0X01<<3)

//复位信号,低电平有效
#define LCD_RST_H  DDRD|=(0X01<<2);PORTD|=(0X01<<2)
#define LCD_RST_L  DDRD|=(0X01<<2);PORTD&=~(0X01<<2)

unsigned int j,f;


__flash  unsigned char  AscII[96][8]={
                                    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    /*" "=00H*/
                                    0x00,0x00,0x00,0x4F,0x00,0x00,0x00,0x00,    /*"!"=01H*/
                                    0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00,    /*"""=02h*/
                                    0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00,    /*"#"=03h*/
                                    0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00,    /*"$"=04h*/
                                    0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00,    /*"%"=05h*/
                                    0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00,    /*"&"=06h*/
                                    0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00,    /*"'"=07h*/
                                    0x00,0x00,0x1C,0x22,0x41,0x00,0x00,0x00,    /*"("=08h*/
                                    0x00,0x00,0x41,0x22,0x1C,0x00,0x00,0x00,    /*")"=09h*/
                                    0x00,0x14,0x08,0x3E,0x08,0x14,0x00,0x00,    /*"*"=0Ah*/
                                    0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00,    /*"+"=0Bh*/
                                    0x00,0x00,0x50,0x30,0x00,0x00,0x00,0x00,    /*";"=0Ch*/
                                    0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00,    /*"-"=0Dh*/
                                    0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,    /*"."=0Eh*/
                                    0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,    /*"/"=0Fh*/
                                    0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00,    /*"0"=10h*/
                                    0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00,    /*"1"=11h*/
                                    0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00,    /*"2"=12h*/
                                    0x00,0x21,0x41,0x45,0x4B,0x31,0x00,0x00,    /*"3"=13h*/
                                    0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00,    /*"4"=14h*/
                                    0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,    /*"5"=15h*/
                                    0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00,    /*"6"=16h*/
                                    0x00,0x01,0x01,0x79,0x05,0x03,0x00,0x00,    /*"7"=17h*/
                                    0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,    /*"8"=18h*/
                                    0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00,    /*"9"=19h*/
                                    0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,    /*":"=1Ah*/
                                    0x00,0x00,0x56,0x36,0x00,0x00,0x00,0x00,    /*";"=1Bh*/
                                    0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00,    /*"<"=1Ch*/
                                    0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00,    /*"="=1Dh*/
                                    0x00,0x00,0x41,0x22,0x14,0x08,0x00,0x00,    /*">"=1Eh*/
                                    0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00,    /*"?"=1Fh*/
                                    0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00,    /*"@"=20h*/
                                    0x00,0x7E,0x11,0x11,0x11,0x7E,0x00,0x00,    /*"A"=21h*/
                                    0x00,0x41,0x7F,0x49,0x49,0x36,0x00,0x00,    /*"B"=22h*/
                                    0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00,    /*"C"=23h*/
                                    0x00,0x41,0x7F,0x41,0x41,0x3E,0x00,0x00,    /*"D"=24h*/
                                    0x00,0x7F,0x49,0x49,0x49,0x49,0x00,0x00,    /*"E"=25h*/
                                    0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00,    /*"F"=26h*/
                                    0x00,0x3E,0x41,0x41,0x49,0x7A,0x00,0x00,    /*"G"=27h*/
                                    0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00,    /*"h"=28h*/
                                    0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x00,    /*"I"=29h*/
                                    0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00,    /*"J"=2Ah*/
                                    0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00,    /*"K"=2Bh*/
                                    0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00,    /*"L"=2Ch*/
                                    0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00,    /*"M"=2Dh*/
                                    0x00,0x7F,0x06,0x08,0x30,0x7F,0x00,0x00,    /*"N"=2Eh*/
                                    0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00,    /*"O"=2Fh*/
                                    0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00,    /*"P"=30h*/
                                    0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00,    /*"Q"=31h*/
                                    0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00,    /*"R"=32h*/
                                    0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00,    /*"S"=33h*/
                                    0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00,    /*"T"=34h*/
                                    0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00,    /*"U"=35h*/
                                    0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00,    /*"V"=36h*/
                                    0x00,0x7F,0x20,0x18,0x20,0x7F,0x00,0x00,    /*"W"=37h*/
                                    0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00,    /*"X"=38h*/
                                    0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x00,    /*"Y"=39h*/
                                    0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00,    /*"Z"=3Ah*/
                                    0x00,0x00,0x7F,0x41,0x41,0x00,0x00,0x00,    /*"["=3Bh*/
                                    0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,    /*"\"=3Ch*/
                                    0x00,0x00,0x41,0x41,0x7F,0x00,0x00,0x00,    /*"]"=3Dh*/
                                    0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00,    /*"^"=3Eh*/
                                    0x00,0x40,0x40,0x40,0x40,0x40,0x00,0x00,    /*"_"=3Fh*/
                                    0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00,    /*"`"=40h*/
                                    0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00,    /*"a"=41h*/
                                    0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00,    /*"b"=42h*/
                                    0x00,0x38,0x44,0x44,0x44,0x28,0x00,0x00,    /*"c"=43h*/
                                    0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00,    /*"d"=44h*/
                                    0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00,    /*"e"=45h*/
                                    0x00,0x00,0x08,0x7E,0x09,0x02,0x00,0x00,    /*"f"=46h*/
                                    0x00,0x0C,0x52,0x52,0x4C,0x3E,0x00,0x00,    /*"g"=47h*/
                                    0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00,    /*"h"=48h*/
                                    0x00,0x00,0x44,0x7D,0x40,0x00,0x00,0x00,    /*"i"=49h*/
                                    0x00,0x20,0x40,0x44,0x3D,0x00,0x00,0x00,    /*"j"=4Ah*/
                                    0x00,0x00,0x7F,0x10,0x28,0x44,0x00,0x00,    /*"k"=4Bh*/
                                    0x00,0x00,0x41,0x7F,0x40,0x00,0x00,0x00,    /*"l"=4Ch*/
                                    0x00,0x7C,0x04,0x78,0x04,0x78,0x00,0x00,    /*"m"=4Dh*/
                                    0x00,0x7C,0x08,0x04,0x04,0x78,0x00,0x00,    /*"n"=4Eh*/
                                    0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00,    /*"o'=4Fh*/
                                    0x00,0x7E,0x0C,0x12,0x12,0x0C,0x00,0x00,    /*"p"=50h*/
                                    0x00,0x0C,0x12,0x12,0x0C,0x7E,0x00,0x00,    /*"q"=51h*/
                                    0x00,0x7C,0x08,0x04,0x04,0x08,0x00,0x00,    /*"r"=52h*/
                                    0x00,0x58,0x54,0x54,0x54,0x64,0x00,0x00,    /*"s"=53h*/
                                    0x00,0x04,0x3F,0x44,0x40,0x20,0x00,0x00,    /*"t"=54h*/
                                    0x00,0x3C,0x40,0x40,0x3C,0x40,0x00,0x00,    /*"u"=55h*/
                                    0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00,    /*"v"=56h*/
                                    0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00,    /*"w"=57h*/
                                    0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00,    /*"x"=58h*/
                                    0x00,0x1C,0xA0,0xA0,0x90,0x7C,0x00,0x00,    /*"y"=59h*/
                                    0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00,    /*"z"=5Ah*/
                                    0x00,0x00,0x08,0x36,0x41,0x00,0x00,0x00,    /*"{"=5Bh*/
                                    0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x00,    /*"|"=5Ch*/
                                    0x00,0x00,0x41,0x36,0x08,0x00,0x00,0x00,    /*"}"=5Dh*/
                                    0x00,0x02,0x01,0x02,0x04,0x02,0x00,0x00,    /*"~"=5Fh*/
                                    0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00     /*" "=0x60*/
                                    };

__flash unsigned char FirstPage[1024]={
/*-- 调入了一幅图像:C:\Documents and Settings\freelover\桌面\未标题-1.bmp --*/
/*-- 宽度x高度=128x64 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x48,0x88,0x08,0x88,0x78,0x08,0x80,0x60,
0x3E,0xA0,0x20,0x20,0xA0,0x60,0x20,0x00,0x00,0x40,0x42,0x44,0xCC,0x00,0x00,0xF8,
0x08,0x04,0x04,0xF8,0x08,0x08,0x08,0xFC,0x08,0x00,0x00,0x00,0x80,0x40,0xF0,0x0E,
0x08,0xC8,0x48,0x48,0x48,0xFE,0x48,0x48,0x48,0xCC,0x08,0x00,0x00,0x00,0x00,0xFC,
0x44,0x44,0x44,0x44,0x44,0xFC,0x44,0x44,0x44,0x44,0xFE,0x04,0x00,0x00,0x80,0x40,
0x20,0x10,0x10,0x10,0x20,0x70,0x00,0x10,0xF0,0x10,0x10,0x10,0x10,0xE0,0x00,0x00,
0x10,0xF0,0x10,0x10,0x10,0x10,0xE0,0x00,0x00,0x00,0xF0,0x10,0x10,0x10,0x10,0x10,
0x10,0x00,0x00,0x00,0x20,0x20,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x19,0x06,0x05,0x08,0xB0,0x40,0x20,
0x18,0x07,0x18,0x20,0x40,0x80,0x80,0x00,0x00,0x80,0x40,0x20,0x1F,0x20,0x40,0x8F,
0x84,0x84,0x82,0xFF,0x80,0x88,0x90,0x8F,0x80,0x00,0x00,0x01,0x00,0x00,0xFF,0x00,
0x00,0x07,0x8C,0x54,0x24,0x5F,0x84,0x84,0x04,0x07,0x00,0x00,0x00,0x00,0xC0,0x3F,
0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x84,0x04,0xFF,0x00,0x00,0x00,0x1F,0x60,
0x80,0x80,0x80,0x80,0x40,0x30,0x00,0x80,0xFF,0x82,0x02,0x0E,0x32,0xC1,0x80,0x00,
0x80,0xFF,0x82,0x82,0x82,0x83,0x44,0x38,0x00,0x00,0x73,0x82,0x81,0x81,0x81,0x42,
0x3C,0x00,0x00,0x00,0x80,0x80,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x91,0x51,0x30,0x10,0x10,
0x90,0x50,0x10,0x10,0x00,0x01,0x10,0x10,0xF0,0x90,0x90,0x90,0x90,0x10,0xE0,0x00,
0x00,0xF0,0x00,0x00,0x00,0xC0,0x50,0x50,0x60,0x40,0xC0,0x40,0x60,0x50,0x51,0xC0,
0x01,0x01,0x00,0x00,0xE0,0x00,0x00,0x00,0x01,0xF1,0x01,0x00,0x00,0x01,0x00,0x00,
0x80,0x80,0xF0,0x80,0x80,0x01,0xE0,0x20,0x20,0xE1,0x00,0x00,0x00,0x00,0xE0,0x20,
0x20,0xA0,0x20,0x20,0x30,0xA0,0x20,0x20,0x20,0x20,0xE0,0x00,0xD0,0x10,0x10,0xF0,
0x00,0x00,0x80,0x40,0x30,0x40,0x80,0x00,0x00,0x00,0x80,0x80,0xF0,0x80,0x80,0xE0,
0x20,0x20,0x20,0x10,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x49,0x2D,0x8D,0x0B,0xF9,0x09,
0x08,0x2A,0x4C,0x98,0x00,0x00,0x04,0x03,0x84,0x48,0x30,0x0C,0x03,0x00,0x3F,0x00,
0x00,0xFF,0x00,0x00,0x40,0x5F,0x52,0x52,0x52,0x52,0xFF,0x52,0x52,0x52,0x52,0x5F,
0x40,0x00,0x00,0x80,0x7F,0x09,0x09,0x09,0x09,0x09,0x09,0xF9,0x01,0x01,0x00,0x00,
0x18,0x06,0xFF,0x04,0x08,0x80,0x7F,0x00,0x00,0xFF,0x00,0x00,0xC0,0x00,0x10,0x10,
0x12,0x94,0x99,0x52,0x30,0x1F,0x30,0x50,0x90,0x10,0x10,0x00,0x47,0x44,0x24,0x27,
0xFE,0x09,0x72,0x0A,0x72,0x82,0x60,0x1B,0x01,0x00,0x18,0x06,0xFF,0x04,0x88,0x7F,
0x05,0x89,0x51,0x71,0x8D,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x08,0xF9,0x08,0x08,
0x08,0xF8,0x08,0x08,0x00,0x00,0x01,0x01,0x30,0x28,0x20,0xE0,0x3C,0x20,0x20,0x35,
0x29,0x20,0x20,0x00,0x00,0x40,0x40,0x50,0x50,0x50,0xFD,0xD0,0x50,0x70,0x50,0x48,
0x40,0x00,0x01,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x81,0x80,0x80,0x80,0x00,
0x80,0x80,0x81,0x01,0x81,0x80,0x00,0x00,0x00,0x80,0x81,0x81,0x00,0x00,0x01,0x01,
0x81,0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x81,0x81,0x80,0x10,0xF0,0x81,0x81,
0x80,0x01,0x01,0x01,0x01,0x81,0x81,0x81,0x01,0x00,0x80,0x80,0x81,0x01,0x80,0x81,
0x81,0x00,0x00,0x80,0x80,0x81,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x21,0x11,0x0D,0x07,0x01,0x01,
0x01,0x3F,0x01,0x01,0x01,0x00,0x00,0x08,0x0C,0x26,0x23,0x30,0x17,0x1D,0x19,0x17,
0x31,0x20,0x20,0x00,0x00,0x04,0x04,0x02,0x3E,0x29,0x29,0x2A,0x2A,0x2A,0x3E,0x00,
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x0F,0x10,0x10,0x10,0x09,0x00,
0x10,0x10,0x1F,0x11,0x10,0x00,0x00,0x00,0x09,0x14,0x12,0x12,0x1F,0x10,0x00,0x19,
0x12,0x12,0x14,0x09,0x00,0x40,0x41,0x66,0x18,0x06,0x01,0x00,0x00,0x1F,0x10,0x10,
0x10,0x0F,0x00,0x00,0x0F,0x10,0x10,0x10,0x0F,0x00,0x40,0x41,0x66,0x18,0x06,0x01,
0x00,0x00,0x0F,0x12,0x12,0x12,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0x0E,0xF2,0x00,0xF2,0x0E,0x02,0x02,0xFE,0x22,0x22,
0x72,0x06,0x00,0x02,0xFE,0x12,0x32,0xD2,0x0C,0x00,0x00,0x00,0x18,0x18,0x00,0x00,
0x00,0x00,0x04,0x04,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,
0x04,0x02,0x02,0x04,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x03,0x02,0x02,
0x02,0x03,0x00,0x02,0x03,0x02,0x00,0x00,0x03,0x02,0x00,0x00,0x03,0x03,0x00,0x00,
0x00,0x00,0x02,0x02,0x03,0x02,0x02,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,
0x01,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};


void Nop(unsigned int k)
{
  while(k--);
}

void delay(unsigned int k)
{
  unsigned int a,b;
  for(a=0;a<k;a++)
    for(b=0;b<255;b++);

}
//检查屏状态

void CheckState_L(void)
{
  unsigned char dat;
  
  LCD_CS1_H;
  LCD_CS2_L;
  
  LCD_COM;
  LCD_R;
  
  do{
     DDRA =0xff;
     PORTA=0xff;
     
     LCD_EN;
     DDRA =0x00;
     Nop(2);
     dat=(PINA&0xff);
     LCD_DIS;  
     dat &=0x90; //仅当第4rest,7busy 为0时才可操作
    }while(dat==0x90);
}

//写命令
void Write_Command_L(unsigned char cmd)
{
  CheckState_L();
  LCD_W;
  LCD_COM;
  
  DDRA =0xff;
  PORTA=cmd;
  LCD_EN;
  LCD_DIS;
}

//写数据
void Write_Data_L(unsigned char dat)
{
  CheckState_L();
  LCD_W;
  LCD_DATA;
  
  DDRA =0xff;
  PORTA=dat;
  LCD_EN;
  LCD_DIS;
}



void CheckState_R(void)
{
  unsigned char dat;
  
  LCD_CS1_L;
  LCD_CS2_H;
  
  LCD_COM;
  LCD_R;

  do{
     DDRA =0xff;
     PORTA=0xff;
     
     LCD_EN;
     DDRA =0x00;
     Nop(2);
     dat=(PINA&0xff);
     LCD_DIS;  
     dat &=0x90; //仅当第4rest,7busy 为0时才可操作
    }while(dat==0x90);
}

//写命令
void Write_Command_R(unsigned char cmd)
{
  CheckState_R();
  LCD_W;
  LCD_COM;
  
  DDRA =0xff;
  PORTA=cmd;
  LCD_EN;
  LCD_DIS;
}

//写数据
void Write_Data_R(unsigned char dat)
{
  CheckState_R();
  LCD_W;
  LCD_DATA;
  
  DDRA =0xff;
  PORTA=dat;
  LCD_EN;
  LCD_DIS;
}

/*读显示数据

unsigned char Read_Data(void)
{
  unsigned char dat;
  
  LCD_DATA;  
  LCD_R;
  
  DDRA =0XFF;
  PORTA=0xff;
  LCD_EN;  
  Nop(10);
  dat=(PINB&0xff);
  LCD_DIS;  
  
  return(dat);
}
*/

void CLEAR(void)
{
  unsigned char add_x,add_y;
  for(add_y =0xb8;add_y!=0xC0;add_y++)  //以页地址作为循环量
  {
    Write_Command_L(add_y);  //  页地址
    Write_Command_L(0x40);     //  列地址设置
    for(add_x =0;add_x <64;add_x++)   
    {
      Write_Data_L(0x00);
    }
    Write_Command_R(add_y);  //  页地址
    Write_Command_R(0x40);     //  列地址设置
    for(add_x =0;add_x <64;add_x++)   
    {
      Write_Data_R(0x00);
    }
  }
}

void Write_char(unsigned char xpos,unsigned char ypos,unsigned char lcddata)  //一次写入一个字节
{
if(xpos<128 && ypos<8)
{
  if( ( xpos & 0x40 )== 0 )          // 左屏
    {
      Write_Command_L( 0xb8 | ypos );   //ypos 为页值
      Write_Command_L( 0x40 | xpos);    //xpos 为列值
      Write_Data_L( lcddata );
    }
  else                              // 右屏
    {
      Write_Command_R( 0xb8 | ypos );
      Write_Command_R( 0x40 | xpos);
      Write_Data_R( lcddata );
    }
  }
}

void lcd_putchar8x8( unsigned char x,unsigned char y,unsigned char ch )  //显示8×8字符
{
    unsigned char i;
        for( i = 0; i < 8; i ++ )
        {
          Write_char( x+i, y, AscII[ch-32] );
        }
}

void displaystr(unsigned char x,unsigned char y,unsigned char *str)
{
  unsigned char temp;
  for(;*str!=0;str++)
  {
    temp =*str;
    lcd_putchar8x8(x,y,temp);
    x +=8;
    if(x>=128)
      return;
  }
}

/*------------------显示12864图片---------------------------*/
void Disp_Img(unsigned char __flash *img)
{
  unsigned char i,k;
  for(k=0;k<8;k++)
  {
    delay(10);
    Write_Command_L(0xb8+k);
    Write_Command_L(0x40+0);
    for(i=0;i<64;i++)
      Write_Data_L(img[k*128+i]);
   
    delay(10);
    Write_Command_R(0xb8+k);
    Write_Command_R(0x40+0);
    for(i=64;i<128;i++)
      Write_Data_R(img[k*128+i]);
  }
}


/*************************************
            初始化函数            
************************************/
void InitLcd(void)
{
  LCD_RST_H;
  LCD_W;
  
  Nop(2000);
  Write_Command_L(0x3e);  //  关显示  
  Write_Command_R(0x3e);  //  关显示  
  
  Write_Command_L(0xc0);  //  显示起始行为0  
  Write_Command_R(0xc0);  //  显示起始行为0  
  
  Write_Command_L(0x3f);  //  开显示  
  Write_Command_R(0x3f);  //  开显示  
  
  CLEAR();
}


void InitTimer0(void)
{
  TCCR0 = 0x00; //stop/*定时器停止,TCCR0寄存器完全控制timer0的运行情况,详细可参考数据手册。*/
  TCNT0 =0x7f;      
  TCCR0 =0X02;//start timer/*定时器开始*/8预分频
  TIMSK =0X01;
  SREG |=0X80;
}
unsigned int Count;
unsigned char Hz;
#pragma vector=TIMER0_OVF_vect
__interrupt void Timer0(void)
{
  TCNT0=Hz;
  PORTC =~PORTC ;
}

int main( void )
{
  unsigned char p;         
  InitTimer0();
  InitLcd();
  Disp_Img(FirstPage);
  delay(5000);
  CLEAR();
  displaystr(0,0,"abcdefghijklmnop");
  displaystr(0,2,"qrstuvwxyz,';:.,");
  displaystr(0,4,"ABCDEFGHIJKLMNOP");
  displaystr(0,6,"QRSTUVWXYZ[]}{/~");
  displaystr(0,8,"!@#$%^&*()_+-><?");
  
  while(1);
}

出0入0汤圆

发表于 2010-1-5 23:28:43 | 显示全部楼层
mark,谢谢分享!

出0入0汤圆

发表于 2010-1-6 08:34:31 | 显示全部楼层
馬克....

出0入0汤圆

发表于 2010-1-7 20:33:16 | 显示全部楼层
我还是说个简单的,不然大家能把楼猪吓蒙,现打的,ST7920,带字库

/***** SPI 发送一个字节 ****/
void LCD_Send_Byte(uchar dat)
{
    ....
    ....
}

/****** 发送数据 ******/
void LCD_Send_Data(uchar dat)
{
    LCD_Send_Byte(0xFA);
    ....  
    ....
}

/***** 发送命令 *****/
void LCD_Send_CMD(uchar cmd)
{
    LCD_Send_Byte(0xF8);
    ....
    ....
}

void Show_Str(uchar *ptr,uchar addr,uchar length)
{
    uchar i;
    uchar command_data;
   
    command_data = addr;
    LCD_Send_CMD(command_data);
    Delay(100);
    for(i = 0; i < length; i++)
    {
        command_data = *ptr;
        LCD_Send_Data(command_data);
        ptr++;
    }
}

void main(void)
{
    Initial.....
    Show_Str("我爱单片机ABC123",0x80,16)
    while(1);
    ...
}

这样就OK,但没判断字符边界什么的,理解容易。

出0入0汤圆

发表于 2010-1-7 20:57:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-2 21:04:38 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-28 22:40:00 | 显示全部楼层
留着,以后用得着

出0入0汤圆

发表于 2013-9-23 16:26:30 | 显示全部楼层
怎么都是在贴代码呢。。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-27 00:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表