液晶是晶联讯公司生产的SPI接口的JLX25696G-966液晶,
SPI接口下,引脚说明
当Ai8051U使用SPI外设驱动该液晶时,使用SPI外设的MOSI,SCK;RS(选择指令、数据寄存器)、RES(复位)、CS(片选信号)使用其它IO口控制,而MISO实际上在这里的例程中并不使用,我只是单向向液晶发数据。
从单片机向液晶发送数据、指令的时序:
时序要求:
脉冲时序没有有上限要求。而Ai8051U的SPI通讯速度根据手册说明:
SPI输入时钟的说明,我没有找到,只能看系统时钟分配
按照最快频率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"); }
测试效果:
对于数据的“数”的显示比较奇怪,明明在点阵数据文件中已经定义了,却显示不出来。
"测", 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之间。