找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

大神帮我...12864时序

查看数: 2175 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-8-3 10:35

正文摘要:

help  为什么我那样的程序错了。。。

回复

ID:86938 发表于 2015-8-6 16:29
虽然控制器不一样,但指令都是一样的,只是延时稍有 ...
ID:87598 发表于 2015-8-5 14:01
E需要脉衝信號
ID:85313 发表于 2015-8-3 10:59
zhou961291176 发表于 2015-8-3 10:48
我用AVR硬件SPI,给你参考一下‘。我用过几款串行LCD,虽然控制器不一样,但指令都是一样的,只是延时稍有 ...

虽然看不懂,不过谢谢了~
ID:86389 发表于 2015-8-3 10:48
我用AVR硬件SPI,给你参考一下‘。我用过几款串行LCD,虽然控制器不一样,但指令都是一样的,只是延时稍有不同,改一下就能移植过来,而且都能正常显示。
//数据线定义:
// SI==========MOSI  // 十四脚
// A0==========PB0 //第四脚
// CS==========PB2//第二脚
// RES=========PB1 //第三脚
// SCL=========SCK //十三脚
/////////////////////////////////////////

///////////////////////////////
//发送一个字节到ST7565P并等待发送完毕
//入口:要发送的字节
//返回值:无
////////////////////////////////
void SPIByte(unsigned char byte)   
{
     SPDR = byte;     //写数据
     while(!(SPSR & (1<<SPIF)));  //等待发送完成
}
////////////////////////////////////////////////
//将一个字节发送的ST7565P的函数
//入口参数: select ,data
//select:根据此值确定发送给ST7565P的是数据还是命令
//data: 要发送给ST7565的一个字节
//返回值:无
////////////////////////////////////////////////
void LCD_SPISend(unsigned char select,unsigned char data)
{
     PORTB &= ~(1<<2);          // CS=0 芯片使能信号
     if(select == COMMAND)    //传输的是命令
      {      
          PORTB &= ~(1<<0);     // 根据ST7565P的数据手册,传输命令时A0应该是为低电平
          SPIByte(data);   
          PORTB |= 1<<0;            // A0=1   
      }
     else
     {
          SPIByte(data);
      }
     PORTB |= 1<<2;      //CS= 恢复不使能
}
////////////////////////////////////////////
//写坐标函数
//入口参数:x y
//y:  页面地址,此液晶将显示区域分为9个页面,y的值域0~8
//x:  列地址,值域:0~127
//返回值:无
////////////////////////////////////////////
void LCD_XYSet(unsigned char x,unsigned char y)
{
     LCD_SPISend(COMMAND,0xB0|y);           //y的值为0~8
     LCD_SPISend(COMMAND,0x10|(x>>4));
     LCD_SPISend(COMMAND,0x00|(x&0x0F));
}

void LCD_Init(void)
{   
     SPCR = 0x5C;  
     SPSR |= 1<<SPI2X;
//SPI的功能设置解释:使能SPI;采用主机模式;SPI的传输模式为模式3;时钟频率为系统时钟的两分频
        _delay_us(1);
     SPIByte(0xFF);         //可发可不发,无意义
     PORTB &= ~(1<<1);               //将复位脚拉低   
        _delay_ms(5);              //延时5ms,等待电源稳定
     PORTB |= 1<<1;                  //将复位脚拉高
     _delay_ms(5);
     LCD_SPISend(COMMAND,0xAE);         //将液晶屏的显示关掉
     LCD_SPISend(COMMAND,0xA3);         //设置偏压比
     LCD_SPISend(COMMAND,0xA0);         //设置SEG 输出方向
     LCD_SPISend(COMMAND,0xC8);         //设置公共端输出扫描方向
         
     LCD_SPISend(COMMAND,0x25);         //调整 (1 + Rb/Ra) ratio 值,调整此值影响很大
     LCD_SPISend(COMMAND,0x81);         //开始设置α的命令
     LCD_SPISend(COMMAND,0x0c);         //设置α的值,值越大对比度越强,调整此值影响不太,是

//微调的
     _delay_ms(5);
     LCD_SPISend(COMMAND,0x2F);         //开启相关电压
     _delay_ms(5);               
     LCD_SPISend(COMMAND,0xAF);         //显示开
     LCD_SPISend(COMMAND,0xF8);         
     LCD_SPISend(COMMAND,0x01);         //设置升压比
        _delay_ms(10);                      //延时
}
////////////////////////////////////////
//清屏函数
//入口:无
//返回值:无
///////////////////////////////////////
void Clear_Display(void)
{
     unsigned char i;
     unsigned char j;
     for(i=0;i<8;i++)
     {
        LCD_XYSet(0,i);
        for(j=0;j<128;j++)
        {
           LCD_SPISend(DATA,0);    //传输数据
        }
     }

}

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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