头文件:
#ifndef __12864LCD_H__
#define __12864LCD_H__#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "sys.h"
#include "delay.h"
#include <stdlib.h>   /***控制端口GPIO定义***/
#define    LCD_RST          GPIO_Pin_0
#define    LCD_PSB          GPIO_Pin_1
#define    LCD_EN            GPIO_Pin_8
#define    LCD_RW           GPIO_Pin_9
#define    LCD_RS            GPIO_Pin_10//定义控制端口 置1
#define    Set_LCD_RS       GPIO_SetBits(GPIOD,LCD_RS)
#define    Set_LCD_RW      GPIO_SetBits(GPIOD,LCD_RW)
#define    Set_LCD_EN       GPIO_SetBits(GPIOD,LCD_EN)
#define    Set_LCD_PSB     GPIO_SetBits(GPIOD,LCD_PSB)
#define    Set_LCD_RST     GPIO_SetBits(GPIOD,LCD_RST)//定义控制端口 清0
#define    Clear_LCD_RS     GPIO_ResetBits(GPIOD,LCD_RS)
#define    Clear_LCD_RW    GPIO_ResetBits(GPIOD,LCD_RW)
#define    Clear_LCD_EN     GPIO_ResetBits(GPIOD,LCD_EN)
#define    Clear_LCD_PSB   GPIO_ResetBits(GPIOD,LCD_PSB)
#define    Clear_LCD_RST   GPIO_ResetBits(GPIOD,LCD_RST)/********数据端口GPIO定义*********/
#define     LCD_DB0            GPIO_Pin_0
#define     LCD_DB1            GPIO_Pin_1
#define     LCD_DB2            GPIO_Pin_2
#define     LCD_DB3            GPIO_Pin_3
#define     LCD_DB4            GPIO_Pin_4
#define     LCD_DB5            GPIO_Pin_5
#define     LCD_DB6            GPIO_Pin_6
#define     LCD_DB7            GPIO_Pin_7#define      LCD_CONTROL_PORT        GPIOD
#define      LCD_DATA_PORT           GPIOE//GPIO时钟
#define      LCD_CONTROL_PORT_CLOCK       RCC_AHB1Periph_GPIOD
#define      LCD_DATA_PORT_CLOCK          RCC_AHB1Periph_GPIOE#define      LCD_CONTROL_PIN              LCD_RST | LCD_PSB| LCD_EN | LCD_RW | LCD_RS
#define      LCD_DATA_PIN                 LCD_DB0 | LCD_DB1|LCD_DB2 | LCD_DB3 | LCD_DB4 |LCD_DB5 | LCD_DB6 | LCD_DB7void _NOP_(void);
void LCD12864_PORT_Init(void);
void LCD12864_WriteCmd(u8 cmd);                     //写命令函数
void LCD12864_WriteData(u8 data);                   //写数据函数
void LCD12864_Init(void);                           //初始化 12864
void Locate16(u8 X, u8 Y);
void DisPlayString(u8 X,u8 Y,u8 *str);              //显示字符串的函数
void LCD12864_Clear(void);
void LCD_ShiftLeft(void);
void LCD_ShiftRight(void);#endif
以下是驱动.c文件:
#include "12864LCD.h"void LCD12864_PORT_Init(void)
{GPIO_InitTypeDef  GPIO_PortInit;/************配置控制IO端口**********/RCC_AHB1PeriphClockCmd(LCD_CONTROL_PORT_CLOCK, ENABLE);//使能GPIOD时钟GPIO_PortInit.GPIO_Pin = LCD_CONTROL_PIN;//控制IO端口GPIO_PortInit.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_PortInit.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_PortInit.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_PortInit.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(LCD_CONTROL_PORT, &GPIO_PortInit);//初始化控制端口GPIO/************配置数据端口*************/RCC_AHB1PeriphClockCmd(LCD_DATA_PORT_CLOCK, ENABLE);//使能GPIOE时钟GPIO_PortInit.GPIO_Pin = LCD_DATA_PIN;//GPIO_PortInit.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式GPIO_PortInit.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_PortInit.GPIO_Speed = GPIO_Speed_100MHz;//100MHzGPIO_PortInit.GPIO_PuPd = GPIO_PuPd_UP;//上拉GPIO_Init(LCD_DATA_PORT, &GPIO_PortInit);//始化数据端口GPIO
}//稍作延时
void _NOP_(void)
{u8 i = 200;while(i > 0){i--;}
}/*******************************************************************/
/*写指令数据到LCD                                                 */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                            */
/*******************************************************************/
void LCD12864_WriteCmd(u8 cmd)    //写命令函数
{Clear_LCD_RS;  //RS = 0.Clear_LCD_RW;  //RW = 0. Set_LCD_EN;    //EN = 1._NOP_();_NOP_();LCD_DATA_PORT->ODR=((LCD_DATA_PORT->ODR & 0xff00)|cmd); //此处,// 只有直接操作寄存器才能//达到,只改变输出数据寄存器ODR的低8位,其它位//不变的目的。因为,只有低8位是数据引脚,//其它位可能是控制引脚,不能改变。_NOP_();_NOP_();Clear_LCD_EN;   //EN = 0;_NOP_();   _NOP_();
}
/*******************************************************************/
/*写显示数据到LCD                                                  */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
/*******************************************************************/
void LCD12864_WriteData(u8 data)  //写数据函数
{Set_LCD_RS;    //RS = 1. Clear_LCD_RW;  //RW = 0. Set_LCD_EN;    //EN = 1._NOP_();_NOP_();LCD_DATA_PORT->ODR=((LCD_DATA_PORT->ODR & 0xff00)|data);  _NOP_();_NOP_();Clear_LCD_EN;  //EN = 0;_NOP_(); _NOP_();
}
/*******************************************************************/
/*   LCD12864初始化                                                */
/*******************************************************************/
void LCD12864_Init(void)   //初始化 12864
{   Clear_LCD_RST;delay_ms(2);Set_LCD_RST;delay_ms(2);Set_LCD_PSB;  //令PSB=1,设置为并行数据模式delay_ms(2); LCD12864_WriteCmd(0x30);  //选择基本指令集,和,8位数据模式delay_ms(2);LCD12864_WriteCmd(0x0c);  //开显示,无游标,不反白.delay_ms(2); LCD12864_WriteCmd(0x01);  //清除显示,并将 DDRAM 的地址计数器 AC 设为 00H.delay_ms(2);LCD12864_WriteCmd(0x06);  //设置,外部读写数据后,地址记数器 AC 会自动加 1delay_ms(2);LCD12864_WriteCmd(0x80);  //将 DDRAM 地址计数器 AC 设为 0.delay_ms(2);
}
/********************************************************************************/
/* 设定显示位置,以下是光标定位函数,第一个参数为行坐标,                       */
/*   第二个为列坐标,起始坐标是1行1列。只能以16个点的宽度为单位移动             */
/********************************************************************************/
void Position(u8 X, u8 Y)
{switch(X){case 1: LCD12864_WriteCmd(0x80+Y); break;case 2: LCD12864_WriteCmd(0x90+Y); break;case 3: LCD12864_WriteCmd(0x88+Y); break;case 4: LCD12864_WriteCmd(0x98+Y); break;}
}
/*******************************************************************/
/*   LCD12864显示字符串                                            */
/*******************************************************************/
void DisPlayString(u8 X,u8 Y,u8 *str)    //显示字符串的函数
{if(X>4){X = 1;}if(Y>4){Y = 0;}Position(X,Y) ;      while(*str != '\0'){LCD12864_WriteData(*str);str++;delay_ms(5);}
}//清屏,清除LCD12864显示
void LCD12864_Clear(void)
{LCD12864_WriteCmd(0x01);
}//屏幕整体左移一格,用于LCD12864来做滚动显示
void LCD_ShiftLeft(void)
{LCD12864_WriteCmd(0x18);
}//屏幕整体右移一格,用于LCD12864来做滚动显示
void LCD_ShiftRight(void)
{LCD12864_WriteCmd(0x1C);
}

