OpenEdv-开源电子网

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

I/O口驱动160X160点阵屏一直没点亮(附图+完整代码)

[复制链接]

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2014-6-20
在线时间
2 小时
发表于 2014-8-6 00:41:00 | 显示全部楼层 |阅读模式
5金钱
单片机用的STM32F103ZET6,LCD的控制芯片是uc1698u,我在用IO口驱动的时候,只用了4根控制线CS,A0(也就是C/D),WR,RD,没有控制RST复位,屏一直点不亮(我看到蛮多用IO口驱动这个屏的时候,都用了RST复位,不知道有没有影响)


下面的是lcd.c的完整代码
#include "lcd.h"
 #include "stm32f10x_rcc.h"
 #include "stm32f10x_gpio.h"
  #include "stm32f10x.h"

void GPIO_Configuration(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
  
  /* Enable GPIOD lcd data clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_14|GPIO_Pin_15|GPIO_Pin_7|GPIO_Pin_4|GPIO_Pin_5;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出  DB0-DB3  CS  NWE  
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_Init(GPIOD, &GPIO_InitStructure);

  /* Enable GPIOE lcd data clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;   //DB4-DB7
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure);

  /* Enable GPIOF lcd data clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_12|GPIO_Pin_13;   
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出  A0数据命令控制线
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOF, &GPIO_InitStructure);
  GPIO_ResetBits(GPIOF,GPIO_Pin_12);   
  GPIO_ResetBits(GPIOF,GPIO_Pin_13); //8位并行传输8080总线
    
}
/*******************************************************************************
* Function Name : LCD_Initializtion
* Description   : 液晶初始化
*******************************************************************************/
void LCD_Initializtion(void)
{

    // UC1698U_CS_L(); 
    WriteCmddata(0xE2);// -24- System Reset
    WriteCmddata(0xeb);// -27- Set LCD Bias Ratio  E8-EB
    
    WriteCmddata(0x81);// -11- set- Vbias potention meter
    WriteCmddata(0xB5);//  set  vop  0~255
    
    WriteCmddata(0xaf);// -22- power control set
    
    WriteCmddata(0x80);//  set  vop  0~255
    
    WriteCmddata(0xf4);//  set  windows programm starting  column address
    WriteCmddata(0x25);//  set  00
    WriteCmddata(0xf5);//  set  windows programm starting  row     address
    WriteCmddata(0x00);//  set  00
    WriteCmddata(0xf6);//  set  windows programm ending  column address
    WriteCmddata(0x5A);//  set  3x50=150
    WriteCmddata(0xf7);//  set  windows programm ending  row address
    WriteCmddata(0xa0);//  set  150
    
    WriteCmddata(0xf8);//  set windows programm mode   inside mode ac3=0
    WriteCmddata(0xd1);//  set windows programm mode   inside mode ac3=0
    WriteCmddata(0xd5);//  set windows programm mode   inside mode ac3=0
    
    //LCD_Clear(0);
}

//============================================================================= 
//函 数 名:  WriteCmddata() 
//入口参数: CmdData:写命令-----=1
//============================================================================= 
void WriteCmddata(u8 CmdData)

    UC1698U_A0_L();        //数据命令控制脚低-命令
  if (CmdData&0x01)     GPIO_SetBits(GPIOD,GPIO_Pin_15);
  else     GPIO_ResetBits(GPIOD,GPIO_Pin_15);  
   if (CmdData&0x02)     GPIO_SetBits(GPIOD,GPIO_Pin_14);
  else     GPIO_ResetBits(GPIOD,GPIO_Pin_14);  
   if (CmdData&0x04)     GPIO_SetBits(GPIOD,GPIO_Pin_2);
  else     GPIO_ResetBits(GPIOD,GPIO_Pin_2);  
  if (CmdData&0x08)     GPIO_SetBits(GPIOD,GPIO_Pin_1);
  else     GPIO_ResetBits(GPIOD,GPIO_Pin_1);  
  if (CmdData&0x10)     GPIO_SetBits(GPIOE,GPIO_Pin_7);
  else     GPIO_ResetBits(GPIOE,GPIO_Pin_7);  
   if (CmdData&0x20)     GPIO_SetBits(GPIOE,GPIO_Pin_8);
  else     GPIO_ResetBits(GPIOE,GPIO_Pin_8); 
    if (CmdData&0x4)     GPIO_SetBits(GPIOE,GPIO_Pin_9);
  else     GPIO_ResetBits(GPIOE,GPIO_Pin_9); 
    if (CmdData&0x80)     GPIO_SetBits(GPIOE,GPIO_Pin_10);
  else     GPIO_ResetBits(GPIOE,GPIO_Pin_10); 
 
    UC1698U_CS_L();        //片选低
    UC1698U_WR_L();        //写低
    UC1698U_WR_H();                
    UC1698U_CS_H();
        

}
//============================================================================= 
//函 数 名:  WriteData(u8 Data) 
//功 能:        写数据到UC1698U
//入口参数: CmdData:写入的数据=====0
//============================================================================= 
void WriteData(u8 Data)
{
   UC1698U_A0_H();             
   if (Data&0x01)     GPIO_SetBits(GPIOD,GPIO_Pin_15);
  else     GPIO_ResetBits(GPIOD,GPIO_Pin_15);  
   if (Data&0x02)     GPIO_SetBits(GPIOD,GPIO_Pin_14);
  else     GPIO_ResetBits(GPIOD,GPIO_Pin_14); 
   if (Data&0x04)     GPIO_SetBits(GPIOD,GPIO_Pin_2);
  else     GPIO_ResetBits(GPIOD,GPIO_Pin_2);  
  if (Data&0x08)     GPIO_SetBits(GPIOD,GPIO_Pin_1);
  else     GPIO_ResetBits(GPIOD,GPIO_Pin_1);  
  if (Data&0x10)     GPIO_SetBits(GPIOE,GPIO_Pin_7);
  else     GPIO_ResetBits(GPIOE,GPIO_Pin_7);  
   if (Data&0x20)     GPIO_SetBits(GPIOE,GPIO_Pin_8);
  else     GPIO_ResetBits(GPIOE,GPIO_Pin_8); 
    if (Data&0x40)     GPIO_SetBits(GPIOE,GPIO_Pin_9);
  else     GPIO_ResetBits(GPIOE,GPIO_Pin_9); 
    if (Data&0x80)     GPIO_SetBits(GPIOE,GPIO_Pin_10);
  else     GPIO_ResetBits(GPIOE,GPIO_Pin_10); 
    UC1698U_CS_L();    
    UC1698U_WR_L();                 
    UC1698U_WR_H();        
    UC1698U_CS_H();
        

}
 
