智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1546|回复: 1
打印 上一主题 下一主题

stm32f103c8t6不能点亮LCM19264D液晶,代码如下,请问有知道哪里出问题的大神么?

[复制链接]

19

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
715
QQ
威望
395
贡献
200
兑换币
220
注册时间
2014-2-20
在线时间
60 小时
毕业学校
湖北工程学院
跳转到指定楼层
1#
发表于 2015-9-23 21:24:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
.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;
  }
  }


main.c 如下
while(1)
                {           
                        delay_ms(1000);
WriteChr16x16(0,i*16,table[0]);
        }
回复

使用道具 举报

24

主题

492

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
13138
威望
5341
贡献
1645
兑换币
2222
注册时间
2012-3-9
在线时间
3076 小时
毕业学校
嘉兴学院
2#
发表于 2015-9-25 08:45:51 | 只看该作者
你判断忙怎么这样写的,不是应该读寄存器的吗
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-25 02:24 , Processed in 0.076621 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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