#ifndef _lcd_19264_h
#define _lcd_19264_h
#include "stm32f10x.h"
#include "misc.h"
#include "stdio.h"
//#include "stm32f10x_exti.h"
#define portcontrol GPIOD
#define portdata GPIOC
#define busy GPIO_Pin_5 //rs
#define req GPIO_Pin_7 //e
#define reset GPIO_Pin_1
#define cs1 GPIO_Pin_3
#define cs2 GPIO_Pin_4
#define cs3 GPIO_Pin_2
#define rw GPIO_Pin_6
#define write_chn 0xf0 //写国标汉字
#define write_cha 0xf1 //写8*8ascii字符
#define write_char 0xf9 //写8*16ascii字符
#define write_wei 0xf2 //写位点阵
#define write_zijie 0xf3 //写字节点阵
#define up 0xf5 //上移
#define down 0xf6 //下移
#define left 0xf7 //左移
#define right 0xf8 //右移
#define fanbai 0xfa //反白功能
#define clr_screen 0xf4 //清屏
//extern u8 key;
extern u8 ni[];
//extern u8 addr_x;
//extern u8 addr_y;
void delay(u32 n);
void delay_us(u32 nus);
void delay_ms(u16 nms);
void RCC_Configuration(void);
void GPIO_Configuration(void);
void lcd_init(void);
void lcd_clear(void);
void writ_com(u8 com,u8 addr_x,u8 addr_y);
void writ_date(u8 date);
void disp_china(u8 *chn,u8 addr_x,u8 addr_y,u8 row,u8 line);
void disp_chr(u8 *chr,u8 addr_x,u8 addr_y,u8 row,u8 line);
void disp_wei(u8 addr_x,u8 addr_y,u8 row,u8 line);
void Coordinate_axis(void);
void disp_differevalue(u8 *amp,u8 *freq);
int key(void);
#endif
#include "lcd_19264.h"
#include "stm32f10x.h"
#include "stdio.h"
u8 ni[]={/*-- 文字: 你 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00};
void delay(u32 n)
{
for(;n!=0;n--);
}
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOD,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
void delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=9*nus;
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL=0x01; //使能,减到零是无动作,采用外部时钟源
do
{
temp=SysTick->CTRL; //读取当前倒计数值
}while((temp&0x01)&&(!(temp&(1<<16)))); //等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL=0x00; //清空计数器
}
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=9000*nms;
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL=0x01; //使能,减到零是无动作,采用外部时钟源
do
{
temp=SysTick->CTRL; //读取当前倒计数值
}while((temp&0x01)&&(!(temp&(1<<16)))); //等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL=0x00; //清空计数器
}
void writ_com(u8 com,u8 addr_x,u8 addr_y)
{
writ_date(com); //写命令
writ_date(addr_x); //写入X起始坐标
writ_date(addr_y); //写入Y起始坐标
}
void writ_date(u8 date)
{
while(GPIO_ReadInputDataBit(portcontrol,busy) == 1); //查忙信号
GPIO_Write(portdata, date);
delay_us(10);
GPIO_WriteBit(portcontrol,req,Bit_SET); // e=1
while(GPIO_ReadInputDataBit(portcontrol,busy) == 0);
delay_us(40);
GPIO_WriteBit(portcontrol,req,Bit_RESET); //e=0
}
void disp_china(u8 *chn,u8 addr_x,u8 addr_y,u8 row,u8 line) //显示中文
{
u8 i=0,j=0;
for(j=addr_y;j
{
for(i=addr_x;i
{
writ_com(write_chn,i,j);
writ_date(chn[(j-addr_y)*row*2+(i-addr_x)*2]-0xa0);
writ_date(chn[(j-addr_y)*row*2+(i-addr_x)*2+1]-0xa0);
}
}
}
void lcd_init(void)
{
GPIO_WriteBit(portcontrol,reset,Bit_RESET);
delay_us(50);
GPIO_WriteBit(portcontrol,reset,Bit_SET);
GPIO_Write(GPIOD,0xffff);
writ_com(0x3e,0,0);
writ_com(0x3f,0,0);
writ_com(0xc0,0,0);
writ_com(0x40,0,0);
writ_com(0xb8,0,0);
}
void lcd_clear(void)
{
u8 x,y;
GPIO_Write(GPIOD,0xffff);
writ_com(0x3f,0,0);
for (y=0;y<8;y++)
{
writ_com(0xb8+y,0,0);
writ_com(0x40,0,0);
writ_com(0xc0,0,0);
for(x=0;x<64;x++)
{
writ_date(0x00);
}
}
}
int main(void)
{
RCC_Configuration(); //系统时钟初始化
GPIO_Configuration();//端口初始化
lcd_init();
lcd_clear();
GPIO_WriteBit(portcontrol,cs1,Bit_RESET);
GPIO_WriteBit(portcontrol,cs2,Bit_SET);
GPIO_WriteBit(portcontrol,cs3,Bit_SET); //打开左屏
disp_china(ni,0,0,16,16);
}
我是用stmf103做的
调试了两天了没调试出来,求各位哥哥姐姐给看看程序有什么问题呢
程序太长,没有仔细看,你可以注意以下几点:
1. 每个端口检查看是否都受控制;
2. 调节液晶的显示对比度的可调电阻;
3. 查看时序看是否正确;
4. 发送命令和数据清添加延时。