这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 【STCAi8051U】使用Ai8051U的SPI外设驱动液晶

共2条 1/1 1 跳转至

【STCAi8051U】使用Ai8051U的SPI外设驱动液晶

专家
2025-09-15 12:29:05     打赏

液晶是晶联讯公司生产的SPI接口的JLX25696G-966液晶,

图片1.png

SPI接口下,引脚说明

图片2.png

当Ai8051U使用SPI外设驱动该液晶时,使用SPI外设的MOSI,SCK;RS(选择指令、数据寄存器)、RES(复位)、CS(片选信号)使用其它IO口控制,而MISO实际上在这里的例程中并不使用,我只是单向向液晶发数据。

图片3.png

从单片机向液晶发送数据、指令的时序:

图片4.png

时序要求:

图片5.png

脉冲时序没有有上限要求。而Ai8051U的SPI通讯速度根据手册说明:

图片6.png

SPI输入时钟的说明,我没有找到,只能看系统时钟分配

图片7.png

按照最快频率33MHz计算,SPI时钟频率最快是16.5MHz,也就是60纳秒的样子。也就是说,无论怎么选择,都不用担心匹配不了液晶的情况。

初始化、发送数据以及指令的处理函数:

/************************************************
初始化SPI接口
入口参数: 无
  返回值: 无
************************************************/
void spi_init(void) {
    SET_LCD25696_CS();
    
    SPCTL = 0x50;//|0x80; //使能 SPI 主机模式
    SPCTL |= 0x11;  // SPI通讯速度 = SPI 输入时钟/2
    
    //00: P1.4 P1.5 P1.6 P1.7, 01: P2.4 P2.5 P2.6 P2.7, 10: P4.0 P4.1 P4.2 P4.3, 11: P3.5 P3.4 P3.3 P3.2
    SPI_S1 = 0;     //01: P2.4(SS)、P2.5(MOSI)、P2.6(MISO)、P2.7(SCK)
    SPI_S0 = 1;    
    
    SPSTAT = 0xc0; //清中断标志
    //ESPI = 1; //使能 SPI 中断
        
}
// 写指令到 LCD 模块 
// cmd:指令
void transfer_command_lcd(unsigned char cmd) { 
    char i; 
    
    // 片选
    CLR_LCD25696_CS();
    
    // 选择指令寄存器
    CLR_LCD25696_RS();
    
    // 传送8位数据,换成SPI发送
    SPDAT = cmd;   //发送数据
    while (!SPIF);  //查询完成标志
    SPIF = 1;       //清标志    
    
    SET_LCD25696_CS();
} 
// 写数据到 LCD 模块 
// data1:数据
void transfer_data_lcd(unsigned char data1) { 
    unsigned char i; 
    
    // 选中,允许读写
    CLR_LCD25696_CS();
    
    // 选择数据寄存器
    SET_LCD25696_RS();
    
    // 传送8位数据,换成SPI发送
    SPDAT = data1;   //发送数据
    while (!SPIF);  //查询完成标志
    SPIF = 1;       //清标志       
    
    // 取消选中,停止读写操作
    SET_LCD25696_CS();
}

测试函数:

void lcd25696_test(void) {
    printf(">>>>>lcd25696_test start\r\n");
    LED = 0;
    
    clear_screen(); //清屏 
display_string_16x16(0,0,"参数测试abc白日依山尽1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+-={}[]|:;'<>?,./1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ");
    display_string_16x16(0, 8, "abcdefgh");
    
    LED = 1;
    printf("<<<<<lcd25696_test end\r\n");
}


测试效果:

图片8.png

对于数据的“数”的显示比较奇怪,明明在点阵数据文件中已经定义了,却显示不出来。

"测", 0x08,0x44,0x36,0x00,0x01,0x3F,0x20,0x2F,

      0x20,0x7F,0x20,0x1F,0x00,0x7F,0x00,0x00,

      0x20,0x20,0x7F,0x80,0x02,0xE4,0x08,0xF0,

      0x08,0xE6,0x00,0xE2,0x01,0xFE,0x00,0x00,


"试", 0x02,0x42,0x33,0x00,0x08,0x09,0x09,0x09,

      0x09,0x09,0xFF,0x08,0x48,0x28,0x08,0x00,

      0x00,0x00,0xFE,0x04,0x08,0x04,0x06,0xFC,

      0x08,0x08,0x80,0x7C,0x02,0x01,0x0E,0x00,


"数", 0x08,0x49,0x2A,0x0C,0xFF,0x0A,0x29,0x4C,

      0x1B,0xE8,0x08,0x08,0x0F,0x18,0x08,0x00,

      0x40,0x41,0x72,0xCC,0x44,0x4A,0x71,0x02,

      0xC4,0x28,0x10,0x68,0x86,0x03,0x02,0x00,


"据", 0x08,0x08,0x08,0xFF,0x09,0x0A,0x7F,0x49,

      0x49,0x49,0x4F,0x49,0x49,0xFB,0x41,0x00,

      0x40,0x42,0x81,0xFE,0x02,0x1C,0xE0,0x3F,

      0x22,0x22,0xE2,0x22,0x22,0x7F,0x20,0x00,



另外测试SPI的通讯速度,SCK的频率在1.3MHz~1.4MHz之间。

图片9.png





关键词: 菜鸟学单片机     Ai8051U     液晶JLX25696    

院士
2025-09-15 12:56:41     打赏
2楼

SPI的速率是常规外设里面最快的。

主机模式还好,从机模式就要慢许多了


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]