OpenEdv-开源电子网

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

ILI9163C 模拟8080无法驱动LCD!

[复制链接]

22

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2013-10-26
在线时间
18 小时
发表于 2015-3-20 10:16:51 | 显示全部楼层 |阅读模式
5金钱
调了很久,没调通,用的是厂家提供的51模拟8080代码,但我的主控是stm32f103zet6,修改了相应管脚的驱动代码,但驱动不起来!
麻烦各位大神支招!万分感谢!
[mw_shl_code=c,true]#include "lcd.h" #include "delay.h" #include "stm32f10x_rcc.h" /* * * PB3 -> RD * PB4 -> WR * PB5 -> RS * PB8 -> RESET * PB9 -> CS * * PA8~PA15 -> D[0..7] * * ???è???? ???? * */ /* * * LCD ???????????? * */ void LCD_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE); //????5???????????????? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); //????8???????????????? 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_Init(GPIOA,&GPIO_InitStructure); } void Delayms(uint32_t t) { delay_ms(t); } //????????i????????8????j????????8?? void write_data(int8_t i,int8_t j) { CS(0); RS(1); RD(1); OutPut_Data(i); WR(0); delay_us(1);//???????????????????©???????? WR(1); OutPut_Data(j); WR(0); delay_us(1);//???????????????????©???????? WR(1); CS(1); } //???????? void data_out(int8_t b) { /* CS(0); RD(1); RS(1); //WR(0); OutPut_Data(b); WR(0); delay_us(1);//???????????????????©???????? WR(1); //RS(0); RD(1); CS(1); */ OutPut_Data(b); RS(1); CS(0); WR(0); WR(1); CS(1); RS(1); } //?????ü?? void comm_out(int8_t m) { /* CS(0); RD(1); RS(0); //WR(0); OutPut_Data(m); WR(0); delay_us(1);//???????????????????©???????? WR(1); RS(0); RD(1); CS(1); */ OutPut_Data(m); RS(0); CS(0); WR(0); WR(1); CS(1); RS(1); } void Initial_ILI9163(void) { LCD_GPIO_Init(); RES(1); delay_ms(10); RES(0); delay_ms(50); RES(1); delay_ms(100); comm_out(0x11); //Exit Sleep Delayms(20); comm_out(0x26); //Set Default Gamma data_out(0x04); comm_out(0xF2); //E0h & E1h Enable/Disable data_out(0x00); comm_out(0xB1); data_out(0x0C); data_out(0x14); comm_out(0xC0); //Set VRH1[4:0] & VC[2:0] for VCI1 & GVDD data_out(0x0C); data_out(0x05); comm_out(0xC1); //Set BT[2:0] for AVDD & VCL & VGH & VGL data_out(0x02); comm_out(0xC5); //Set VMH[6:0] & VML[6:0] for VOMH & VCOML data_out(0x32); data_out(0x3B); comm_out(0xC7); data_out(0x40); comm_out(0x2A); //Set Column Address data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x7F); comm_out(0x2B); //Set Page Address data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x9F); comm_out(0x36); //Set Scanning Direction data_out(0xC0); comm_out(0x3A); data_out(0x55); comm_out(0x29); // Display On } void display_black(void) { int j; int i; comm_out(0x2A); data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x7F); comm_out(0x2B); data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x9F); comm_out(0x2C); //??RGB?????°???ü?? for(i=0;i<128;i++) for(j=0;j<128;j++) write_data(0x00,0x00); Delayms(10); } void display_white(void) { int j; int i; comm_out(0x2A); data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x7F); comm_out(0x2B); data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x9F); comm_out(0x2C); for(i=0;i<128;i++) for(j=0;j<128;j++) write_data(0xff,0xff); Delayms(10); } void display_red(void) { int j; int i; comm_out(0x2A); data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x7F); comm_out(0x2B); data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x9F); comm_out(0x2C); for(i=0;i<128;i++) for(j=0;j<128;j++) write_data(0xf8,0x00); Delayms(10); } void display_green(void) { int j; int i; comm_out(0x2A); data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x7F); comm_out(0x2B); data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x9F); comm_out(0x2C); for(i=0;i<128;i++) for(j=0;j<128;j++) write_data(0x07,0xe0); Delayms(10); } void display_blue(void) { int j; int i; comm_out(0x2A); data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x7F); comm_out(0x2B); data_out(0x00); data_out(0x00); data_out(0x00); data_out(0x9F); comm_out(0x2C); for(i=0;i<128;i++) for(j=0;j<128;j++) write_data(0x00,0x1f); Delayms(10); } void LCD_Init(void) { LCD_GPIO_Init(); RES(1); Delayms(30); RES(0); Delayms(60); RES(1); Delayms(60); Initial_ILI9163(); Delayms(1500); display_red(); Delayms(1500); display_green(); Delayms(1500); display_blue(); Delayms(1500); display_white(); Delayms(1500); display_black(); Delayms(1000); } [/mw_shl_code]


