切换到宽版
  • 10253阅读
  • 15回复

[C51]福特车机屏点亮了(主控PWB20354+屏号TFT2K2008FPC) [复制链接]

上一主题 下一主题
离线lvehe
 

发帖
94
M币
220
专家
4
粉丝
7
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2017-12-26
从闲鱼上买了2个福特的车机屏,就因为便宜(5元一个),所以买来2个玩玩。
屏一买来就开始画原理图,画了好几天才画完,正确性不敢说100%,至少95%以上。
一边画原理图一边查资料,才发现是福特的车机屏,就是传说中的1小时模式的那个车机配套的屏。
这款屏在很多福特车上都有,包括嘉年华、福克斯等等,背面标的型号也是五花八门,常见的是cd1038,但实际上是一样的,内部电路板设计完全一样。
刚开始只有屏,接上12V电源,但是没有LIN和CAN的数据,根本没办法点亮,所以无法分析。
偶然找到数码之家坛友 @hblg-wpf   发表的帖子:http://bbs.mydigit.cn/read.php?tid=1110992
和他聊了几次之后,没想到居然主动送我一套车机和按键,在此再次表示感谢。
车机和按键到了之后,接好线,发现这个屏单独靠按键也是可以点亮的,按下开机键通过LIN总线发送开机命令即可。
将屏幕电路板上各测试点焊好线,在逻辑分析仪的帮助下,终于得到屏的初始化和刷屏数据。

屏的FPC上标的型号为TFT2K2008FPC或TFT2K2048FPC,分辨率为176x120,尺寸3.5"。
与很多SPI接口的屏一样,先发MSB(最高位),SCL无效时为低电平,数据上升沿有效,CS低电平有效,RS低电平为命令。
它的原点位于右上角,从右向左、从上往下扫描。应该也可以通过命令改变扫描的方向,但看不懂初始化的命令分别代表什么意思。
刚开始以为是单色屏,没想到支持4级灰度(00, 01, 10, 11)。但实际上10和11看不出区别,可能和初始化命令有关。
即1字节表示横向4点,2位表示一点,每点4级灰度。<-- 76 54 32 10(从右向左),故实际为176/4=44列,120行。
为验证,特意写了个程序,采用STC12LE5A60S2单片机。
由于车机屏每次都是刷新整个屏幕,如果要单独显示某个点是比较浪费时间的。
尝试了n次之后才找到窗口设置命令,这样就可以实现对屏幕上任意点的控制了。

当然了,有了原理图,这块板子也是可以单独利用的,不限于只利用屏幕来显示东西。单片机是16位的MC9S12XEP100(不同批次可能略有差异),包括CAN芯片TJA1042T/3和LIN芯片TJA1020T。相当于5块钱买来一个开发板啊。可惜没有编程器。

开机显示一小时模式


接上车机按RADIO键才有效


飞线接到单片机上,屏幕供电是从单片机板子上取的


没有背光在背面照耀时有点像墨水屏


初始化数据


PWB20354背面测试点(点击图片放大)


原理图、源代码下载:

https://pan.baidu.com/s/1gf2FMqJ

