OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4670|回复: 7

stm32f103c8t6写了一个点亮LCM19264D液晶的代码,不能显示数据

[复制链接]

25

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2015-5-2
在线时间
59 小时
发表于 2015-9-23 19:36:43 | 显示全部楼层 |阅读模式
5金钱

.h文件

#ifndef __LCD_19264_H
#define __LCD_19264_H 
#include "sys.h"

//LCD12964控制端口
#define LCD_RS  PBout(0)// PB.0
#define LCD_E   PBout(1)// PB.1
#define LCD_CS1 PBout(2)// PB.2
#define LCD_RST PBout(3)// PB.3
#define LCD_CS2 PBout(4)// PB.4
#define LCD_CS3 PBout(5)// PB.5
#define LCD_RW  PBout(6)// PB.6

//设置数据A0-A7
#define DATA_I0 GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7

//设置控制口
#define CTRL_I0 GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7

#define  LCD_PAGE_ADDR 0xb8
#define  LCD_COL_ADDR  0x40 


void LCDPortSet(void); //LCD IO口配置
void LcdInit(void);   //初始化程序
void LcdClear(void); //清屏程序
void WriteChr16x16(u8 pag,u8 col, u8 *chr);  //写一个汉字   
#endif



 /***********************************************************
 功能:LCD19264驱动程序
 作者:HUATU
 时间:2015-9-22
 ************************************************************/
 #include "lcd_19264.h"
 #include "delay.h"
 //LCD IO口配置
 
 /***********************************
  说明:LCD12964 数据引脚与控制引脚分配
 ************************************/
void LCDPortSet(void)
{
 GPIO_InitTypeDef  GPIO_InitStructure; 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);  //使能PA,B端口时钟

 GPIO_InitStructure.GPIO_Pin = DATA_I0;//设置数据输入引脚
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //设置推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOA, &GPIO_InitStructure);                  //PA0-7为数据输入 
 
 GPIO_InitStructure.GPIO_Pin = CTRL_I0;            //端口配置,设置LCD控制引脚PB0-PB7
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;    //设置推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //设置速度为50MHZ
 GPIO_Init(GPIOB, &GPIO_InitStructure);                   //对应的是PB
 
 GPIO_SetBits(GPIOB, GPIO_Pin_0);
 GPIO_SetBits(GPIOB, GPIO_Pin_1);
 GPIO_SetBits(GPIOB, GPIO_Pin_2);
 GPIO_SetBits(GPIOB, GPIO_Pin_3);
 GPIO_SetBits(GPIOB, GPIO_Pin_4);
 GPIO_SetBits(GPIOB, GPIO_Pin_5);
 GPIO_SetBits(GPIOB, GPIO_Pin_6);

}


//****************判忙********************
void wtcom(void)
{
 LCD_RS=0;
 LCD_RW=1;
 LCD_E=1;
 delay_us(20);
 LCD_E=0;
 delay_us(20);
}


/******************选择第1屏***********************/
void SelectChip1(void)
{
 LCD_CS1=0;
 LCD_CS2=1;
 LCD_CS3=1;
 wtcom();
 }

/******************选择第2屏***********************/
 void SelectChip2(void)
{
 LCD_CS1=1;
 LCD_CS2=0;
 LCD_CS3=1;
 wtcom();
 }

 /*****************选择第3屏**************************/
 void SelectChip3(void)
{
 LCD_CS1=1;
 LCD_CS2=1;
 LCD_CS3=0;
    wtcom();
 }

 
 void WriteCommand(u8 cmd)   //写命令
{    
 LCD_RS=0;    //写命令
 LCD_RW=0; 
 //LCD_DATA_OUT(cmd);
 GPIO_Write(GPIOA,(0xff00&(cmd<<8)));   //写数据到PA低八位
 LCD_E=1;
 delay_us(10);
 LCD_E=0;
 }
 void WriteData(u8  dat)  //写数据

 LCD_RS=1;//写数据
 LCD_RW=0;
 //LCD_DATA_OUT(dat);//数据输出到数据口
 GPIO_Write(GPIOA,(0xff00&(dat<<8)));   //写数据到PA低八位
 LCD_E=1;  //写入到LCD
 delay_us(10);
 LCD_E=0;
 }

 void LcdClear(void) //清屏
{
 u16  j = 0;
 u16  k = 0;
 LCD_CS1 = 0;
 LCD_CS2 = 0;
 LCD_CS3 = 0;
 WriteCommand(LCD_PAGE_ADDR + 0);
 WriteCommand(LCD_COL_ADDR  + 0);
 for(k=0;k<8;k++)
 {
 WriteCommand(LCD_PAGE_ADDR+k);
 for(j=0;j<64;j++) 
 {
  WriteData(0x00);
 }
 }
 LCD_CS1 = 1;
 LCD_CS2 = 1;
 LCD_CS3 = 1;
 }

 void LcdInit(void) //初始化程序
{
 LCD_RST = 0;
 delay_us(20);
 LCD_RST = 1;
 delay_us(5);
 LCD_CS1=0;
 LCD_CS2=0;
 LCD_CS3=0;
 WriteCommand(0x3f);  //设置开显示命令
 WriteCommand(0xc0);//设置起始位置
 LCD_CS1 = 1;
 LCD_CS2 = 1;
 LCD_CS3 = 1;
 LcdClear();    //清屏
}

