3580|0

64

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32+KS0108 [复制链接]

本人用STM32F103 控制液晶   液晶的控制器为KS0108 ,无显示,但是 程序应该没有问题

程序如下://
#define  Set_Disp_On    0x3F
#define  Set_Disp_Off   0x3E
#define  Set_Column          0x40
#define  Set_Page       0xB8
#define  Set_Start_Line 0xC0

void LCD_GPIO_CONFIG(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE);                          
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11
                                  |GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOE, &GPIO_InitStructure);
   
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);                          
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
   
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);                          
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
   
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);                          
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

}
void LCD_GPIO_DATAIN(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE);                          
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11
                                  |GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOE, &GPIO_InitStructure);
}
void LCD_GPIO_DATAOUT(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE);                          
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11
                                  |GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOE, &GPIO_InitStructure);
}
//¶ÌÑÓʱ×Ó³ÌÐò
void Delay_us(int t)
{
while(--t);

}
void Delay_ms(unsigned int x)
{
  unsigned int i,j;
    for(j=0;j     for(i=0;i<=150;i++);
}
/****************************************************************************
//¼ì²âBUSY
****************************************************************************/
void LCM_Check_Busy(void)
{
    u8 state=0;
   
    GPIO_ResetBits(GPIOA, GPIO_Pin_6);  // RS=0
    Delay_us(10);
    GPIO_SetBits(GPIOA, GPIO_Pin_7);  // R/W=1
    LCD_GPIO_DATAIN();
  Delay_us(10);   
    do
    {
        GPIO_SetBits(GPIOC, GPIO_Pin_4);  // E=1
         Delay_us(100);
        state=GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_15);
        GPIO_ResetBits(GPIOC, GPIO_Pin_4);  // E=0
         Delay_us(100);
    }while(state);        
    LCD_GPIO_DATAOUT();
   
}

//¼Ä´æÆ÷дÈ뺯Êý
void Write_0108_Reg(unsigned char Reg_Code)
{
    u16 temp;
    LCM_Check_Busy();
    GPIO_ResetBits(GPIOC, GPIO_Pin_4);  // E=0
   
  GPIO_ResetBits(GPIOA, GPIO_Pin_6);  // RS=0
    GPIO_ResetBits(GPIOA, GPIO_Pin_7);  // R/W=0
//      temp=GPIO_ReadOutputData(GPIOE); //
//      temp&=0x00ff;
//     GPIO_Write(GPIOE, ((u16)(Reg_Code<<8))|temp);
    GPIO_Write(GPIOE, ((u16)(Reg_Code<<8)));
//     temp=GPIO_ReadOutputData(GPIOE);
    GPIO_SetBits(GPIOC, GPIO_Pin_4);  // E=1
    Delay_us(1000);
    GPIO_ResetBits(GPIOC, GPIO_Pin_4);  // E=0
    Delay_us(1000);
}
//Êý¾ÝдÈ뺯Êý
void Write_0108_Data(unsigned char Disp_Data)
{
    u16 temp;
    LCM_Check_Busy();
    GPIO_ResetBits(GPIOC, GPIO_Pin_4);  // E=0
   
  GPIO_SetBits(GPIOA, GPIO_Pin_6);  // RS=1

    GPIO_ResetBits(GPIOA, GPIO_Pin_7);  // R/W=0
//     temp=GPIO_ReadOutputData(GPIOE); //
//     temp&=0x00ff;
//     GPIO_Write(GPIOE, ((u16)(Disp_Data<<8))|temp);
    GPIO_Write(GPIOE, ((u16)(Disp_Data<<8)));
//    temp=GPIO_ReadOutputData(GPIOE);
    Delay_us(1000);
    GPIO_SetBits(GPIOC, GPIO_Pin_4);  // E=1
    Delay_us(1000);
    GPIO_ResetBits(GPIOC, GPIO_Pin_4);  // E=0
    Delay_us(1000);
}
//¶ÁÈ¡Êý¾Ýº¯Êý
unsigned char Read_0108_Data()
{
    unsigned char Disp_Data;
    LCM_Check_Busy();
    GPIO_ResetBits(GPIOC, GPIO_Pin_4);  // E=0
    LCD_GPIO_DATAIN();
  GPIO_SetBits(GPIOA, GPIO_Pin_6);  // RS=1
    GPIO_SetBits(GPIOA, GPIO_Pin_7);  // R/W=1
   
    GPIO_SetBits(GPIOC, GPIO_Pin_4);  // E=1
    Disp_Data =GPIO_ReadInputData(GPIOE);
    GPIO_ResetBits(GPIOC, GPIO_Pin_4);  // E=0
    LCD_GPIO_DATAOUT();
    return Disp_Data;
}
//¼Ä´æÆ÷³õʼ»¯º¯Êý
void Iint_0108()
{
    LCM_Check_Busy();
  GPIO_SetBits(GPIOC, GPIO_Pin_5);  // CSA=1
    GPIO_SetBits(GPIOB, GPIO_Pin_0);  // CSB=1
  Write_0108_Reg(Set_Disp_Off);
    Delay_us(10);
    Write_0108_Reg(Set_Start_Line);
    Delay_us(10);
    Write_0108_Reg(Set_Page);
    Delay_us(10);
    Write_0108_Reg(Set_Column);
    Delay_us(10);
    Write_0108_Reg(Set_Disp_On);
    Delay_us(10);
}
//Çå³ýÏÔʾ´æ´¢Æ÷
void Clr_Screen(void)
{
   unsigned char j,k;
   GPIO_SetBits(GPIOC, GPIO_Pin_5);  // CSA=1
     GPIO_ResetBits(GPIOB, GPIO_Pin_0);  // CSB=0
   for(k=0;k<8;k++)
      {
     Write_0108_Reg(Set_Page+k);
     Write_0108_Reg(Set_Column);
     for(j=0;j<64;j++)
         Write_0108_Data(0xff);
    }
     GPIO_ResetBits(GPIOC, GPIO_Pin_5);  // CSA=0
     GPIO_SetBits(GPIOB, GPIO_Pin_0);  // CSB=1
   for(k=0;k<8;k++)
      {
     Write_0108_Reg(Set_Page+k);
     Write_0108_Reg(Set_Column);
     for(j=0;j<64;j++)
         Write_0108_Data(0xff);
    }

}

主要是IO 配置 写寄存器 写数据 等程序 ,按照时序图写的程序 ,求大神帮忙看看有什么问题,清屏幕那 我写的是0XFF ,应该全部黑点  但是现在屏幕什么都没有

此帖出自ARM技术论坛
点赞 关注
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表