以下是2个关键的函数:
  1. void LCD_Init()
  2. {
  3.         LCD_PB4_LO();
  4.         LCD_PB5_LO();
  5.         LCD_CS_HI();
  6.         LCD_SCK_LO();
  7.         LCD_SDA_HI();
  8.         LCD_RST_HI();
  9.         LCD_RS_LO();
  10.         Delay50us();
  11.         
  12.         LCD_RST_LO(); //低电平复位
  13.         Delay50us();
  14.         LCD_RST_HI(); //复位完毕
  15.         Delay50us();
  16.         
  17.         LCD_CS_LO();
  18.         
  19.         SendCmd1(0x5E, 0xA5);
  20.         delay_ms(5);
  21.         
  22.         SendCmd4(0x91, 0x00, 0xAF, 0x00, 0x77);
  23.         SendCmd4(0x92, 0x92, 0x01, 0x80, 0x00);
  24.         SendCmd4(0x93, 0x09, 0x85, 0x0B, 0x81);
  25.         SendCmd4(0x21, 0x07, 0xA5, 0xA5, 0xA5);
  26.         SendCmd4(0x24, 0x00, 0xA5, 0xA5, 0xA5);
  27.         SendCmd4(0x25, 0x01, 0xA5, 0xA5, 0xA5);
  28.         SendCmd4(0x26, 0x00, 0x00, 0x00, 0xA5);
  29.         SendCmd4(0xA2, 0x00, 0xA5, 0xA5, 0xA5);
  30.         SendCmd4(0xA1, 0x00, 0xA5, 0xA5, 0xA5);
  31.         SendCmd4(0x85, 0x00, 0x15, 0x2A, 0x3F);
  32.         SendCmd4(0x8D, 0x00, 0x15, 0x2A, 0x3F);
  33.         SendCmd4(0x71, 0x0E, 0x81, 0x18, 0x17);
  34.         SendCmd4(0x72, 0x06, 0x24, 0xA5, 0xA5);
  35.         SendCmd4(0x61, 0x5F, 0x09, 0x00, 0x00);
  36.         SendCmd4(0x49, 0x00, 0x00, 0x00, 0xA5);
  37.         delay_ms(10);
  38.         
  39.         SendCmd1(0x13, 0xA5);
  40.         delay_ms(10);
  41.         
  42.         SendCmd4(0x23, 0x00, 0x00, 0x00, 0x77);
  43.         SendCmd4(0x22, 0x00, 0x2B, 0x00, 0xA5);
  44.         SendCmd1(0x13, 0xA5);
  45.         SendCmd1(0x15, 0xA5);
  46.         SendCmd4(0x21, 0x07, 0xA5, 0xA5, 0xA5);
  47.         SendCmd4(0x24, 0x00, 0xA5, 0xA5, 0xA5);
  48.         SendCmd4(0x26, 0x00, 0x00, 0x00, 0xA5);
  49.         SendCmd4(0x29, 0x00, 0x00, 0x00, 0x00);
  50.         SendCmd4(0x2A, 0x00, 0x00, 0x00, 0x00);
  51.         SendCmd1(0x1A, 0xA5);
  52.         SendCmd1(0x1C, 0xA5);
  53.         SendCmd4(0x2B, 0x00, 0x00, 0x00, 0x00);
  54.         SendCmd4(0x25, 0x01, 0xA5, 0xA5, 0xA5);
  55.         SendCmd4(0x49, 0x00, 0x00, 0x00, 0xA5);
  56.         // 设置窗口 (0x22, x1, x2, 0, 0xA5)  (0x23, 0, y1, 0, y2)
  57.         // x1表示起始列,x2表示终止列,y1表示起始行,y2表示终止行
  58.         SendCmd4(0x22, 0x00, 0x2B, 0x00, 0xA5);
  59.         SendCmd4(0x23, 0x00, 0x00, 0x00, 0x77);
  60.         
  61.         LCD_CS_HI();
  62.         
  63.         Delay50us();
  64.         
  65.         LCD_ClrScr();
  66. }
  67. //清屏
  68. void LCD_ClrScr(void)
  69. {
  70.         u8 i, j;
  71.         
  72.         LCD_CS_LO();
  73.         SendCmd4(0x22, 0x00, 0x2B, 0x00, 0xA5);
  74.         SendCmd4(0x23, 0x00, 0x00, 0x00, 0x77);
  75.         
  76.         SendCmd1(0x3A, 0xA5);
  77.         
  78.         for (i = 0; i < LCD_HEIGHT; i++)
  79.         {
  80.                 for (j = 0; j < LCD_COLUMN; j++)
  81.                 {
  82.                         Dat2Lcd(0x00);
  83.                 }
  84.         }
  85.         
  86.         SendCmd1(0x12, 0xA5);
  87.         LCD_CS_HI();
  88. }



本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共1条打赏 ,M币+15
dxhdtv M币 +15 原創內容 2018-06-05
离线jachal2009

发帖
3672
M币
1482
专家
2
粉丝
28
只看该作者 1楼 发表于: 2017-12-26
请登录后查看
离线chenzoutie

发帖
1001
M币
3964
专家
11
粉丝
156
只看该作者 2楼 发表于: 2017-12-26
请登录后查看
离线温州啊武

发帖
1099
M币
402
专家
3
粉丝
28
只看该作者 3楼 发表于: 2017-12-26
请登录后查看
离线ahyu99

发帖
2650
M币
5861
专家
5
粉丝
41
只看该作者 4楼 发表于: 2017-12-26
请登录后查看
离线hblg-wpf

发帖
746
M币
882
专家
1
粉丝
21
只看该作者 5楼 发表于: 2017-12-26
请登录后查看
离线jialishoushi

发帖
368
M币
41
专家
2
粉丝
38
只看该作者 6楼 发表于: 2017-12-27
请登录后查看
离线henve

发帖
15
M币
26
专家
0
粉丝
3
只看该作者 7楼 发表于: 2017-12-27
请登录后查看
离线xiaomage

发帖
744
M币
3546
专家
5
粉丝
37
只看该作者 8楼 发表于: 2017-12-29
请登录后查看
离线yuyang6095
发帖
440
M币
651
专家
0
粉丝
16
只看该作者 9楼 发表于: 2018-01-05
请登录后查看
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个