打印

LCD12864不带字库显示汉字解决

[复制链接]
8744|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位大神帮我看看为什么我的显示汉字是会是这样子的  谢谢
//基于KS0108IC的LCD程序---无字库程序  
//2012-5-23
//作者:奔跑着的水  
#include<reg52.h>
#include<intrins.h>
//#include<ziku.h>
#include<FANGGE.H>
#define dataport P0
sbit  rs=P2^0;//部分仿真里面是DI
sbit  rw=P2^1;
sbit  en=P2^2;//控制时能端
sbit  cs1=P2^3;
sbit  cs2=P2^4;
sbit  rest=P2^5;
sbit  SDA=P0^7;
sbit  SCK=P0^6;
#define uchar unsigned char
#define uint  unsigned int
uchar huan[]={0x80,0x84,0x44,0xC4,0xA4,0x94,0x8C,0xFF,0x8C,0x94,0xA4,0x24,0x44,0xC4,0x40,0x00,
0x00,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x00};//*欢*//
void screen(uchar see);
//LCD延时程序////
void delay_us(uchar i)
{
           while(i--) _nop_();
}
void delay1ms(uchar c)   //误差 0us,此程序由单片机
{
    unsigned char a,b,i;
    for(i=0;i<=c;i++)
        for(b=142;b>0;b--)
            for(a=2;a>0;a--);
}
void delay1s(uint n)   //误差 0us
{
    unsigned char a,b,c,d;
                for(d=0;d<n;d++)
           for(c=46;c>0;c--)
             for(b=152;b>0;b--)
              for(a=70;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}
//读取忙碌标志
void busy(void)
{
   P0=0X00;
   rs=0;
   rw=1;//LCD读指令状态
   en=1;
   while(P0&0x08);//为0时表示 不忙碌 ,程序继续执行
        _nop_();
        _nop_();
   en=0;
}
//LCD写指令程序
void  write_com(uchar com)
{
   busy();
   rs=0;
   rw=0;
   en=1;
   P0=com;
        _nop_();
        _nop_();
   en=0;
}
//LCD写数据程序
void write_data(uchar dat)
{
   busy();
   rs=1;
   rw=0;
   en=1;
   P0=dat;
        _nop_();
        _nop_();
   en=0;
}
//设置页地址
void set_page(uchar page)
{
   page=page|0xb8;//起始也地址为        0xb8(总共有八页)
   write_com(page);
}
//设置起始行
void set_line(uchar line)
{
   line=line|0xc0; //起始行地址为0xc0(一页八行)
   write_com(line);
}
//设置列
void set_cmm(uchar cmm)
{

    cmm=cmm&0x3f;
         cmm=cmm|0x40;//列最大地址我64  起始列地址为0x40
         write_com(cmm);
}
//选择分屏程序
void selcet(uchar see)
{
   switch(see)
         {
           case 0 :  cs1=0;cs2=0;break;//全屏
               case 1 :  cs1=0;cs2=1;break;//左屏
               case 2 :  cs1=1;cs2=0;break;//右屏
               
                 }   
}         
//清屏程序  从第一个开始  一直写0
void screen(uchar see)
{

    uchar i,j;
          selcet(see);
    for(i=0;i<8;i++)
          {
                 set_page(i);
                 set_cmm(0);//起始列
                   for(j=0;j<64;j++)
                     {
                              write_data(0x00);
                          }
          }       
}
void setonoff(uchar onoff)//0不显示  1显示
{
        onoff=onoff|0x3e;
        write_com(onoff);
}
void intlcd()
{
              busy();
                  selcet(0);
                  setonoff(0);
                  selcet(0);
                  setonoff(1);
                  selcet(0);
                  screen(0);
                  set_line(0);
}
//显示方格
void box1(uchar box)
{
    uchar i,j,k;
        //显示方格 所谓的棋局
        for(i=0;i<8;i++)
           {
                     set_page(i);
                  set_cmm(0);
                  set_line(0);
                  box=~box;
                     for(j=0;j<4;j++)//全屏显示  循环4次
                       {
                                     for(k=0;k<8;k++)
                                          write_data(box);
                                   for(k=0;k<8;k++)
                                          write_data(~box);
                           }
             }
}
void box2(uchar box)
{
              //delay1s(5);//延时3秒钟
              unsigned char i,j,k;
                  delay1s(5);
                     for(i=0;i<8;i++)
                  {
                           set_page(i);
                        set_cmm(0);
                        set_line(0);
                        box=~box;
                            for(j=0;j<4;j++)//全屏显示  循环4次
                               {
                                            for(k=0;k<8;k++)
                                              write_data(~box);
                                           for(k=0;k<8;k++)
                                              write_data(box);
                                   }
                  }
}
void line1(void)
{
            //screen(0);//为什么这样
             uchar n,m;
            screen(0);
        for(n=0;n<8;n++)
                   {
                             set_page(n);
                          set_cmm(0);
                          set_line(0);
                            for(m=0;m<64;m++)
                                   {
                                             write_data(0xaa);
                                   }

                   }
          delay1s(3);//延时3秒钟
             screen(0);
             for(n=0;n<8;n++)
                   {
                             set_page(n);
                          set_cmm(0);
                          set_line(0);
                            for(m=0;m<64;m++)
                                   {
                                             write_data(0x55);
                                   }

                   }
}
void line2(uchar line)
{
       uchar i,j,k;
           for(i=0;i<8;i++)
              {
                            set_page(i);
                          set_line(0);
                          set_cmm(0);
                             for(j=0;j<4;j++)
                                    {
                                                for(k=0;k<8;k++)
                                                   write_data(line);
                                                for(k=0;k<8;k++)
                                                   write_data(~line);
                                        }
                  }
                  //空白显示
           for(i=0;i<8;i++)
              {
                            set_page(i);
                          set_line(0);
                          set_cmm(0);
                             for(j=0;j<4;j++)
                                    {
                                                for(k=0;k<8;k++)
                                                   write_data(~line);
                                                for(k=0;k<8;k++)
                                                   write_data(line);
                                        }
                  }
}
void display_HZ(uchar page,line,cmm,see,uchar *p)
{
      uchar i;
          screen(0);//清全屏screen(0)
          selcet(see);//选择屏幕
          set_page(page);
          set_line(line);
          set_cmm(cmm);
              for(i=0;i<16;i++)
                      {
                                   write_data(p[i]);
                          }
          set_page(page+1);
          set_line(line);
          set_cmm(cmm);
               for(i=0;i<16;i++);
                       {
                                      write_data(p[i+16]);
                           }

}
void  main()
{
        intlcd();
        screen(0);
        set_line(0);
        box1(0xff);
        delay1s(5);
        box2(0xff);
        delay1s(5);
        line1();
        delay1s(3);
        line2(0xff);
        delay1s(3);
        display_HZ(3,0,0,1,huan);
    while(1);
}


QQ截图20130614191124.png (56.82 KB )

QQ截图20130614191124.png

QQ截图20130614191900.png (8.95 KB )

QQ截图20130614191900.png

相关帖子

沙发
流水随春去远| | 2013-6-15 20:03 | 只看该作者
看不懂

使用特权

评论回复
板凳
ningling_21| | 2013-6-15 20:58 | 只看该作者
write_data(p[i]);
改为:
write_data(*p);
p++;

试试。

下面一处也是。

使用特权

评论回复
地板
huangxz| | 2013-6-16 07:13 | 只看该作者
取模方式确定是正确的么

使用特权

评论回复
5
xyz549040622| | 2013-6-16 08:21 | 只看该作者
先测试只取某一位置的一个点,如果可以,那就是你取膜方向的错误

使用特权

评论回复
6
qdgd| | 2013-6-18 16:14 | 只看该作者
取模方式,肯定是对的,纵向,字节倒转

--------------
QQ 453189731

使用特权

评论回复
7
NE5532| | 2013-6-18 16:55 | 只看该作者
不要想一口吃天,先不要管字模,用固定的数据送去屏幕显示,把汉字的方块块显示清楚了,再来研究怎么把字模送上去显示。

使用特权

评论回复
8
Regsen| | 2013-6-19 08:29 | 只看该作者
你要确定自己的硬件和资料上写的是否一样的呢。12864我用的是横向取模,字符也不用倒转的么。

使用特权

评论回复
9
NE5532| | 2013-6-19 08:41 | 只看该作者
Regsen 发表于 2013-6-19 08:29
你要确定自己的硬件和资料上写的是否一样的呢。12864我用的是横向取模,字符也不用倒转的么。 ...

这个好像横竖都有。

使用特权

评论回复
10
奔跑着的水|  楼主 | 2013-6-21 09:03 | 只看该作者
NE5532 发表于 2013-6-19 08:41
这个好像横竖都有。

这样啊 我更改一下   谢谢

使用特权

评论回复
11
奔跑着的水|  楼主 | 2013-6-21 10:29 | 只看该作者
NE5532 发表于 2013-6-19 08:41
这个好像横竖都有。

我改了  发现还是出现一些乱码现象  

使用特权

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

本版积分规则

6

主题

55

帖子

0

粉丝