OpenEdv-开源电子网

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

将原子MINISTM32的液晶驱动一直到stm8上,没有显示,感觉函数没问题啊,请教大神

[复制链接]

34

主题

388

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4090
金钱
4090
注册时间
2012-10-21
在线时间
642 小时
发表于 2012-11-22 16:43:12 | 显示全部楼层 |阅读模式

修改了写寄存器和读数据函数,其他的没动,下面是修改过的函数,没修改的和原子的一模一样,程序运行后,可以读出控制器的型号,就是没有显示,大家看看是哪里的问题

//画笔颜色,背景颜色
unsigned int POINT_COLOR = 0x0000,BACK_COLOR = 0xFFFF; 
unsigned int DeviceCode; 

void delay_ms(unsigned int ms)
{
 unsigned char i;
 while(ms != 0)
 {
  for(i=0;i<250;i++) {}
  for(i=0;i<75;i++) {}
  ms--; 
 }
}
/****************************************************************************
* 功    能:传送命令或数据
* 入口参数:data
* 出口参数:无
* 备    注:
****************************************************************************/
void DataToWrite(unsigned int data)
{

    PG_ODR=(unsigned char)(data&0x00ff);        /* 低8位 */
    PE_ODR=(unsigned char)((data>>8)&0x00ff);    /* 高8位 */
}
/****************************************************************************
* 功    能:向LCD写数据
* 入口参数:data
* 出口参数:无
* 备    注:
****************************************************************************/
void LCD_WR_DATA(unsigned int data)
{
 LCD_RS=1;//写数据 
  LCD_CS=0;
 DataToWrite(data);
 LCD_WR=0;
 LCD_WR=1;
  LCD_CS=1;  
}
/****************************************************************************
* 功    能:向LCD写地址
* 入口参数:data
* 出口参数:无
* 备    注:
****************************************************************************/
void LCD_WR_REG(unsigned char data)
{
 LCD_RS=0;//写地址 
  LCD_CS=0;
 DataToWrite((unsigned int)data);
 LCD_WR=0;
 LCD_WR=1;
  LCD_CS=1;  
}  
/****************************************************************************
* 功    能:写寄存器
* 入口参数:LCD_Reg地址,LCD_RegValue寄存器数据
* 出口参数:无
* 备    注:
****************************************************************************/
void LCD_WriteReg(unsigned char LCD_Reg,unsigned int LCD_RegValue)

 LCD_WR_REG(LCD_Reg); 
 LCD_WR_DATA(LCD_RegValue);       
}   
/****************************************************************************
* 功    能:读寄存器
* 入口参数:LCD_Reg地址
* 出口参数:无
* 备    注:
****************************************************************************/
unsigned int LCD_ReadReg(unsigned char LCD_Reg)
{            
 unsigned int temp,temp1,temp2;
 LCD_WR_REG(LCD_Reg);  //写入要读的寄存器号  
 
 G_DDR=0X00;//PG上拉输入
 G_CR1=0XFF;
 G_CR2=0X00;
 G_ODR=0XFF;//全部输出高
 E_DDR=0X00;//PG上拉输入
 E_CR1=0XFF;
 E_CR2=0X00;
 E_ODR=0XFF;//全部输出高
 
 LCD_RS=1;
 LCD_CS=0;
 //读取数据(读寄存器时,并不需要读2次)
 LCD_RD=0;       
 LCD_RD=1;
 temp1=PG_IDR;//低8位
 temp2=PE_IDR;//高8位
 temp=temp1|(temp2<<8);
 LCD_CS=1;
 
 G_DDR=0XFF;//PG推挽输出
 G_CR1=0XFF;
 PG_CR2=0X00;
 PG_ODR=0XFF;//全部输出高
 PE_DDR=0XFF;//PG推挽输出
 PE_CR1=0XFF;
 PE_CR2=0X00;
 PE_ODR=0XFF;//全部输出高
 return temp; 
}  
//读取个某点的颜色值 
//x:0~239
//y:0~319
//返回值:此点的颜色
unsigned int LCD_ReadPoint(unsigned int x,unsigned int y)
{
 unsigned int temp,temp1,temp2; 
 if(x>=LCD_W||y>=LCD_H)return 0;//超过了范围,直接返回    
 LCD_SetCursor(x,y);
 LCD_WR_REG(R34);       //选择GRAM地址
 
 PG_DDR=0X00;//PG上拉输入
 PG_CR1=0XFF;
 PG_CR2=0X00;
 PG_ODR=0XFF;//全部输出高
 PE_DDR=0X00;//PG上拉输入
 PE_CR1=0XFF;
 PE_CR2=0X00;
 PE_ODR=0XFF;//全部输出高

 LCD_RS=1;
 LCD_CS=0;
 //读取数据(读GRAM时,需要读2次)
 LCD_RD=0;       
  LCD_RD=1;
  //dummy READ
 LCD_RD=0;       
  LCD_RD=1;
 temp1=PG_IDR;//低8位
 temp2=PE_IDR;//高8位
 temp=temp1|(temp2<<8); 
 LCD_CS=1; 

 PG_DDR=0XFF;//PG上拉输入
 PG_CR1=0XFF;
 PG_CR2=0X00;
 PG_ODR=0XFF;//全部输出高
 PE_DDR=0XFF;//PG上拉输入
 PE_CR1=0XFF;
 PE_CR2=0X00;
 PE_ODR=0XFF;//全部输出高
 if(DeviceCode==0X4535||DeviceCode==0X4531||DeviceCode==0X8989||DeviceCode==0XB505)
  return temp;//这几种IC直接返回颜色值
 else
  return LCD_BGR2RGB(temp);
}
//初始化lcd
//该初始化函数可以初始化各种ILI93XX液晶,但是其他函数是基于ILI9320的!!!
//在其他型号的驱动芯片上没有测试!
void LCD_Init(void)
{  
 //PB1(LCD_RS),PB2(LCD_WR),PB3(LCD_RD)设为推挽输出
 PB_DDR|=0X0E;
 PB_CR1|=0X0E;
 PB_CR2&=0XF1;
 //PF5(LCD_CS)设为推挽输出
 PF_DDR|=0X20;
 PF_CR1|=0X20;
 PF_CR2&=0XDF;
 //PG(数据低八位)设为推挽输出
 PG_DDR=0XFF;
 PG_CR1=0XFF;
 PG_CR2=0X00;
 //PE(数据高八位)设为推挽输出
 PE_DDR=0XFF;
 PE_CR1=0XFF;
 PE_CR2=0X00;
 //PD4(LCD_BL)设为推挽输出
 PD_DDR|=0X10;
 PD_CR1|=0X10;
 PD_CR2&=0XEF;
 
 delay_ms(500); // delay 50 ms
 LCD_WriteReg(0x0000,0x0001);
 delay_ms(500); // delay 50 ms
 DeviceCode = LCD_ReadReg(0x0000);  
 printf(" LCD ID:%x\n",DeviceCode); //打印LCD ID 
 if(DeviceCode==0x9325||DeviceCode==0x9328)//ILI9325
 {各种型号的液晶驱动,太长了略去,和原子的miniSTM的里面的一模一样|
}     


 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-22 17:16:57 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

34

主题

388

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4090
金钱
4090
注册时间
2012-10-21
在线时间
642 小时
 楼主| 发表于 2012-11-22 18:52:57 | 显示全部楼层
9325和5408的都可以读出来
回复 支持 反对

使用道具 举报

34

主题

388

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4090
金钱
4090
注册时间
2012-10-21
在线时间
642 小时
 楼主| 发表于 2012-11-22 18:53:12 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
9325和5408的都可以读出来
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-22 19:57:57 | 显示全部楼层
就是不能显示?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

头像被屏蔽

308

主题

400

帖子

0

精华

禁止访问

积分
1185
金钱
1185
注册时间
2011-7-29
在线时间
10 小时
发表于 2012-11-22 20:24:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

34

主题

388

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
4090
金钱
4090
注册时间
2012-10-21
在线时间
642 小时
 楼主| 发表于 2012-11-22 23:15:15 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
已经搞定了,程序没有问题,电路板上断了一根线,RS线断掉了,没连到CPU上
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 21:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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