//写一个汉字
void WriteChr16x16(u8 pag,u8 col,u8 *chr)
{
 u8 i = 0;
 u8 j = 0;
 u8 col_t = 0;
 WriteCommand(0xc0);
 col_t = col;
 for(i=0;i<2;i++)
 {
   for(j=0;j<16;j++)
   {
 switch(col_t&0xc0)
 {
 case 0:
 SelectChip1();
 WriteCommand(LCD_PAGE_ADDR + pag + i);
 WriteCommand(LCD_COL_ADDR  + col_t - 0 );
 WriteData(chr[16*i + j]);
 col_t++;
 break;
 case 0x40:
 SelectChip2();
 WriteCommand(LCD_PAGE_ADDR + pag + i);
 WriteCommand(LCD_COL_ADDR  + col_t - 64);
 WriteData(chr[16*i + j]);
 col_t++;
 break;
 case 0x80:
 SelectChip3();
 WriteCommand(LCD_PAGE_ADDR + pag + i);
 WriteCommand(LCD_COL_ADDR  + col_t - 128);
 WriteData(chr[16*i + j]);
 col_t++;
 break;
 default:  break;
 }
   
 }
  col_t=col_t-16;
 }
 }

最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

25

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2015-5-2
在线时间
59 小时
 楼主| 发表于 2015-9-23 19:36:44 | 显示全部楼层
回复

使用道具 举报

25

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2015-5-2
在线时间
59 小时
 楼主| 发表于 2015-9-23 19:38:14 | 显示全部楼层
请问哪位大神知道原因么?
回复

使用道具 举报

25

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2015-5-2
在线时间
59 小时
 楼主| 发表于 2015-9-23 19:40:34 | 显示全部楼层
main.c 如下
while(1)
{          
delay_ms(1000);
for(i=0;i<12;i++)
WriteChr16x16(0,i*16,table);
for(i=0;i<12;i++)
WriteChr16x16(2,i*16,table);
for(i=0;i<12;i++)
WriteChr16x16(4,i*16,table);
for(i=0;i<12;i++)
WriteChr16x16(6,i*16,table);
delay_ms(500);
}
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5780
金钱
5780
注册时间
2013-11-22
在线时间
1212 小时
发表于 2015-9-23 23:13:53 | 显示全部楼层
这个你的去查这个屏的控制器的数据手册, 我也没用过,  帮顶
回复

使用道具 举报

25

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2015-5-2
在线时间
59 小时
 楼主| 发表于 2015-9-24 10:26:30 | 显示全部楼层
回复【4楼】lycreturn:
---------------------------------
嗯,正是对应手册写的,今天再看看
回复

使用道具 举报

25

主题

122

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
399
金钱
399
注册时间
2015-5-2
在线时间
59 小时
 楼主| 发表于 2015-9-24 21:14:20 | 显示全部楼层
还没有找到原因,有谁用过这款液晶的么?
回复

使用道具 举报

210

主题

773

帖子

0

精华

初级会员

Rank: 2

积分
124
金钱
124
注册时间
2018-3-26
在线时间
288 小时
发表于 2018-4-2 12:34:48 | 显示全部楼层
Draway 发表于 2015-9-24 21:14
还没有找到原因,有谁用过这款液晶的么?

您好,问题解决了吗,现在我也正在弄这个
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 22:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表