[mw_shl_code=c,true]#ifndef __LCD_H #define __LCD_H #include "stm32f10x_gpio.h" #define RD(a) {if(a == 0) GPIO_ResetBits(GPIOB,GPIO_Pin_3);else GPIO_SetBits(GPIOB,GPIO_Pin_3);} #define WR(a) {if(a == 0) GPIO_ResetBits(GPIOB,GPIO_Pin_4);else GPIO_SetBits(GPIOB,GPIO_Pin_4);} #define RS(a) {if(a == 0) GPIO_ResetBits(GPIOB,GPIO_Pin_5);else GPIO_SetBits(GPIOB,GPIO_Pin_5);} #define RES(a) {if(a == 0) GPIO_ResetBits(GPIOB,GPIO_Pin_8);else GPIO_SetBits(GPIOB,GPIO_Pin_8);} #define CS(a) {if(a == 0) GPIO_ResetBits(GPIOB,GPIO_Pin_9);else GPIO_SetBits(GPIOB,GPIO_Pin_9);} //????????????LCD?????????? #define OutPut_Data(LCD_DATA) GPIO_Write(GPIOA,((GPIOA->ODR&0X00FF)|(LCD_DATA << 8))) void LCD_GPIO_Init(void); void write_data(int8_t i,int8_t j); void data_out(int8_t b); void comm_out(int8_t m); void Delayms(uint32_t t); void Initial_ILI9163(void); void display_black(void); void display_white(void); void display_red(void); void display_green(void); void display_blue(void); void LCD_Init(void); #endif [/mw_shl_code]


最佳答案