STM32F4_LCD12864并行驱动相关推荐

  1. STM32F10x并行驱动lcd12864遇到的问题及其解决方案

    程序 代码的移植时参见CSDN中的常见代码,网上几乎都一致.改动较小,常见为该管脚,因此需要注意. 改变管脚时要注意stm32中A.B管脚中有一部分管脚与烧录有关(例如B04),因此常要在启动前加入代 ...

  2. LCD1602液晶显示模块的单片机驱动深入详解之硬件篇

    (本文以HD44780主控芯片的LCD1602为蓝本进行描述,其中的截图也来自HD44780数据手册,用户可自行搜索其datasheet,有部分整理网上的,但绝对要比你看到的要深入得多) 一.接口 L ...

  3. 基于FPGA的LCD1602显示屏驱动

    一.LCD1602显示原理 1.引脚功能 其内部功能框图如下图所示: 一般来说,LCD1602有16条引脚,各个厂家的LCD1602可能略有不同,但基本上一样,其16个引脚功能如下: LCD1602引 ...

  4. LCD1602显示屏的驱动设置及例程

    一般来说,LCD1602有16条引脚,据说还有14条引脚的,与16脚的相比缺少了背光电源A(15脚)和地线K(16脚).我手里这块LCD1602的型号是HJ1602A,是绘晶科技公司的产品,它有16条 ...

  5. 【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第35章       STM32F407的FSMC总线应用之驱动A ...

  6. 【STM32F429开发板用户手册】第35章 STM32F429的FMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第35章       STM32F429的FMC总线应用之驱动AD ...

  7. 【STM32H7教程】第76章 STM32H7的FMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第76章       STM32H7的FMC总线应用之驱动AD ...

  8. STM32之GPIO并行输入输出数据编程技巧

    在STM32实际编程中,会遇到GPIO口连续的引脚并行输出应用,例如数码管驱动,LCD并行驱动,如果单独逐个去驱动IO口,编程麻烦,而且效率比较低,其实可以直接采用寄存器编程实现,这种思路的前提是,尽 ...

  9. 云网融合 — 云网融合与云网一体化

    目录 文章目录 目录 云网融合 云网融合发展的 3 个阶段 1.云网协同 2.云网融合 3.云网一体化 云网融合 随着云网络逐步从基本能力层面延伸至产品和服务层面,网络服务也形成了自有生态,网络技术逐 ...

