STM32单片机驱动LCD12864(型号:OCM J4X8C)

0.内容简介

1.LCD12864

OCM J4X8C数据表

2.STM32F103C8T6

STM32F103C8T6数据表

3.字符显示和绘图 

3.1 代码

/* 
 * 说明:LCD12864 OCMJ4X8C http://www.gptlcm.cn/ 串行通信
 */

#ifndef __LCDdisplay_H
#define __LCDdisplay_H

#include "stm32f10x_gpio.h"

#define LCD_CS_LOW()				GPIO_ResetBits(GPIOA, GPIO_Pin_4);	// CS=0
#define LCD_CS_HIGH()      	GPIO_SetBits(GPIOA, GPIO_Pin_4);		// CS=1    	
#define LCD_SID_LOW()       GPIO_ResetBits(GPIOA, GPIO_Pin_5);	// SID=0
#define LCD_SID_HIGH()      GPIO_SetBits(GPIOA, GPIO_Pin_5); 		// SID=1
#define LCD_SCLK_LOW()      GPIO_ResetBits(GPIOA, GPIO_Pin_6);	// SCLK=0
#define LCD_SCLK_HIGH()			GPIO_SetBits(GPIOA, GPIO_Pin_6); 		// SCLK=1
#define LCD_PSB_LOW()       GPIO_ResetBits(GPIOA, GPIO_Pin_7);	// PSB=0,串口通信 // 可接串口,也可直接接GND
#define LCD_PSB_HIGH()      GPIO_SetBits(GPIOA, GPIO_Pin_7);		// PSB=1,并口通信 // 可接串口,也可直接接VCC
#define LCD_RST_LOW()       GPIO_ResetBits(GPIOA, GPIO_Pin_3);	// RST=0,复位控制信号输入,低有效
#define LCD_RST_HIGH()      GPIO_SetBits(GPIOA, GPIO_Pin_3);		// RST=1

void LCD_Init(void); // LCD初始化
void LCD_CheckBusy(void); // 检测忙
void LCD_WriteByte(unsigned char byte); // 写一个字节
void LCD_WriteCmd(unsigned char cmdByte); // 写指令
void LCD_WriteData(unsigned char dataByte); // 写数据
void LCD_WriteString(unsigned char rowNum,unsigned char columnNum,unsigned char  *string); // 写字符串
void LCD_DrawPic(unsigned char *pic); // 绘图

#endif

3.2 字符显示和绘图效果

3.2.1 字符显示

3.2.2 绘图 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
下面是一个不使用中断的PIC32单片机OCMP驱动例程代码,该代码使用轮询方式实现OCMP的输出控制。 ```c #include <xc.h> #define SYSCLK 80000000L #define PBCLK SYSCLK/2 #define OC1_PERIOD 5000 #define OC1_PULSE_WIDTH 2500 void OCMP_Init() { // 配置OC1引脚为输出 TRISBbits.TRISB0 = 0; // 配置OC1模块 OC1CONbits.OCM = 0b110; // 配置PWM模式,输出电平为高电平 OC1CONbits.OCTSEL = 0; // 选择Timer2为时基 OC1CONbits.ON = 1; // 打开OC1模块 // 配置Timer2 T2CONbits.TCKPS = 0b000; // 选择1:1预分频 T2CONbits.T32 = 0; // 16位计数器模式 T2CONbits.TON = 1; // 打开Timer2 PR2 = OC1_PERIOD; // 设置周期值 } void OCMP_SetPulseWidth(int pulse_width) { if(pulse_width > OC1_PERIOD) { pulse_width = OC1_PERIOD; } OC1RS = pulse_width; // 设置脉宽值 } int main(void) { int pulse_width = OC1_PULSE_WIDTH; OCMP_Init(); // 初始化OCMP while(1) { // 更新脉宽值 pulse_width += 100; if(pulse_width >= OC1_PERIOD) { pulse_width = 0; } // 设置脉宽值 OCMP_SetPulseWidth(pulse_width); // 延时 for(int i = 0; i < 1000000; i++); } return 0; } ``` 在上面的代码中,我们使用了OCMP_Init()函数来初始化OCMP,包括配置PWM模式、选择Timer2为时基等参数。OCMP_SetPulseWidth()函数用于设置脉宽值。在主函数中,我们使用一个无限循环来不断更新脉宽值并设置到OCMP中,实现PWM信号的输出。为了演示效果,我们在更新脉宽值后加入了一个简单的延时,以便观察PWM信号的变化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云水僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值