打印

经过努力,终于将C8051驱动640x480的驱动方案搞的差不多了。

[复制链接]
9384|54
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
草履虫|  楼主 | 2009-9-29 13:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
myfaith| | 2009-9-29 20:47 | 只看该作者
不知道是怎么个"秒杀"**填纯色?画图?
刷一屏要1秒有什么用处?带驱动的LCD本身就不需要"其他驱动芯片"

使用特权

评论回复
板凳
古道热肠| | 2009-9-30 15:31 | 只看该作者
呵呵,自娱自乐,何不上PP.再上图,与大家同乐.

使用特权

评论回复
地板
zq1987731| | 2009-9-30 15:32 | 只看该作者
话说操作SRAM和行场扫描脉冲是两码事..

使用特权

评论回复
5
草履虫|  楼主 | 2009-10-16 23:00 | 只看该作者
呵。。。。
1. C8051完成了TFT驱动刷新功能,16位色。(TFT屏本身没有驱动)
2. UART串口最高支持512000bps速率, 通过串口可以下载图片,字库等信息到FLASH或SRAM, 支持画圆,画线,矩形,反色等。
置点,更改UART波特率,更换图片。
3. 内建12,16,24,32位字库GB2313, 用户可以直接通过串口调用。
4. 能够存储128幅图片。
所有这一切都由C8051完成, 而无需专用驱动芯片。
通过做这个东西,对C如何调用汇编文件中的函数才刚刚有点入门。

使用特权

评论回复
6
LLLLWWWW| | 2009-11-5 10:25 | 只看该作者
怎么和我做的东西很相似~~我也是用的C8051,我的还支持USB接口,呵呵!
请问你:1。你的16位色是彩色吗?还是黑白灰阶?
        2。TFT驱动是个什么东东?
        3。GB2313字库在C8051内部还是在外部?
        4。置点是什么意思?更换图片是修改还是覆盖?

使用特权

评论回复
7
wangkj| | 2009-11-5 14:25 | 只看该作者
俺也搞定了,320*240 - 1920*1200 tft真彩,16bit sdram显存。
有很多pp.
原帖在这:
https://bbs.21ic.com/icview-119600-1-1.html

另外,UART串口最高支持512000bps速率,是不是搞错了,pc貌似没这么快吧?

使用特权

评论回复
8
wangkj| | 2009-11-5 14:26 | 只看该作者
咱几个能不能合作,一起赚钱?

使用特权

评论回复
9
machunshui| | 2009-11-5 14:52 | 只看该作者
我也打算要搞这个东东了。

准备用lpc2478,带TFT LCD接口。

要求不高,操作不要明显延迟即可,

各位大佬给提提建议。

使用特权

评论回复
10
wangkj| | 2009-11-5 15:03 | 只看该作者
:L 都来凑热闹啊,俺是搞了一年多才搞定的。这一年,几乎都是做这个,给公司干活很少,反正没人管。

使用特权

评论回复
11
warden| | 2009-11-6 08:22 | 只看该作者
没什么意义的贴子,楼主难道只是为了炫耀。
非技术论谈贴,更非技术开源贴

使用特权

评论回复
12
wangkj| | 2009-11-6 08:27 | 只看该作者
所以,俺诚心打击lz一下。我那个,90%是开源的.

使用特权

评论回复
13
myfaith| | 2009-11-6 09:17 | 只看该作者
LZ能不能详细介绍一下呢,TFT不带驱动,难道用MCU直接驱动RGB接口的TFT??

使用特权

评论回复
14
草履虫|  楼主 | 2009-11-9 14:39 | 只看该作者
正是。MCU的管脚直接驱动。采用C8051,可以支持字库,图片下载,RS232最高支持512000.USB转RS232最高支持到921600。
所有的驱动时序均采用I/O口模拟的。
1. 画线,画矩形,画圆,置点等图形操作。
2. 字库16*16,24*24,32*32存储于外部nand flash里。
3. 图片可以直接下载时先放入显存,然后再写入nand flash里,最多支持96幅图片。
4. 分辨率可以支持640*480以下的大多数TTL 接口的屏。16位色。
5. 功能较多。
我了做过CPLD方案的并口方案,纯粹是个人兴趣。

使用特权

评论回复
15
myfaith| | 2009-11-9 15:33 | 只看该作者
MCU的IO模拟RGB接口能做到"秒杀"640X480??

使用特权

评论回复
16
cool_coder| | 2009-11-9 15:53 | 只看该作者
640*480*60fps*16bit = 294.912Mb/s
能做出来确实不简单, 只用一片C8051?

使用特权

评论回复
17
草履虫|  楼主 | 2009-11-9 16:45 | 只看该作者
I/O模拟的RGB,当然是这样的。用了一片8051, 一片sram, 三片573, 还有就是FLASH。16位色。
关键代码全部采用汇编写的,不然也没有办法实现。无关速度的地方采用C。
我测试过,刷新20图片用时大约15S以下。

使用特权