最新文章

  1. 2018-2019-1 20165330 《信息安全系统设计基础》第二周学习总结
  2. 探索Julia(part7)--数组与字典函数
  3. uniDBGrid导入数据库(转红鱼儿)
  4. 骁龙8性能巅峰旗舰!黑鲨5系列获3C认证:配备120W快充
  5. Voxengo音频插件合集:Voxengo Total Bundle for Mac
  6. QQ正常网页无法访问故障分析
  7. sqlplus连接mysql_sqlplus连接的三种方式
  8. 目前常见软件保护技术概述
  9. Python获取高德POI(关键词搜索法)
  10. Unity3d C#解决transform.LookAt朝向前后翻转问题(含源码)
  11. css实现日出日落效果
  12. Python re模块 (正则表达式用法剖析详解)
  13. java画板之“山峰”
  14. 51单片机硬件设计-最小系统(一)
  15. Mobvista发行价为4港元 拟12月12日港交所上市
  16. 【Zabbix】Zabbix微信告警配置演示
  17. 为什么不从列表继承 T ?
  18. 开源许可协议:GPL、LGPL、AGPL、MPL和BSD、MIT、Apache
  19. matlab如何修复照片裂纹,把撕裂破旧老照片修复还原的PS技巧
  20. 做淘客怎么引流?淘客推广技巧,淘客引流方法有哪些?

热门文章

  1. 用于主题检测的临时日志(d94169f9-f1c0-45a2-82d4-6edc4bd35539 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)...
  2. 解决Ubuntu Adobe Reader 菜单栏空白
  3. 服务机器人---设计中的仿真
  4. lk中内联调用的dsb()
  5. WINCE---内核(kernel)---内存架构(memory archtitecture)学习
  6. BurpSuite插件开发指南之 Java 篇
  7. 华月互网获得2012全国十大IDC服务商
  8. 02NSString 转换 UTF8
  9. DSOframer注册使用说明
  10. 三步骤定位Windows崩溃进程