ImageVerifierCode 换一换
格式:DOC , 页数:4 ,大小:113.50KB ,
资源ID:7233139      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-7233139.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STM32串行驱动12864液晶.doc)为本站会员(scg750829)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

STM32串行驱动12864液晶.doc

1、自己参考大神们的程序改写的液晶驱动,希望对有需要的人能有帮助#include “stm32f10x.h“static _IO uint32_t TimingDelay;void RCC_Configuration(void);void Delay(_IO uint32_t nTime);#define Line1 0x80/液晶第一行#define Line2 0x90/液晶第二行#define Line3 0x88/液晶第三行#define Line4 0x98/液晶第四行#define LCD_IO GPIOE /我用的是 E.2 E.3 E.4 E.5 E.6#define CS GPI

2、O_Pin_2#define RW GPIO_Pin_3#define CLK GPIO_Pin_4#define PSB GPIO_Pin_5#define RST GPIO_Pin_6#define SET(n) GPIO_SetBits(GPIOE,n) /将对应管脚输出高电平#define RESET(n) GPIO_ResetBits(GPIOE,n)/输出低电平#define CMD (uint32_t)0xf8000000 /串行 写入的是命令要先写入 0xf8#define DATE (uint32_t)0xfa000000 / 串行 写入数据要先写入 0xfavoid LCD

3、_IOinit_OUT() /推挽输出模式 ,管脚配置,不多解释,库函数有GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin =CS|RW|CLK|PSB|RST; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_IO, void LCD_Write(uint32_t cmd,uint8_t ddata)/LCD 写函数uint32_t tem

4、p=cmd;uint32_t i;RESET(CS); /片选拉低temp|=(uint32_t)(ddataSET(CS); /片选拉高,开始传输数据for(i=0;i24;i+)if(temp /取出最高位,如果是 1,那么 RW 就写 1else RESET(RW); /如果是 0 RW 就写 0SET(CLK);/向液晶写数据 是在下降沿写入的Delay(2);/稍作延时RESET(CLK);/拉低产生下降沿,写入数据temp=temp1;/左移一位 ,写入下一位RESET(CS); /拉低片选,写入数据完毕void Display(uint8_t addr,uint8_t *hz)L

5、CD_Write(CMD,addr);Delay(3);while(*hz!=0)LCD_Write(DATE,*hz);hz+;Delay(3);void LCD_init()/液晶初始化RESET(CS); /拉低片选RESET(PSB);/PSB 拉低,表示是串行,拉高则是并行RESET(RST);/拉低 RSTDelay(100);SET(RST);Delay(40);LCD_Write(CMD,0x30);/8 位数据传输 Delay(40);LCD_Write(CMD,0x0c);/显示开,游标开 Delay(40);LCD_Write(CMD,0x01);/清屏 Delay(40

6、);LCD_Write(CMD,0x06);/进入点设定 AC+1 Delay(40); int main()RCC_Configuration();SysTick_Config(72000); /配置 SYSTICK 时钟节拍为 1ms 一次LCD_IOinit_OUT();LCD_init();while(1)Display(Line1,“你妹“);Display(Line2,“你妹“);Display(Line3,“你妹妹“);Display(Line4,“完事了,哈哈哈哈哈“);void RCC_Configuration(void)SystemInit(); RCC_APB2Peri

7、phClockCmd(RCC_APB2Periph_GPIOE , ENABLE);void Delay(_IO uint32_t nTime) TimingDelay = nTime;while(TimingDelay != 0);void TimingDelay_Decrement(void)if (TimingDelay != 0x00) TimingDelay-;/*temp|=(uint32_t)(ddata重点解释一下这里,从串行时序图中可以看出,发送一个指令需要三个字节,第一个是0xf8 或者 0xfa 这个根据你要发送的是命令还是数据而定,然后发送下一个数据的高四位和第四位,但

8、是数据都是在高四位上面,用 51 的话我们要分三次发送,但是 32 的话一个字节可以是 32 位的/所以我们一次就能完成,这也是为什么下面的 i24 的原因因为最后的 8位没有用,例如:我们发送指令 0x35,则应该是这样 0xf8 然后 0x30 然后 0x50,这个应该很好理解所以看一下上面的语句首先我们 cmd 的值应该为 0xf8000000,这个宏定义有的,这是发送命令然后我们让 cmd=temp;在把 temp 和后面的计算结果做按位或运算.首先看这个(uint32_t)(ddata&(uint8_t)0xf0)16)我们的 ddtate 是 0x35 他和 0xf0 按位与之后/

9、变为 0x30然后左移 16 位变成 0x30 0000;再强制转换为 32 位,就把高位补零变为 0x00 30 0000 再看这句话(uint32_t)(ddata&(uint8_t)0x0f)12)我们的 ddtate 是 0x35 他和 0x0f 按位与/之后变为0x05,左移 12 位 0x05 000 强制转换为 32 位 高位补零 0x000 05 000 /在和前面的相加就是 0x00 30 0000+0x000 05 000=0x0030 5000 然后在和前面的 0xf8000000 按位或变为0xf830 5000 液晶读这个数据的时候是 八位八位的读取 所以在液晶看来 是分四次的0xf8 0x30 0x50 0x00 显然后八位没用 所以我们只取前面的 24 位/应该能看懂了把 结合时序图 还有延时一定要精确大家有看不懂的可以给我留言*/

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报