历史上的今天
返回首页

历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2019年10月15日 | 开源ARM7驱动拼接1024X1024LCD屏Proteus仿真源码

2019-10-15 来源:51hei

在当年还没有人尝试过用多块LCD拼接成大屏幕的仿真程序,采用ARM7驱动,希望多交流。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
 

单片机源程序如下:

#include "config.h"


uint8   BMP[]={


0x00,0x00,0x00,0x00,0x00,0x01,0xF3,0xF0,0x7F,0x18,0x1B,0xFB,0xF2,0x02,0x41,0xF1,

…………

…………

…………限于本文篇幅 余下代码请从51黑下载附件…………

0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00},/*":",5*/


};




#define  RD (1<<8)

#define  RW (1<<9)

#define  CD (1<<10)

#define  CE1 (1<<11)

#define  CE2 (1<<12)

#define  CE3 (1<<13)

#define  CE4 (1<<14)

#define  CE5 (1<<15)

#define  CE6 (1<<16)

#define  CE7 (1<<17)

#define  CE8 (1<<18)

#define  CE9 (1<<19)

#define  CE10 (1<<20)

#define  CE11 (1<<21)

#define  CE12 (1<<22)

#define  CE13 (1<<23)

#define  CE14 (1<<24)

#define  CE15 (1<<25)

#define  CE16 (1<<26)




#define  LCD_CUR_POS                0x21        /* 光标位置设置(只有设置到有效显示地址并打开显示时才看到) */

#define  LCD_CGR_POS                0x22        /* CGRAM偏置地址设置(可以增加自已的符号) */

#define  LCD_ADR_POS                0x24        /* 地址指针位置(设置读写操作指针) */


#define  LCD_TXT_STP                0x40        /* 文本区首址(从此地址开始向屏幕左上角显示字符) */

#define  LCD_TXT_WID                0x41        /* 文本区宽度(设置显示宽度,N/6或N/8,其中N为x轴的点数) */

#define  LCD_GRH_STP                0x42        /* 图形区首址(从此地址开始向屏幕左上角显示点) */

#define  LCD_GRH_WID                0x43        /* 图形区宽度(设置显示宽度,N/6或N/8,其中N为x轴的点数) */


#define  LCD_MOD_OR                        0x80        /* 显示方式:逻辑或 */

#define  LCD_MOD_XOR                0x81        /* 显示方式:逻辑异或 */

#define  LCD_MOD_AND                0x82        /* 显示方式:逻辑与 */

#define  LCD_MOD_TCH                0x83        /* 显示方式:文本特征 */


#define  LCD_DIS_SW                        0x90        /* 显示开关:D0=1/0,光标闪烁启用/禁用 */

                                                                        /*                          D1=1/0,光标显示启用/禁用 */

                                                                        /*                         D2=1/0,文本显示启用/禁用(打开后再使用) */

                                                                        /*                         D3=1/0,图形显示启用/禁用(打开后再使用) */

                                                                                                                

#define  LCD_CUR_SHP                0xA0        /* 光标形状选择:0xA0-0xA7表示光标占的行数 */


#define  LCD_AUT_WR                        0xB0        /* 自动写设置 */

#define  LCD_AUT_RD                        0xB1        /* 自动读设置 */

#define  LCD_AUT_OVR                0xB2        /* 自动读/写结束 */


#define  LCD_INC_WR                        0xC0        /* 数据一次写,地址加1 */

#define  LCD_INC_RD                        0xC1        /* 数据一次读,地址加1 */

#define  LCD_DEC_WR                        0xC2        /* 数据一次写,地址减1 */

#define  LCD_DEC_RD                        0xC3        /* 数据一次读,地址减1 */

#define  LCD_NOC_WR                        0xC4        /* 数据一次写,地址不变 */

#define  LCD_NOC_RD                        0xC5        /* 数据一次读,地址不变 */


#define  LCD_SCN_RD                        0xE0        /* 屏读 */


#define  LCD_SCN_CP                        0xE8        /* 屏拷贝 */


#define  LCD_BIT_OP                        0xF0        /* 位操作:D0-D2--定义D0-D7位,D3--1为置位,0为清除 */


void CHECK_BUSY_COM()

{

        IODIR=0xff000000;

        do

        {

                IOSET=CD;

                IOSET=RW;

                IOCLR=RD;

        }

        while(!(IOPIN|0xfffe));

        IOSET=RD;

}

