LCD2864 T 串行通信 STM32 MSP430 单片机 显示屏 显示测试程序
文章目录
- 动机
- 接线描述
- 效果
- 原理图
- main.c
- lcd12864.c
- lcd12864.h
动机
并行通信单片机需要用很多引脚连接LCD12864。串行可以最少只用2根通信引脚就能让显示屏显示。
接线描述
- 12864液晶串行显示测试程序
- 第 1脚 VSS -------- GND
- 第 2脚 VCC -------- 3.3V/5V
- 第 3脚 V0 -------- 对比度调节 可不接 LCD12864背面自带一个
- 第 4脚 RS/CS -------- 3.3V。接高电平直接片选上。
- 第 5脚 RW/SID -------- PA12 通信引脚
- 第 6脚 EN/SCLK -------- PA15 通信引脚
- 第15脚 PSB -------- 接GND。接低电平表示串行通信,接高电平表示并行通信。
- 第17脚 RST -------- 不接或者接高电平。低电平会导致复位。
- 第19脚 LEDA -------- 3.3V/5V
- 第20脚 LEDK -------- GND
- 其余引脚悬空。
- 并不是所有的12864都支持串口,程序不行就考虑是不是买到次品了
效果
原理图
main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"#include "lcd12864.h"int main( void )
{NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2 ); /* 设置NVIC中断分组2:2位抢占优先级,2位响应优先级 */delay_init(); /* 延时函数初始化 */RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE );GPIO_PinRemapConfig( GPIO_Remap_SWJ_JTAGDisable, ENABLE ); /* 关闭jtag,使能SWD,可以用SWD模式调试 */Lcd_Init();LCD_Display_Words( 0, 0, "串行通信测试ABCD" );LCD_Display_Words( 1, 0, "1234567812345678" );LCD_Display_Words( 2, 0, "无奈朝来寒雨晚来" );LCD_Display_Words( 3, 0, "风。@@@@@@@@@@@@" );while ( 1 ){}
}
lcd12864.c
#include "lcd12864.h"
#include "delay.h"/** 12864液晶串行显示测试程序* 第 1脚 VSS -------- GND* 第 2脚 VCC -------- 3.3V/5V* 第 3脚 V0 -------- 对比度调节 可不接 LCD12864背面自带一个* 第 4脚 RS/CS -------- 3.3V。接高电平直接片选上。* 第 5脚 RW/SID -------- PA12 通信引脚* 第 6脚 EN/SCLK -------- PA15 通信引脚* 第15脚 PSB -------- 接GND。接低电平表示串行通信,接高电平表示并行通信。* 第17脚 RST -------- 不接或者接高电平。低电平会导致复位。* 第19脚 LEDA -------- 3.3V/5V* 第20脚 LEDK -------- GND* 其余引脚悬空。* 并不是所有的12864都支持串口,程序不行就考虑是不是买到次品了**/#define LCDCS PAout( 11 )
#define LCDPSB PAout( 4 )
#define LCDRST PAout( 5 )void lcd_GPIO_init()
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE );/* GPIOE0,E1初始化设置 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_15 | GPIO_Pin_4 | GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /* 100MHz */GPIO_Init( GPIOA, &GPIO_InitStructure ); /* 初始化 */SID = 1;SCLK = 1;LCDCS = 1;LCDPSB = 0;LCDRST = 1;
}/* 字符显示RAM地址 4行8列 */
u8 LCD_addr[4][8] = {{ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87 }, /* 第一行 */{ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97 }, /* 第二行 */{ 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F }, /* 第三行 */{ 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F } /* 第四行 */
};/* LCD串行发送一个字节 */
void SendByte( u8 byte )
{u8 i;for ( i = 0; i < 8; i++ ){if ( (byte << i) & 0x80 ) /* 0x80(1000 0000) 只会保留最高位 */{SID = 1; /* 引脚输出高电平,代表发送1 */}else {SID = 0; /* 引脚输出低电平,代表发送0 */}SCLK = 0; /* 时钟线置低 允许SID变化 */delay_us( 5 ); /* 延时使数据写入 */SCLK = 1; /* 拉高时钟,让从机读SID */}
}/* LCD写指令 */
void Lcd_WriteCmd( u8 Cmd )
{delay_ms( 1 ); /* 由于我们没有写LCD正忙的检测,所以直接延时1ms,使每次写入数据或指令间隔大于1ms 便可不用写忙状态检测 */SendByte( WRITE_CMD ); /* 11111,RW(0),RS(0),0 */SendByte( 0xf0 & Cmd ); /* 高四位 */SendByte( Cmd << 4 ); /* 低四位(先执行<<) */
}/* LCD写数据 */
void Lcd_WriteData( u8 Dat )
{delay_ms( 1 );SendByte( WRITE_DAT ); /* 11111,RW(0),RS(1),0 */SendByte( 0xf0 & Dat ); /* 高四位 */SendByte( Dat << 4 ); /* 低四位(先执行<<) */
}/* LCD初始化 */
void Lcd_Init( void )
{lcd_GPIO_init();delay_ms( 50 ); /* 等待液晶自检(延时>40ms) */Lcd_WriteCmd( 0x30 ); /* 功能设定:选择基本指令集 */delay_ms( 1 ); /* 延时>100us */Lcd_WriteCmd( 0x30 ); /* 功能设定:选择8bit数据流 */delay_ms( 1 ); /* 延时>37us */Lcd_WriteCmd( 0x0c ); /* 开显示 */delay_ms( 1 ); /* 延时>100us */Lcd_WriteCmd( 0x01 ); /* 清除显示,并且设定地址指针为00H */delay_ms( 30 ); /* 延时>10ms */Lcd_WriteCmd( 0x06 ); /* 进入设定点,初始化完成 */
}/* 显示字符或汉字 x: row(0~3) y: line(0~7) str: 要显示的字符或汉字 */void LCD_Display_Words( uint8_t x, uint8_t y, uint8_t*str )
{Lcd_WriteCmd( LCD_addr[x][y] ); /* 写初始光标位置 */while ( *str > 0 ){Lcd_WriteData( *str ); /* 写数据 */str++;}
}/* 显示图片 *pic 图片地址 */
void LCD_Display_Picture( uint8_t *img )
{uint8_t x, y, i;Lcd_WriteCmd( 0x34 ); /* 切换到扩充指令 */Lcd_WriteCmd( 0x34 ); /* 关闭图形显示 */for ( i = 0; i < 1; i++ ) /*上下屏写入 */{for ( y = 0; y < 32; y++ ) /* 垂直Y写32次 */{for ( x = 0; x < 8; x++ ) /* 横向X写8次 */{Lcd_WriteCmd( 0x80 + y ); /* 行地址 */Lcd_WriteCmd( 0x80 + x + i ); /* 列地址 */Lcd_WriteData( *img++ ); /* 写高位字节数据 D15-D8 */Lcd_WriteData( *img++ ); /* 写低位字节数据 D7-D0 */}}}Lcd_WriteCmd( 0x36 ); /* 打开图形显示 */Lcd_WriteCmd( 0x30 ); /* 切换回基本指令 */
}/* 清屏函数 */
void LCD_Clear( void )
{Lcd_WriteCmd( 0x01 ); /* 清屏指令 */delay_ms( 2 ); /* 延时以待液晶稳定【至少1.6ms】 */
}
lcd12864.h
#ifndef __lcd12864_H_
#define __lcd12864_H_#include "sys.h"#define WRITE_CMD 0xF8 /* 写命令 */
#define WRITE_DAT 0xFA /* 写数据 */#define SID PAout( 12 ) /* SID引脚设置 */
#define SCLK PAout( 15 ) /* SCLK引脚设置 */void lcd_GPIO_init( void );void Lcd_Init( void );void SendByte( u8 Dbyte );void LCD_Clear( void );void LCD_Display_Words( uint8_t x, uint8_t y, uint8_t*str );void LCD_Display_Picture( uint8_t *img );void Lcd_WriteData( u8 Dat );void Lcd_WriteCmd( u8 Cmd );#endif
LCD2864 T 串行通信 STM32 MSP430 单片机 显示屏 显示测试程序相关推荐
- 基于stm32的OLED显示屏显示
文章目录 一.内容 二.关于SPI 三.关于OLED 四.功能实现 1)实验准备 2)代码准备 1.显示学号和姓名 2.显示AHT20的温度和湿度 3.滑动显示长字符 3)结果展示 五.参考内容 六. ...
- 【ZT】七大主流单片机最全面对比:51/STM32/MSP430/STC/TMS/PIC/AVR
http://www.52solution.com/news/80029883.html 七大主流单片机最全面对比:51/STM32/MSP430/STC/TMS/PIC/AVR sunny 201 ...
- STM32分别实现温湿度的采集和OLED显示屏显示数据
目录 一.温湿度的采集 1.1了解I2C总线协议 1.2实现AHT20采集程序 二.OLED显示屏显示数据 2.1了解SPI 2.2使用OLED显示 2.2.1实验题目: 2.2.2实验过程 三.总结 ...
- 基于STM32的0.96寸OLED显示屏显示数据和滚动显示
文章目录 一.SPI 二.OLED显示屏显示数据 2.1 代码实现 2.2 结果展示 三.0.96寸OLED滚动显示数据 3.1 滚动方式 3.2 对显示文字进行取模 3.3 代码实现 3.4 结果展 ...
- K_A32_002 基于STM32等单片机驱动红外接收模块 串口+OLED0.96显示
K_A32_002 基于STM32等单片机驱动红外接收模块 串口+OLED0.96显示 所有资源导航 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 时序: 对应程序: 四.部分代码说明 1 ...
- K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示
K_A12_007 基于STM32等单片机驱动AS608光学指纹识别模块 OLED0.96显示 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 对应程序: 四.部分代码说明 1.接线引脚定义 ...
- STM32单片机TFTLCD显示实验:TFTLCD简介
STM32单片机TFTLCD显示实验学习笔记 1.TFTLCD模块接口图 以2.8寸的TFTLCD为例,采用16位的并方式与外界进行连接,模块接口图如下所示: 具有如下一些信号线: CS:TFTLCD ...
- K_A28_004 基于STM32等单片机驱动SI4432对发SI4432实现数据传输 OLED显示
K_A28_004 基于STM32等单片机驱动SI4432对发SI4432实现数据传输 OLED显示 所有资源导航 一.资源说明 二.基本参数 参数 引脚说明 三.驱动说明 时序: 对应程序: 四.部 ...
- 基于MSP430单片机的微功耗中文人机界面设计
在现代便携式智能仪器或手持设备中,中文人机界面成为一种事实上的行业标准.能显示汉字的图形点阵液晶和可输入数字的小键盘已成为智能设备必不可少的组成部分.同时作为便携式设备基本要求的低功耗特性也贯穿于中文 ...
最新文章
- hihoCoder #1068 : RMQ-ST算法(模板)
- Django 1.10中更新modules同步数据库
- C++实现直接插入排序
- mysql5.6 临时表_MySQL5.6 运用临时表做SQL优化
- Python之路---------Python介绍
- linux-redhat替换yum网络源为centos网络源
- 在win7环境下使用网络无线共享把电脑变成一台无线路由器
- mysql导出(导入)数据库window平台
- 手把手教你下载安装配置Fiddler 和 Fiddler Everywhere
- Linux命令之lsof
- 宝塔面板搭建ftp服务器
- 程序员如何创建自己的网站
- superview透明问题
- 软件企业研发人员激励机制研究
- The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler
- neo4j 最短路径 java_Neo4j查询节点间最短路径
- 【Kafka】ZK、Kafka以及EFAK的安装、配置
- 车载冰箱E-mark认证要多长时间?
- 电子秤结构分析与设计
- 【学习】Android中View的工作原理(上)——ViewRoot、DecorView、MeasureSpec
热门文章
- GNU Bison 2.1 中文手册
- 新入职百度某员工发飙:前人代码写得像一坨屎,不能忍受,颠覆了对大厂的认知,...
- odoo13-14电商插件
- get这3种方式 轻松发送邮件超大附件
- 利用python编写爬虫程序,从招聘网站上爬取数据,将数据存入到MongoDB数据库中,将存入的数据作一定的数据清洗后做数据分析,最后将分析的结果做数据可视化
- 北京燃油车指标转成新能源指标怎么转?
- Deep Mutual Learning
- 光纤快速连接器如何安装使用?与冷接子有何区别?
- 基于FPGA的火焰识别系统开发——简化版
- dao层通用封装_层超类型模式:封装多层系统中的通用实现