stm32 控制 lcd12864

lcd12864.h

#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_CS1           GPIO_Pin_3
#define    LCD_CS2           GPIO_Pin_4
#define    LCD_EN            GPIO_Pin_15
#define    LCD_RW            GPIO_Pin_1
#define    LCD_RS            GPIO_Pin_0//定义控制端口 置1
#define    Set_LCD_RS       GPIO_SetBits(GPIOF,LCD_RS)
#define    Set_LCD_RW       GPIO_SetBits(GPIOF,LCD_RW)
#define    Set_LCD_EN       GPIO_SetBits(GPIOG,LCD_EN)
#define    Set_LCD_CS1      GPIO_SetBits(GPIOF,LCD_CS1)
#define    Set_LCD_CS2      GPIO_SetBits(GPIOF,LCD_CS2)//定义控制端口 清0
#define    Clear_LCD_RS     GPIO_ResetBits(GPIOF,LCD_RS)
#define    Clear_LCD_RW     GPIO_ResetBits(GPIOF,LCD_RW)
#define    Clear_LCD_EN     GPIO_ResetBits(GPIOG,LCD_EN)
#define    Clear_LCD_CS1    GPIO_ResetBits(GPIOF,LCD_CS1)
#define    Clear_LCD_CS2    GPIO_ResetBits(GPIOF,LCD_CS2)/********数据端口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        GPIOF | GPIOF
#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

lcd12864.c

#include "12864LCD.h"void LCD12864_PORT_Init(void)
{GPIO_InitTypeDef  GPIO_PortInit;/************配置控制IO端口**********/RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG, ENABLE);//使能GPIOD时钟GPIO_PortInit.GPIO_Pin =  LCD_EN | LCD_RW | LCD_RS;//控制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( GPIOF , &GPIO_PortInit);//初始化控制端口GPIOGPIO_Init( GPIOG , &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
{   Set_LCD_CS1;Set_LCD_CS2;
//     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);
}

stm32 控制 lcd12864相关推荐

  1. MPU6050工作原理及STM32控制MPU6050

    一·简介: 1.要想知道MPU6050工作原理,得先了解下面俩个传感器: ①陀螺仪传感器: 陀螺仪的原理就是,一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的.人们根据这个道理,用它来保持 ...

  2. STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序

    STM32控制步进电机:基于定时器中断的ULN2003驱动器/步进电机驱动程序 一.ULN2003驱动器 1.工作原理 2.步距角以及一圈所需步数的计算 二.硬件连接 三.STM32F103定时器中断 ...

  3. mysql gprs 程序_基于STM32控制的GPS定位与GPRS发送数据(程序源码)

    一个用STM32控制的GPS与GPRS程序,GPS使用ublox的GPS,GPRS使用SIM800E,主要实现每隔几分钟(间隔时间由服务器设定,默认5分钟)将模块的定位结果数据发送到服务器中,服务器返 ...

  4. STM32控制HC-05蓝牙模块进行通信

    一.HC-05蓝牙模块 1. 简介 HC-05主从一体蓝牙串口模块采用英国CSR公司BlueCore4系列的芯片,符合符合蓝牙2.0+EDR规范,可以同带同种蓝牙功能的电脑.蓝牙主机和手机等智能终端配 ...

  5. HC-05蓝牙模块与STM32控制led灯亮详解

    HC-05蓝牙模块与STM32控制led灯亮 一.HC-05蓝牙模块解析 1.简介 2.HC-05原理 3.HC-05实物图 二.使用AT指令进行配置 1.进入命令响应工作模式 2.配置串口 3.进行 ...

  6. STM32控制电机简易教程

    STM32控制电机简易教程 包教包会 近期,电赛临近,来补习一下电机的使用方式,使用起来非常的方便 首先是在CUBEMX里面配置一些基本内容 然后是使用PWM去调速 其他的时钟和调试配置就不多说了. ...

  7. ESP32-CAM拍照输出RGB565数据,wifi传输到stm32控制tft屏显示拍照图像

    ESP32-CAM拍照输出RGB565数据,wifi传输到stm32控制tft屏显示拍照图像 拍照采用安信可的ESP32-CAM,显示屏采用2.2寸,TFT SPI 240x320屏幕,使用stm32 ...

  8. STM32控制舵机转动_从0到1

    清单 STM32F103C8T6 1个,Jlink下载线 1根 MG90S舵机 1个 12V电源 1个,12V转5V降压模块(给舵机供电) 1个 杜邦线数根 MG90S舵机 如图所示,舵机有三根线,红 ...

  9. 战舰STM32控制L9110电机驱动

    #STM32控制L9110电机驱动模块# #使用标准库 #需要材料(用其他STM32开发板也可以,对照硬件电路图改驱动即可) 1.战舰V3 2.L9110电机驱动模块 #main.c #include ...

  10. 利用stm32控制步进电机 速度加速度控制

    因为想申请 CSDN 博客认证需要一定的粉丝量,而我写了五年博客才 700 多粉丝,本文开启关注才可阅读全文,很抱歉影响您的阅读体验 利用stm32控制步进电机 尝试用42系步进电机做倒立摆,总结步进 ...

最新文章

  1. 第一次现场看球,第一次场看国家队打球,第一次场看国家队打架,第一次上电视,第... ......
  2. linux(CentOS)磁盘挂载数据盘
  3. scratch desktop的基本使用 - 如何使用积木
  4. 怎么让qt发声_第3部分:添加网络字体-让我们的单词发声
  5. linux备份mysql部分表数据,linux mysql 数据按表名称备份
  6. 【应用】Properties类与Properties配置文件的读写
  7. LeetCode 532. 数组中的K-diff数对
  8. Python操作读写txt文件
  9. ajax 微信code获取_计算机毕业设计中微信小程序实现微信登录(Java后台)
  10. 阿里技术副总裁贾扬清:我对人工智能的一点浅见 | 技术头条
  11. 白话 Golang 协程池
  12. paip.提升效率----更改数组LIST对象值for与FOREACH
  13. smart原则_写给中学生:用SMART原则制定寒假计划
  14. 可行性分析报告 模板
  15. 华为展望5G未来 安全问题成关键
  16. ewebeditor网页文本编辑器、图片回显、弹窗自动关闭并刷新父页面
  17. 计算机按键去抖动的方式,机械按键如何去处理按键抖动的问题
  18. 程序员的代码注释需要写么?
  19. 51单片机定时器中断按键消抖(无延时)
  20. PyTorch 图像分类识别(一)定义及加载自己的数据集并可视化

热门文章

  1. html 实现页面加载进度,网页加载进度条实现方案
  2. 如何防止社工钓鱼——软件伪造
  3. 西门子g120变频器接线图_西门子S7—1500第二十一讲(G120变频器第一篇)
  4. 架构师如何带领团队“攻城略地”?
  5. c#实现json转kml、kmz、shp格式
  6. 【cs231】损失函数与优化
  7. KELL中程序封装的实现
  8. 不能连接Formula One控件,请检查系统是否已安装或已注册该控件!
  9. 云计算机房的建设预算,云计算节省支出待验证 IDC机房建设每平米30万
  10. sonar下载安装配置教程