查看完整内容[请看2#楼]

驱动终于调出来了,原来是我的数据线互相短路了,另外,我的板子,居然有两根控制线的引脚是坏的!多谢各位的知道!
Love life, love the electrons!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

22

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2013-10-26
在线时间
18 小时
 楼主| 发表于 2015-3-20 10:16:52 | 显示全部楼层
驱动终于调出来了,原来是我的数据线互相短路了,另外,我的板子,居然有两根控制线的引脚是坏的!多谢各位的知道!

STM32_LCD(驱动成功).rar

3.43 MB, 下载次数: 1746

Love life, love the electrons!
回复

使用道具 举报

头像被屏蔽

52

主题

440

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1237
金钱
1237
注册时间
2013-1-9
在线时间
151 小时
发表于 2015-3-20 13:18:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

22

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2013-10-26
在线时间
18 小时
 楼主| 发表于 2015-3-20 15:26:19 | 显示全部楼层
回复【2楼】hexboot:
---------------------------------

我的时序也参照了原子哥的OLED 8080时序,速度方面,应该是没问题的!

你说速度太快,具体是?
Love life, love the electrons!
回复

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2014-9-18
在线时间
44 小时
发表于 2015-3-20 21:56:28 | 显示全部楼层
/***************************FSMC驱动的********************************/


#define LCD_REG      (*((volatile u8 *) 0x60000000)) //A16=0;
#define LCD_RAM      (*((volatile u8 *) 0x60030000)) //A16=1;



void WriteReg(u8 addr)
{
LCD_REG=addr;

}
void WriteRam(u8 data)
{
LCD_RAM=data;


}
void WriteRamColor(u16 color)
{
LCD_RAM=color>>8;
LCD_RAM=color&0xff;
}



//************* Start Initial Sequence ILI9163C *********//
WriteReg(0x11); //Exit Sleep
delay_ms(20);
WriteReg(0x26); //Set Default Gamma
WriteRam(0x04);
//WriteReg(0xF2); //E0h & E1h Enable/Disable
//WriteRam(0x00);
WriteReg(0xB1);
WriteRam(0x0C);
WriteRam(0x14);
WriteReg(0xC0); //Set VRH1[4:0] & VC[2:0] for VCI1 & GVDD
WriteRam(0x0C);
WriteRam(0x05);
WriteReg(0xC1); //Set BT[2:0] for AVDD & VCL & VGH & VGL
WriteRam(0x02);
WriteReg(0xC5); //Set VMH[6:0] & VML[6:0] for VOMH & VCOML
WriteRam(0x31);
WriteRam(0x58);
WriteReg(0xC7);
WriteRam(0x40);
WriteReg(0x3a); //Set Color Format
WriteRam(0x05);
WriteReg(0x2A); //Set Column Address
WriteRam(0x00);
WriteRam(0x00);
WriteRam(0x00);
WriteRam(0x7F);
WriteReg(0x2B); //Set age Address
WriteRam(0x00);
WriteRam(0x00);
WriteRam(0x00);
WriteRam(0x7F);
WriteReg(0x36); //Set Scanning Direction
WriteRam(0xC8);
WriteReg(0xB7); //Set Source Output Direction
WriteRam(0x00);
WriteReg(0xf2); //Enable Gamma bit
WriteRam(0x01);
WriteReg(0xE0);
WriteRam(0x36);//p1
WriteRam(0x29);//p2
WriteRam(0x12);//p3
WriteRam(0x22);//p4
WriteRam(0x1C);//p5
WriteRam(0x15);//p6
WriteRam(0x42);//p7
WriteRam(0xB7);//p8
WriteRam(0x2F);//p9
WriteRam(0x13);//p10
WriteRam(0x12);//p11
WriteRam(0x0A);//p12
WriteRam(0x11);//p13
WriteRam(0x0B);//p14
WriteRam(0x06);//p15
WriteReg(0xE1);
WriteRam(0x09);//p1
WriteRam(0x16);//p2
WriteRam(0x2D);//p3
WriteRam(0x0D);//p4
WriteRam(0x13);//p5
WriteRam(0x15);//p6
WriteRam(0x40);//p7
WriteRam(0x48);//p8
WriteRam(0x53);//p9
WriteRam(0x0C);//p10
WriteRam(0x1D);//p11
WriteRam(0x25);//p12
WriteRam(0x2E);//p13
WriteRam(0x34);//p14
WriteRam(0x39);//p15
WriteReg(0x29); // Display On
WriteReg(0x2C);
回复

使用道具 举报

22

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2013-10-26
在线时间
18 小时
 楼主| 发表于 2015-3-21 23:02:09 | 显示全部楼层
回复【4楼】nlive:
---------------------------------
好的,谢谢!
Love life, love the electrons!
回复

使用道具 举报

22

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2013-10-26
在线时间
18 小时
 楼主| 发表于 2015-3-23 14:35:33 | 显示全部楼层
回复【4楼】nlive:
---------------------------------
可惜我的主控没FSMC,用不了这程序!有没模拟8080端口的?
麻烦了!
Love life, love the electrons!
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-3-23 16:38:16 | 显示全部楼层
帮顶.....
回复

使用道具 举报

22

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2013-10-26
在线时间
18 小时
 楼主| 发表于 2015-3-23 17:09:03 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
下次不会了,不好意思!
Love life, love the electrons!
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-3-23 17:44:34 | 显示全部楼层
既然是模拟,建议按显示控制器的时序来,更简单。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-3-25 23:01:32 | 显示全部楼层
回复【10楼】口天土立口:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-5-13
在线时间
0 小时
发表于 2015-5-13 09:32:26 | 显示全部楼层
顶一个
我也搞超久的
谢谢分享阿
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-12-22
在线时间
0 小时
发表于 2015-5-20 22:36:48 | 显示全部楼层
我整了好几天,还是没搞出来,直接用楼主的程序还是不行,奇怪了,然道我硬件焊错了?


请问箭头处是1脚吗?
回复

使用道具 举报

22

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2013-10-26
在线时间
18 小时
 楼主| 发表于 2015-5-21 11:39:43 | 显示全部楼层
回复【13楼】ekelude:
---------------------------------
我们的驱动IC是一样的,但分辨率参数是不同的,我用的不是你这款!你需要修改某些参数设置,对照着手册,照着命令参数修改初始化设置!

我不知道你的这个是不是1脚!
Love life, love the electrons!
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2013-12-22
在线时间
0 小时
发表于 2015-5-22 22:39:32 | 显示全部楼层
回复【14楼】口天土立口:
---------------------------------
WriteReg(0xC0);

WriteReg(0xC1);

WriteReg(0xC5);

这三条设置依据是什么?
回复

使用道具 举报

22

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2013-10-26
在线时间
18 小时
 楼主| 发表于 2015-5-27 15:11:57 | 显示全部楼层
回复【15楼】ekelude:
---------------------------------
写寄存器函数,形参是寄存器的地址,你查一下数据手册就知道这个寄存器是干什么用的,我当时都是一个寄存器一个寄存器地址的对比,了解他们的作用,然后修改成我屏幕的参数!
Love life, love the electrons!
回复

使用道具 举报

16

主题

253

帖子

0

精华

高级会员

Rank: 4

积分
565
金钱
565
注册时间
2013-10-16
在线时间
52 小时
发表于 2018-4-28 11:21:10 | 显示全部楼层
楼主,你好,我这边的ILI9163C驱动各方面也正常,读取各个寄存器时值也正常。
但是,读取点颜色时,数据不正常。和当前的显示颜色不符。
你有遇到这个问题吗?怎么解决的?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-7 16:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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