初级会员
- 积分
- 55
- 金钱
- 55
- 注册时间
- 2021-12-15
- 在线时间
- 5 小时
|
我采用的是LM6020FCW液晶模块,用到的引脚功能如下图,采用的控制芯片是ST7565,采用控制模式是8080。
编写的程序如下:
#include "at32f413.h"
#include "at32f413_gpio.h"
#include "at32f413_conf.h"
void delay_ms(uint16_t m);void delay_us(uint8_t m);
void LCD_GPIO_init(void);
void WriteCom(uint8_t ComData);
void WriteData(uint8_t Data);
void hz_disp16(uint8_t x,uint8_t y,const uint8_t *DisplayData);
void num_disp8(uint8_t x,uint8_t y,const uint8_t *DisplayData);
void LCD_Init(void);
void LCM_Clear(void);
void hz_disp16f(uint8_t x,uint8_t y,const uint8_t *DisplayData);
void num_disp8f(uint8_t x,uint8_t y,const uint8_t *DisplayData);
void NOP(void);
const uint8_t char_0[]=
{0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00,0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00};
const uint8_t char_1[]=
{0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00};
const uint8_t wan[]=
{0x04,0x04,0x04,0x04,0x04,0xFC,0x44,0x44,0x44,0x44,0x44,0xC4,0x04,0x04,0x04,0x00,
0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00};
const uint8_t zhou[]=
{0x10,0x60,0x02,0x8C,0x00,0xC0,0x00,0xFF,0x40,0x80,0xFE,0x40,0x80,0xFF,0x00,0x00,
0x04,0x04,0x7E,0x01,0x01,0x80,0x60,0x1F,0x00,0x00,0x3F,0x00,0x00,0xFF,0x00,0x00};
void NOP(void)
{
}
void LCD_GPIO_init(void)
{
gpio_init_type gpio_init_struct;
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
gpio_default_para_init(&gpio_init_struct);
/************PA12 背光******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_12;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &gpio_init_struct);
/************PA15 CS******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_15;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &gpio_init_struct);
/************PC10 RES******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_10;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOC, &gpio_init_struct);
/************PC11 A0******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_11;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOC, &gpio_init_struct);
/************PC12 WR******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_12;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOC, &gpio_init_struct);
/************PD2 RD******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_2;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOD, &gpio_init_struct);
/************PB0 D0******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type =GPIO_OUTPUT_OPEN_DRAIN;
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_pins = GPIO_PINS_0;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &gpio_init_struct);
/************PB1 D1******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type =GPIO_OUTPUT_OPEN_DRAIN;
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_pins = GPIO_PINS_1;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &gpio_init_struct);
/************PB2 D2******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type =GPIO_OUTPUT_OPEN_DRAIN;
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_pins = GPIO_PINS_2;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &gpio_init_struct);
/************PB3 D3******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_pins = GPIO_PINS_3;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &gpio_init_struct);
/************PB4 D4******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_pins = GPIO_PINS_4;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &gpio_init_struct);
/************PB5 D5******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_pins = GPIO_PINS_5;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &gpio_init_struct);
/************PB6 D6******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_pins = GPIO_PINS_6;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &gpio_init_struct);
/************PB7 D7******************/
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_OPEN_DRAIN;
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_pins = GPIO_PINS_7;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &gpio_init_struct);
}
void WriteCom(uint8_t ComData)
{
gpio_bits_reset(GPIOA, GPIO_PINS_15);//CS=0
gpio_bits_reset(GPIOC, GPIO_PINS_11);// A0 = 0;
gpio_bits_set(GPIOD, GPIO_PINS_2);// RD = 1;
gpio_bits_reset(GPIOC, GPIO_PINS_12);//WR=0
delay_us(3);
gpio_port_wirte(GPIOB, (gpio_output_data_read(GPIOB)&0xff00)+ComData);
delay_us(3);
gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
gpio_bits_set(GPIOA, GPIO_PINS_15);//CS=1
/* gpio_bits_reset(GPIOC, GPIO_PINS_11);// A0 = 0;
gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
gpio_bits_set(GPIOD, GPIO_PINS_2);// RD = 1;
delay_us(3);
gpio_port_wirte(GPIOB, (gpio_output_data_read(GPIOB)&0xff00)+ComData);
delay_us(3);
gpio_bits_reset(GPIOA, GPIO_PINS_15);//CS=0
gpio_bits_reset(GPIOC, GPIO_PINS_12);//WR=0
delay_us(3);
gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
gpio_bits_set(GPIOA, GPIO_PINS_15);//CS=1 */
}
void WriteData(uint8_t Data)
{
gpio_bits_reset(GPIOA, GPIO_PINS_15);//CS=0
gpio_bits_set(GPIOC, GPIO_PINS_11);// A0 = 1;
gpio_bits_set(GPIOD, GPIO_PINS_2);// RD = 1;
gpio_bits_reset(GPIOC, GPIO_PINS_12);//WR=0
delay_us(3);
gpio_port_wirte(GPIOB,(gpio_output_data_read(GPIOB)&0xff00)+Data);
delay_us(3);
gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
gpio_bits_set(GPIOA, GPIO_PINS_15);//CS=1
/* gpio_bits_set(GPIOC, GPIO_PINS_11);// A0 = 1;
gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
gpio_bits_set(GPIOD, GPIO_PINS_2);// RD = 1;
delay_us(3);
gpio_port_wirte(GPIOB, (gpio_output_data_read(GPIOB)&0xff00)+Data);
delay_us(3);
gpio_bits_reset(GPIOA, GPIO_PINS_15);//CS=0
gpio_bits_reset(GPIOC, GPIO_PINS_12);//WR=0
delay_us(3);
gpio_bits_set(GPIOC, GPIO_PINS_12); // WR=1
gpio_bits_set(GPIOA, GPIO_PINS_15);//CS=1 */
}
void hz_disp16(uint8_t x,uint8_t y,const uint8_t *DisplayData)
{
uint8_t i,j;
for(i=0;i<2;i++)
{
WriteCom(0xb0|(2*x+i));
WriteCom(0x10|((y>>4)&0x0f));
WriteCom(0x01|(y&0x0f));
for(j=0;j<16;j++)
{
WriteData(*DisplayData++);
}
}
}
void num_disp8(uint8_t x,uint8_t y,const uint8_t *DisplayData)
{
uint8_t i,j;
for(i=0;i<2;i++)
{
WriteCom(0xb0|(2*x+i));
WriteCom(0x10|((y>>4)&0x0f));
WriteCom(0x01|(y&0x0f));
for(j=0;j<8;j++)
{
WriteData(*DisplayData++);
}
}
}
void LCD_Init(void)
{
gpio_bits_set(GPIOC, GPIO_PINS_10);//RES=1
gpio_bits_reset(GPIOC, GPIO_PINS_10);//RES=0
delay_ms(50);
gpio_bits_set(GPIOC, GPIO_PINS_10);//RES=1
delay_ms(800);
//WriteCom(0xaf);//CMD_DISPLAY_ON
//delay_ms(5);
WriteCom(0x40);// display start line=0
delay_ms(5);
WriteCom(0xa0);//ADC正序
delay_ms(5);
WriteCom(0xa6);//正常显示,a7反白显示
delay_ms(5);
WriteCom(0xa4);//CMD_DISPLAY_ALL_POINTS_OFF非全屏显示
delay_ms(5);
WriteCom(0xa2);//偏压1/9 a3偏压1/7
delay_ms(5);
WriteCom(0xc8);//CMD_COM_OUTPUT_MODE_SET模块上端为第0行
delay_ms(5);
WriteCom(0x2f);//CMD_POWER_CONTROL_SET模块内部开关电路电源
delay_ms(5);
WriteCom(0x27);//CMD_V0显示对比度,20-27
delay_ms(5);
WriteCom(0xf8);
delay_ms(5);
WriteCom(0x00);//倍压比
delay_ms(5);
WriteCom(0x81);
delay_ms(5);
WriteCom(0x24);//亮度0-3f
delay_ms(5);
WriteCom(0xaf);//CMD_DISPLAY_ON显示开
}
void LCM_Clear(void)
{
uint8_t i,j;
for (i=0xb0;i<0xb9;i++)
{
// Set Page Address
WriteCom(i);
// Set Column Address = 0
WriteCom(0x10);
WriteCom(0x00);
for (j=0;j<128;j++)
{
WriteData(0xaa);
}
}
}
void hz_disp16f(uint8_t x,uint8_t y,const uint8_t *DisplayData)
{
WriteCom(0xa7);
hz_disp16(x,y,DisplayData);
WriteCom(0xa6);
}
void num_disp8f(uint8_t x,uint8_t y,const uint8_t *DisplayData)
{
WriteCom(0xa7);
num_disp8(x,y,DisplayData);
WriteCom(0xa6);
}
int main(void)
{
LCD_GPIO_init();
LCD_Init();
LCM_Clear();
while(1)
{
gpio_bits_set(GPIOA, GPIO_PINS_12);
hz_disp16f(0,4,wan);
delay_ms(2000);
LCM_Clear();
num_disp8f(0,0,char_0);
hz_disp16(0,4,wan);
delay_ms(2000);
gpio_bits_reset(GPIOA, GPIO_PINS_12);
delay_ms(2000);
LCM_Clear();
}
}
/*void delay_ms(uint16_t nms)
{
uint32_t temp = 0;
while(nms)
{
if(nms > 50)
{
SysTick->LOAD = (uint32_t)(50 * 12000);
nms -= 50;
}
else
{
SysTick->LOAD = (uint32_t)(nms * 12000);
nms = 0;
}
SysTick->VAL = 0x00;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
do
{
temp = SysTick->CTRL;
}
while((temp & 0x01) && !(temp & (1 << 16)));
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
SysTick->VAL = 0x00;
}
}*/
void delay_ms(uint16_t m) // 12MHz Xtal, close to ms value
{
uint16_t j;
uint16_t i;
for(i=0; i<m; i++)
for(j=0; j<109; j++)
NOP();
}
void delay_us(uint8_t m)
{
while(m--);
}
下载后运行,只看到背光灯能够亮灭,液晶屏没有字迹显示。
请各位大侠指点一下是哪里不对!!!!
|
|