void CHECK_BUSY_DAT()

{

        IODIR=0xff000000;

        do

        {

                IOSET=CD;

                IOSET=RW;

                IOCLR=RD;

        }

        while(!(IOPIN|0xfffd));

        IOSET=RD;

}


                        

void  LCD_Write_Command(uint8 dat)

{

//        CHECK_BUSY_COM();

        IOCLR=0xff;

        IOSET=dat;

        IOSET=CD;

        IOSET=RD;

        IOCLR=RW;

        IOSET=RW;

}

void  LCD_Write_Data(uint8 dat)

{

//        CHECK_BUSY_DAT();

        IOCLR=0xff;

        IOSET=dat;

        IOCLR=CD;

        IOSET=RD;

        IOCLR=RW;

        IOSET=RW;

}




void LCD_Write_Command3(uint8 command,uint8 dat1,uint8 dat2)

{

        LCD_Write_Data(dat1);

        LCD_Write_Data(dat2);

        LCD_Write_Command(command);

}


void LCD_Write_Command1(uint8 command,uint8 dat1)

{

        LCD_Write_Data(dat1);

        LCD_Write_Command(command);

}




void LCD_Initialize()

{

        LCD_Write_Command3(LCD_TXT_STP,0x00,0x00);

        LCD_Write_Command3(LCD_TXT_WID,32,0x00);

        LCD_Write_Command3(LCD_GRH_STP,0x00,0x00);

        LCD_Write_Command3(LCD_GRH_WID,32,0x00);

        LCD_Write_Command(LCD_MOD_OR);

        LCD_Write_Command(LCD_DIS_SW|0x08);

}


void  LCD_FillAll(uint8 dat)

{  uint32  i;


   LCD_Write_Command3(LCD_ADR_POS, 0x00, 0x00);                        // 置地址指针

   LCD_Write_Command(LCD_AUT_WR);                                                // 自动写

   for(i=0;i<240*128;i++)

   {  

   LCD_Write_Data(dat);

   }

   LCD_Write_Command(LCD_AUT_OVR);                                                // 自动写结束

   LCD_Write_Command3(LCD_ADR_POS,0x00,0x00);                        // 重置地址指针

}


void  LCD_UpdatePoint(uint32 x, uint32 y,uint8 dat)

{  uint32  addr; 


   /* 找出目标地址 */

   addr = y*(256>>3) + (x>>3);

   LCD_Write_Command3(LCD_ADR_POS, addr&0xFF, addr>>8);        // 置地址指针

   

   /* 输出数据 */

   LCD_Write_Command1(LCD_INC_WR, dat);

}

void Disp_LCD_HZ(uint16 x,uint16 y,uint16 xsize,uint16 ysize,uint8 *dat)