//============================================================================= 
//函 数 名: Write8DotsUC1698U() 
//功 能: UC1698U横向写8个点的子函数
//入口参数:  Data:要显示的数据
//出口参数:  无
//返 回 值:  无
//============================================================================= 
void Write8DotsUC1698U(u8 Data)
{
    u8  TempData = 0;
   if(Data & 0x80)
       TempData=0xf0;
   if(Data & 0x40)
       TempData|=0x0f;
   WriteData(TempData);

   TempData=0;
   if(Data & 0x20)
       TempData=0xf0;
   if(Data & 0x10)
       TempData|=0x0f;
   WriteData(TempData);

   TempData=0;
   if(Data & 0x08)
       TempData=0xf0;
   if(Data & 0x04)
       TempData|=0x0f;
   WriteData(TempData);

   TempData=0;
   if(Data & 0x02)
       TempData=0xf0;
   if(Data & 0x01)
       TempData|=0x0f;
   WriteData(TempData);

}
/*******************************************************************************
* Function Name : LCD_Clear
* Description   : 清屏
* Input         : - Color :0白屏, 1黑屏
*******************************************************************************/
void LCD_Clear(u8 Color)
{
    u8 row=0, col=0;
    WriteCmddata(0x05);//  set column adress LSB CA3 CA2 CA1 CA0  =05
    WriteCmddata(0x12);//  set column adress MSB CA6 CA5 =02
    WriteCmddata(0x60);//  set ROW adress LSB RA3 RA2 RA1 RA0  =00
    WriteCmddata(0x70);//  set ROW adress MSB RA7 RA6 RA5 RA4  =00    
    
    for (row=0; row<160; row++)
    {
        for(col=0; col<81; col++) //
        {
            WriteData(Color);   //a byte per a pixel            
        }
    }
}

void TestScreen(u8 dat1,u8 dat2)
{
        u8 i,j;
        WriteCmddata(0x60);                        //row address LSB        
        WriteCmddata(0x70);                        //row address MSB
        
        WriteCmddata(0x05);                        //Column address LSB        
        WriteCmddata(0x12);                        //Column address MSB

        for(j=0;j<160;j++)
        {
                for(i=0;i<27;i++)
                {
                        if(j%2==0)
                        {
                                WriteData(dat1);
                                WriteData(dat1);
                                WriteData(dat1);
                        }
                        else
                        {
                                WriteData(dat2);
                                WriteData(dat2);
                                WriteData(dat2);
                        }
                }
        }
}

下面是lcd.h的内容


下面是主函数:
int main(void)
 {
void GPIO_Configuration(void);
void LCD_Initializtion(void);
LCD_Clear(0);
Write8DotsUC1698U(6); //画8个点
TestScreen(23,88); //画直线

while(1)
{
  
}
 }


TOPWAY-UC1698-AppNote-V0.2.pdf

709.48 KB, 下载次数: 1384

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

使用道具 举报

4

主题

200

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
236
金钱
236
注册时间
2012-12-19
在线时间
0 小时
发表于 2014-8-6 08:16:10 | 显示全部楼层
你为什么不加上RST试试呢,谁也不能一下子看出了怎么了。。。
目前在玩STM32,BBB,RPi
回复

使用道具 举报

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2014-6-20
在线时间
2 小时
 楼主| 发表于 2014-8-6 10:20:29 | 显示全部楼层
加了RST,程序改了下,但是还是没有任何显示
回复

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
25
金钱
25
注册时间
2015-9-17
在线时间
0 小时
发表于 2015-9-17 22:24:09 | 显示全部楼层
哪位能帮我把32*64的频谱源码 改成32*80的  我的单元板是32*80 感激不尽!!!!!拜托 拜托 
回复

使用道具 举报

164

主题

1230

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1476
金钱
1476
注册时间
2014-5-21
在线时间
342 小时
发表于 2016-7-14 14:01:38 | 显示全部楼层
看我分享的160160液晶
彼高丽者,边夷贱类,不足待以仁义,不可责以常礼。古来以鱼鳖畜之,宜从阔略。若必欲绝其种类,恐兽穷则搏。
回复

使用道具 举报

10

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1552
金钱
1552
注册时间
2017-10-9
在线时间
131 小时
发表于 2022-9-29 14:52:38 | 显示全部楼层
我回去了试试
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 01:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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