stm32f103zet6串行驱动12864
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
精心整理12864串行stm32f103zet6战舰V3学习版
在资料最下面有工程文件,直接烧录就可以使用。希望大家尊重我的劳动成果,下载下来。
每个语句注释,在工程文件中都有。12864相关驱动在key.c和Key.h中
经我验证,可以用stm32引脚控制12864
如上图为12864串口时序图
串行数据传送共分三个字节完成:
第一字节:串口控制—格式11111ABC
A为数据传送方向控制:H表示数据从LCD到MCU,L表示数据从MCU到LCD
B为数据类型选择:H表示数据是显示数据,L表示数据是控制指令
C固定为0
第二字节:(并行)8位数据的高4位—格式DDDD0000
第三字节:(并行)8位数据的低4位—格式0000DDDD
以上是说明书给的出的,
个人理解
从图上可以看出串行传输时需要用到CS,SCLK,SID三根信号线,但是由于CS 是高电平有效,所以也可以把CS长接高电平,那样就只需要两根线就OK了,当然当使用12864串行模式时,PSB引脚必须接低电平,复位RST引脚可以悬空不接,因为12864内部有上电复位电路。
所以电路图如下图所示
一定要查资料,看下PSB引脚是否和VCC连接在一起,我在育松上买的
QC12864B,液晶屏幕,太垃圾了,资料上都没有说明串行该怎么修改,结果调试时候发现,PSB引脚电平不对,后来一查,PSB引脚和VCC连接在一起了,所以一定要确保引脚电平正确。
串行数据传送共分三个字节完成:——理解就是传输一个字节需要三个字节来确定。
第一个字节:11111ABC
11111000单片机写控制指令给LCD
11111010单片机写数据给LCD
第三个字节:00001111
由于数据是传输是以一个字节8bits为单位,所以下面贴出传输一个字节的函数实现
voidWrite_Bits(u8bits)
{
u8i,Temp_Data;
for(i=0;i<8;i++)
{
Temp_Data=bits<
if((Temp_Data&0x80)==0)
{
Reset_SID;
Reset_SCLK;
Set_SCLK;
}
else
{
Set_SID;
Reset_SCLK;
Set_SCLK;
}
}
}
Temp_Data?=?W_bits<
//把数据依次左移?对于这个语句有点迷茫,知道是左移,有点疑惑,赶紧去百度,木有找到我心中的疑问,就去翻C语言书(一本好的C语言书是多重要,我用的是CPrimerPlus),第500页,有这样一句话,该操作产生一个新的位置,但是不改变其运算对象。例如,假设stonk为1,那么stonk<<2为4,但是stonk本身不变,仍为1。就是a=stonk<<2;(a=4,stonk=1)
在絮叨一句,传入形参数值bits不变,每次左移i位,新值付给Temp_Data,用一个if-else语句判断SID上的高低电平,然后再把数据传输出。
第一个字节:11111ABC
11111000单片机写控制指令给LCD
11111010单片机写数据给LCD
因为第一个字节不是固定的,RS和RW不一样,意义不同,故用形参。
voidLCD_Write_Byte(u8RW,u8RS,u8byta)
{
u8H_data,L_data;
u8SID_data=0xf8;//11111000
if(1==RW)
{
SID_data|=0x04;
}
else
{
SID_data&=~0x04;
}
if(1==RS)
{
SID_data|=0x02;
}
else
{
SID_data&=~0x02;
}
H_data=byta;
H_data&=0xf0;
L_data=byta;
L_data&=0x0f;
L_data<<=4;
Write_Bits(SID_data);
delay_us(250);
Write_Bits(H_data);
delay_us(250);
Write_Bits(L_data);
delay_us(250);
}
用逻辑串口查看引脚SID,CKK时序
主函数中用
LCD_Write_Byte(0,1,0X89);//写命令字
LCD_Write_Byte(0,0,0X31);//写命令字
时序图如图,
经对比,和串行时序图一直
在这里出现一个问题,地址归位放在清屏前,屏幕会会在左上角出现相同的数字,用单步仿真却正确。
如果把“地址归位”放在最后,莫名其妙问题就能处理了。
出现乱码,开始时有规律的乱码,后来是无规律的乱码,最终发现是用排线造成电压不稳,造成时序错误,固定死电源线后,正常。
选中——右键——保存文件即可