stm32f103zet6串行写lcd12864

lcd.c

#include "lcd.h"
unsigned char table[][16]={"                ","                ","                ","                "};
void write_lcd_zijie(unsigned char zijie)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		if(0x80&zijie)
			RW_H;
		else
			RW_L;
		E_H;
    delay_us(10);
		E_L;
		delay_us(10);
	zijie<<=1;
	}
}
void write_lcd_cmd(unsigned char cmd)
{
	write_lcd_zijie(0xf8);
	write_lcd_zijie(0xf0&cmd);
	write_lcd_zijie(cmd<<4);	
}
void write_lcd_data(unsigned char data)
{
	write_lcd_zijie(0xfa);
	write_lcd_zijie(0xf0&data);
	write_lcd_zijie(data<<4);	
}
void lcd_xy(unsigned char x,unsigned char y)
{
	switch(y)
	{
  		case 0:write_lcd_cmd(0x80+x);break;
			case 1:write_lcd_cmd(0x90+x);break;
			case 2:write_lcd_cmd(0x88+x);break;
			case 3:write_lcd_cmd(0x98+x);break;
	}
}
void lcd_flushed()
{
	unsigned char i,j;
	for(i=0;i<4;i++)
	{
		lcd_xy(0,i);
		for(j=0;j<16;j++)
		{
			if(table[i][j]!=0)
				write_lcd_data(table[i][j]);
		}
	}
}
void lcd_init()
{
	RCC->APB2ENR|=1<<2;
	GPIOA->CRL&=0xFFFF0000;
	GPIOA->CRL|=0x00003333;
	RW_L;
	RS_L;
	E_L;
	PSB_L;
	
	RS_H;
	delay_us(10);
	write_lcd_cmd(0x01);
	delay_us(10);
	write_lcd_cmd(0x0c);
}

lcd.h

#ifndef __lcd_h
#define __lcd_h
#include "stm32f10x.h"
#include "delay.h"
#define RS_H GPIOA->ODR|=0x01
#define RW_H GPIOA->ODR|=0x02
#define E_H GPIOA->ODR|=0x04
#define PSB_H GPIOA->ODR|=0x08

#define RS_L GPIOA->BRR|=0x01
#define RW_L GPIOA->BRR|=0x02
#define E_L GPIOA->BRR|=0x04
#define PSB_L GPIOA->BRR|=0x08
void lcd_init(void);
void lcd_flushed(void);
void lcd_xy(unsigned char x,unsigned char y);
void write_lcd_data(unsigned char data);
void write_lcd_cmd(unsigned char cmd);
void write_lcd_zijie(unsigned char zijie);
extern unsigned char table[][16];
#endif

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32F103ZET6+sram+3.2TFT-lcd屏开发板硬件设计原理图+PCB源文件,Altium Designer 设计的工程文件,包括原理图及PCB文件,2层板设计,板子大小为116x90mm,双面布局布线,可以用Altium(AD)软件打开或修改,可作为你产品设计的参考。 主要器件如下: Library Component Count : 40 Name Description ---------------------------------------------------------------------------------------------------- ARM_JTAG ARM_JTAG-20PIN ASM1117-3.3 AT24LC02 I2C bus interface,2Kbit EEPROM BATTERY Battery BEAD BigPiranha_new CAP Capacitor CRYSTAL Crystal Cap Pol1 Polarized Capacitor (Radial) Cap Pol3 Polarized Capacitor (Surface Mount) ColorLCD_module D Schottky Schottky Diode DB9 DS18B20 Programmable Resolution 1-Wire Digital Thermometer ,TO-92 package ENC28J60 10M Ethernet Module with 4-spi interface Header 2 Header, 2-Pin Header 30 Header, 30-Pin Header 4X2 Header, 4-Pin, Dual row IS64WV51216BALL-TSOP44512k x 16 BIT COMS SDRAM,3.3V Inductor Inductor JP2 Jumper3 LED2 Typical RED, GREEN, YELLOW, AMBER GaAs LED MAX3232 NPN PJ202A PRTR5V0U2X SOT143, 4-Leads, Ultra low capacitance double rail-to-rail ESD protection diode R Res3 Resistor SD_CARD SN65HVD230D SW PUSHBUTTON SE PUSHBUTTON SW-PB Switch SW-SPDT SPDT Subminiature Toggle Switch, Right Angle Mounting, Vertical Actuation URF04 Ultrasonic wave distanc measure module VS1003b-Module MP3 module XTAL Crystal Oscillator miniUSB-A miniUSB-A interface nRF24L01 nRF24L01,2.4GHz wireless communication moudle interface res1 Resistor
好的,我可以为你提供一个基于STM32F103C8芯片的LCD12864串行通信驱动代码示例,假设使用的是SPI通信协议。 ```c #include <SPI.h> // 定义SPI通信引脚 const int LCD_CS_PIN = PB12; // 片选引脚 const int LCD_CLK_PIN = PB13; // 时钟引脚 const int LCD_MOSI_PIN = PB15; // MOSI引脚 // LCD12864初始化命令 const uint8_t LCD_INIT_CMD[] = {0xe2, 0xa3, 0xaf, 0xa2, 0xc0, 0xa4, 0x2f, 0xaf}; // LCD12864清屏命令 const uint8_t LCD_CLEAR_CMD[] = {0xe2, 0xa3, 0xaf, 0xa2, 0xc0, 0xa4, 0x2f, 0xaf, 0xe2, 0xa3, 0xb0, 0xe2, 0xa3, 0xaf}; // 初始化SPI通信 void initSPI() { SPI.begin(SPI_MODE_MASTER, LCD_CLK_PIN, LCD_MOSI_PIN, LCD_CS_PIN); SPI.setClockDivider(SPI_CLOCK_DIV16); SPI.setDataMode(SPI_MODE3); } // 发送命令到LCD12864 void sendCmd(uint8_t cmd) { digitalWrite(LCD_CS_PIN, LOW); SPI.transfer(cmd); digitalWrite(LCD_CS_PIN, HIGH); } // 发送数据到LCD12864 void sendData(uint8_t data) { digitalWrite(LCD_CS_PIN, LOW); SPI.transfer(data); digitalWrite(LCD_CS_PIN, HIGH); } // 初始化LCD12864 void lcdInit() { for(int i=0; i<sizeof(LCD_INIT_CMD); i++) { sendCmd(LCD_INIT_CMD[i]); delay(10); } } // 清除LCD12864显示屏 void lcdClear() { for(int i=0; i<sizeof(LCD_CLEAR_CMD); i++) { sendCmd(LCD_CLEAR_CMD[i]); delay(10); } } void setup() { pinMode(LCD_CS_PIN, OUTPUT); digitalWrite(LCD_CS_PIN, HIGH); initSPI(); lcdInit(); lcdClear(); } void loop() { // 显示内容 // ... } ``` 以上代码是一个基于STM32F103C8芯片的LCD12864 SPI通信驱动代码示例,其中包括初始化SPI通信、发送命令和数据、LCD12864初始化和清屏等基本操作。需要注意的是,具体的通信协议和命令可能与示例代码不同,需要参考LCD12864的具体说明文档进行调整。同时,对于不同的开发板和芯片,引脚定义可能也会不同,需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

懿761

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

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

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

打赏作者

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

抵扣说明:

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

余额充值