评论回复
18
xwj| | 2009-11-9 16:54 | 只看该作者
16楼的算法不对,不需要乘以16

使用特权

评论回复
19
草履虫|  楼主 | 2009-11-9 16:59 | 只看该作者
其实驱动速率也没有什么,只需要送地址即可,SRAM支持地址读操作,改变SRAM地址即可将SRAM的数据读出,只要控制时序即可。

使用特权

评论回复
20
草履虫|  楼主 | 2009-11-9 18:05 | 只看该作者
附上如何KEIL C嵌入汇编的过程,软件代码已删除
以下内容仅供参考。

////////////main.c文件内容如下////////////////
#include <c8051f120.h>
#include "test.h"
extern void vSram_Write_nWord(word wXpos, word wYpos, word bSramWriteNum);
extern byte xdata g_wSramBuf[2048];
void vSYSCLK_IntOsc_Init(void)
{
//todo
}
void vRAM_Init(void)
{
//todo
}
void vPORT_Init(void)
{
//todo
}
void cmd(void)
{
//todo
}
void main(void)
{
WDTCN = 0xde;
WDTCN = 0xad;
SP = 0x60;
vSYSCLK_IntOsc_Init();
vRAM_Init();
vPORT_Init();
//vSram_Write_nWord(100,100,100);
while(1){
  cmd();
;
}
}
void UART0_ISR(void) interrupt 4 using 1
{
//todo
}

////////////test.h文件内容如下////////////////

#ifndef _TEST_H_
#define _TEST_H_
typedef unsigned char byte;
typedef unsigned int word;
void vSram_Write_nWord(word wXpos, word wYpos, word bSramWriteNum);
void vSram_Read_nWord(word wAddressL, byte bAddressH, word bSramReadNum);
#endif

/////////////////////test.c文件内容如下/////////////////////////

$NOMOD51
#include <c8051f120.h>
NAME TEST
public g_wSramBuf
public _vSram_Write_nWord,vSram_Read_nWord
;vSram_Write_Data_Seg segment data
;       rseg vSram_Write_Data_Seg
      dseg at 27h
bSfrBuf:   ds 1
;------------------------------------------------------------------------------
; XDATA SEGMENT--Reserves space in XDATA RAM--Delete this segment if not used.
;------------------------------------------------------------------------------
vSram_Write_Xdata_Seg segment xdata      ; segment for XDATA RAM
      rseg vSram_Write_Xdata_Seg  ; switch to this xdata segment
g_wSramBuf:  ds 2048        ; reserve 2048 Bytes for xdata_array
vSram_Write_nWord_Prog segment code
      rseg vSram_Write_nWord_Prog
      using 0

;-------------------------------------------------------------------
;vSram_Write_nWord
;parameter: wXpos(R6, R7), wYpos(R4,R5), bWriteNum(R2,R3)
;use global variable: g_wSramBuf[2048]
;Return: No
;-------------------------------------------------------------------
_vSram_Write_nWord:
vSram_Write_nWord:
;todo
   ret
_vSram_Read_nWord:
vSram_Read_nWord:
;todo
   ret
end



/////////////////driver.asm文件内容如下//////////////////



$NOMOD51
#include <c8051f120.h>
public TFT_640x480_Drv, TFT_320x240_Drv, TFT_480x272_Drv
public TFT_DISP_MODE
;TFT_DRIVER_REG  segment data        ; segment for DATA RAM.;
;    rseg TFT_DRIVER_REG       ; switch to this data segment
    dseg at 28h
TFT_DISP_MODE:    ds 1
cseg AT 002BH
ljmp TFT_DRIVER_ISR
;TFT_DRIVER_PROG segment code
; rseg  TFT_DRIVER_PROG
cseg AT 1000H
;  org 0x1000
TFT_Driver_ISR:
   push acc       ;保护现场
   push dph
   push dpl
   push psw
   mov  psw, #0x18     ;使用第三组寄存器, RS1 = 1, RS0 = 1;
Tft_Isr_Next:
   mov  A, TFT_DISP_MODE
   mov  dptr, #Entry_Mode0_Jmp
   jmp  @a+dptr      ;
Entry_Mode0_Jmp:
   acall TFT_640x480_Drv     ;2 bytes,模式0,640×480模式
   sjmp Tft_Driver_Isr_End    ;2 bytes
Entry_Mode1_Jmp:
   acall TFT_320x240_Drv;    ;模式1,320×240模式
   sjmp Tft_Driver_Isr_End
Entry_Mode2_Jmp:
   acall TFT_480x272_Drv;    ;模式2,480×272模式
   sjmp Tft_Driver_Isr_End
Tft_Driver_Isr_End:
   pop  psw
   pop  dpl
   pop  dph
   pop  acc
   reti
TFT_640x480_Drv:
;todo
   ret
TFT_320x240_Drv:  
;todo
   ret
TFT_480x272_Drv:  
;todo
   ret
   end

}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

489

帖子

0

粉丝