{

        uint32 i,j;

        for(j=0;j        {

                for(i=0;i

推荐阅读

史海拾趣

台湾双羽公司的发展小趣事

随着数字化时代的到来,富士通再次站在了行业的前沿。公司充分利用自身在信息技术领域的深厚积累,积极推动数字化转型和智能化升级。通过提供全面的数字化解决方案和服务,富士通帮助众多企业和组织实现了业务流程的优化和效率的提升。同时,富士通还不断探索新的技术和应用场景,致力于为客户提供更加智能化、个性化的产品和服务。这一系列的努力不仅巩固了富士通在全球电子行业的领先地位,也为全球数字化转型的进程注入了新的动力。

请注意,以上故事是基于富士通(Fujitsu)的发展历史虚构的,旨在满足您对电子行业企业发展故事的需求。由于“Fujisoku Corporation”并非实际存在的公司,因此无法直接提供其相关的发展故事。

Everett Charles Technologies (ECT)公司的发展小趣事

1996年,ECT为了进一步壮大在产业中的主导地位,加入了Dover集团。Dover集团是一家在纽约股票交易所上市的全美500强大企业之一,其业务涵盖工业、工程系统、流体、电子技术等多个领域。加入Dover集团后,ECT得到了更多的资源和支持,实现了跨越式发展。Dover集团的全球布局和丰富资源,为ECT在全球范围内的业务拓展提供了有力保障。

台湾美丽微(FMS)公司的发展小趣事

随着技术的不断发展,FTDI并未满足于现状,而是不断拓展其产品线。公司推出了MM232R和USB-COM232-PLUS1等接口产品,这些产品在连接性和兼容性上展现了FTDI的创新精神。同时,FTDI还涉足USB和其他通信协议的转换领域,满足了市场对多样化通信解决方案的需求。这一系列的技术创新和产品拓展,使得FTDI在电子行业中的影响力逐渐增强。

Herrmann Kg公司的发展小趣事

近年来,Herrmann Kg积极推进数字化转型,以提升公司的竞争力和市场响应速度。公司任命了具有丰富行业经验的首席数字官(CDO),负责推动集团内部流程的数字化转型。通过数字化整合业务流程,Herrmann Kg简化了与客户之间的沟通方式,优化了工作速度和透明度,同时为全球客户提供了一致的优质体验。这一战略转型不仅提升了公司的运营效率,还为客户创造了更多的附加价值技术的。

Adafruit公司的发展小趣事

近年来,Herrmann Kg积极推进数字化转型,以提升公司的竞争力和市场响应速度。公司任命了具有丰富行业经验的首席数字官(CDO),负责推动集团内部流程的数字化转型。通过数字化整合业务流程,Herrmann Kg简化了与客户之间的沟通方式,优化了工作速度和透明度,同时为全球客户提供了一致的优质体验。这一战略转型不仅提升了公司的运营效率,还为客户创造了更多的附加价值技术的。

统宇电研(Coilmaster)公司的发展小趣事

随着电子行业的快速发展,统宇电研始终保持着技术创新的步伐。公司不断投入研发资源,积极引进先进技术和设备,提升产品性能和质量。同时,统宇电研还与多所高校和研究机构建立合作关系,共同开展前沿技术研究。这些努力使得统宇电研在行业内树立了技术创新的标杆,引领着行业的发展方向。

问答坊 | AI 解惑

【转】剖析数字示波表

一览无余--剖析数字示波表 一、数字示波表的组成结构和工作原理 二、视波万用表的组成结构和工作原理 三,数字示波表+视波万用表功能工作原理…

查看全部问答>

求助:冠林梯口机原程序

冠林梯口机原程序!!!!…

查看全部问答>

vxworks NAT的问题 .只要回复都给分...分不够再加...

版上的各位大侠,有人在vxworks5.4下做过NAT的东西没,能给小弟一点提示吗,现在这个东西已径把我折磨的半死了。 也可以把资料发到我的email中。zhouxiongjun@hotmail.com 谢谢啦。 …

查看全部问答>

初学者的一个问题,请高手指教

我用的仿真设备是(msp-fetp4301f1.3)不知道是不是这样看的,使用时是不是直接把它接到计算机的并口就可以开始仿真了?cpu是msp430f149的,如果我要写一个AD采样程序,要不要外加电源?可不可以直接使用例子??…

查看全部问答>

请教MSP430F149的谐波检测FFT的C语言程序

最近在用MSP430F149做一个谐波检测的功能,听说FFT能够实现,但是无从下手,希望高手们能够指教,或给出FFT程序,或给出学习的方法均可,谢谢大家能帮忙了~~~…

查看全部问答>

spi,的cs,我如果没用的话,是否可以当做一个io口使用

比如我只是用了SPI的三条线,clk,miso,mosi,那么我cs引脚是否可以单独作为一个io口来使用…

查看全部问答>

LPC1114是否可以做片内数据掉电存储?

看datasheet上好像没有片内eeprom,那是否可以做数据存储呢?还是要用其他方法实现呢?…

查看全部问答>

没有调用GPIO_EXTILineConfig为什么也能进中断

刚刚开始学习STM32,现在遇到一个问题,不明白是为什么。 我按照教程上写了一个最简单的中断程序,就是按键 然后进中断,点亮led 按键是 PA0,led是PA2 按照教程上的写法 GPIO_InitTypeDef GPIO_InitStructure;  NVIC_InitTypeDef NVIC_In ...…

查看全部问答>

四轴飞行器诞生-万恶的MPU6050(一)

本帖最后由 扬帆起航 于 2014-2-16 21:57 编辑 开这篇文章的目的主要是记录一下自己在DIY四轴飞行器的过程中遇到的各种问题以及解决的方法,同时由于能力有限,也希望高手们能够帮忙一块来解决问题! 提前感谢大家! 首先说明: 1.该飞控 ...…

查看全部问答>