打印

LCD12864有关程序?

[复制链接]
1477|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
恬蔚|  楼主 | 2014-2-26 21:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void DisplayDots(uchar DotByte)
{
     uchar i,j;
     lcd_write_cmd(0x34);      //8Bit扩充指令集,即使是36H也要写两次
     lcd_write_cmd(0x36);      //绘图ON,基本指令集里面36H不能开绘图
     for(i=0;i<32;i++)            //12864实际为256x32
     {
           lcd_write_cmd(0x80|i);      //行位置
           lcd_write_cmd(0x80);      //列位置
           for(j=0;j<32;j++)      //256/8=32 byte
           {            //列位置每行自动增加
              lcd_write_data(DotByte);                  
           }
           DotByte=~DotByte;//&(按位与)、|(按位或)、^(按位异或)、~ (按位取反)
     }
}
这里说的 lcd_write_cmd(0x34);      //8Bit扩充指令集,即使是36H也要写两次
     lcd_write_cmd(0x36);      //绘图ON,基本指令集里面36H不能开绘图
即使是36H也要写两次、基本指令集里面36H不能开绘图?什么意思啊?大家都做过这个吧,好难啊,求帮助啊
还有这段:
void lcd_set_dot(unsigned char x, unsigned char y)
{
    unsigned char x_byte, x_bit;        //在横坐标的哪一个字节,哪一个位
    unsigned char y_byte, y_bit;
//    unsigned char tmph, tmpl;           //定义两个临时变量,用于存放读出来的数据
     
    x &= 0x7F;
    y &= 0x3F;
    x_byte = x / 16;                    //算出它在哪一个字节(地址)
                                        //注意一个地址是16位的
    x_bit = x&0x0F;                     //算出它在哪一个位
    y_byte = y /32;                     //y是没在哪个字节这个说法
                                        //这里只是确定它在上半屏还是下半屏
                                        //0:上半屏 1:下半屏
    y_bit = y&0x3F;                     //y_bit确定它是在第几行
     
    lcd_write_cmd(EXTEND_SET);          //扩展指令集
    lcd_write_cmd(DRAW_ON);            //绘图显示打开
    lcd_write_cmd(0x80 + y_bit);        //先写垂直地址(最高位必须为1)
                                        //具体参照数据手册
    lcd_write_cmd(0x80 + x_byte + 8 * y_byte);   //水平坐标
                                                 //下半屏的水平坐标起始地址为0x88
                                                 //(+8*y_byte)就是用来确定
                                                 //在上半屏还是下半屏
   
    if (x_bit < 8)                               //如果x_bit位数小于8
    {
        lcd_write_data(0x01 << (7 - x_bit));     //写高字节。因为坐标是从左向右的
                                                 //而GDRAM高位在左,底位在右
        lcd_write_data(0x00);                    //低字节全部填0

    }
    else
    {
        lcd_write_data(0x00);                    //高字节全部填0

        lcd_write_data(0x01 << (15 - x_bit));

    }  
     
    return ;

}
这两个都是设置坐标的吧?一个是适用于图像的,一个适用于文字吗?这个程序估计要看几天能明白了,指点下吧

相关帖子

沙发
zhangmangui| | 2014-2-27 09:12 | 只看该作者
对12864熟悉的帮忙看一下  谢谢

使用特权

评论回复
板凳
游子| | 2014-2-27 12:23 | 只看该作者
猜测:
第一个,写一整屏。按给定的字节,一行正显一行反显。36H是开图形模式。
第二个,显示一个点,x,y是显示点的坐标位置。
其实写图写文字,对液晶都是图形,基本都是按图形模式操作。

具体的要看液晶屏控制器资料,看什么指令是干啥的再分析。

使用特权

评论回复
地板
msblast| | 2014-2-27 13:30 | 只看该作者
先看手册,再看代码。

使用特权

评论回复
5
恬蔚|  楼主 | 2014-2-27 17:01 | 只看该作者
游子 发表于 2014-2-27 12:23
猜测:
第一个,写一整屏。按给定的字节,一行正显一行反显。36H是开图形模式。
第二个,显示一个点,x,y是 ...

PSB引脚要自己设置电平吗?我买的28335的板子内部会是连接好的吗

使用特权

评论回复
6
JCYAO| | 2014-3-3 23:42 | 只看该作者
我记得当年用28335,搞了有一个星期才搞成功

使用特权

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

本版积分规则

51

主题

147

帖子

1

粉丝