液晶是晶联讯公司生产的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之间。

我要赚赏金
