40130064 发表于 2010-5-29 17:25:00

320*240 RA8835控制单色LCD 测试

手上有块没控制器的 LM2028 320*240单色LCD
谁写过控制程序?上点代码!谢谢!



今天玩了一天单色LCD 双向IO时出问题,没玩转,所以好多图出不来
用的这液晶
AM320240_57C59 国产 ANDORIN 这东西不好,写一屏数要2秒.


这是个测试程序,正常 100M时钟

#include "system.h"
#include "altera_avalon_uart_regs.h"
#include "altera_avalon_pio_regs.h"
#include "sys/alt_irq.h"
#include "alt_types.h"
#include "system.h"
#include "sys/alt_irq.h"
#include"priv/alt_busy_sleep.h"

#include <unistd.h>
#include <stdio.h>

union addr//地址共用体
      {
      alt_u16 address;
      alt_u8 a;
      };

unsigned char led,rev;
unsigned char ids=0;
unsigned char sd;



alt_u8Bmp001[]=
{
/*------------------------------------------------------------------------------
;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;源文件 / 文字 : 1
;宽×高(像素): 24×48
;字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/144字节
;数据转换日期: 2009-6-18 9:42:04
------------------------------------------------------------------------------*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x1C,0x00,0x00,0x1C,
0x00,0x00,0x3C,0x00,0x00,0xFC,0x00,0x0F,0xFC,0x00,0x0F,0xFC,0x00,0x00,0x3C,0x00,
0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,
0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,
0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,
0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,
0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
alt_u8Bmp002[]=
{
/*------------------------------------------------------------------------------
;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;源文件 / 文字 : 2
;宽×高(像素): 24×48
;字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/144字节
;数据转换日期: 2009-6-18 9:42:29
------------------------------------------------------------------------------*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0xFF,0xC0,0x03,0xFF,
0xE0,0x07,0xC1,0xF0,0x0F,0x80,0xF0,0x0F,0x00,0xF0,0x0F,0x00,0x78,0x1E,0x00,0x78,
0x1E,0x00,0x78,0x1E,0x00,0x78,0x1E,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0xF0,0x00,
0x00,0xF0,0x00,0x01,0xF0,0x00,0x03,0xE0,0x00,0x07,0xC0,0x00,0x0F,0x80,0x00,0x3F,
0x00,0x00,0x7E,0x00,0x00,0xFC,0x00,0x01,0xF8,0x00,0x03,0xE0,0x00,0x07,0xC0,0x00,
0x07,0x80,0x00,0x0F,0x00,0x00,0x1F,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x3F,
0xFF,0xFC,0x3F,0xFF,0xFC,0x3F,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
alt_u8Bmp003[]=
{
/*------------------------------------------------------------------------------
;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;源文件 / 文字 : 3
;宽×高(像素): 24×48
;字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/144字节
;数据转换日期: 2009-6-18 13:48:07
------------------------------------------------------------------------------*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x01,0xFF,0x80,0x03,0xFF,
0xC0,0x07,0xC3,0xE0,0x0F,0x81,0xE0,0x0F,0x00,0xF0,0x0F,0x00,0xF0,0x1E,0x00,0xF0,
0x1E,0x00,0xF0,0x1E,0x00,0xF0,0x00,0x00,0xF0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,
0x07,0xC0,0x00,0x3F,0x80,0x00,0x3F,0x00,0x00,0x3F,0xC0,0x00,0x03,0xE0,0x00,0x01,
0xF0,0x00,0x00,0xF0,0x00,0x00,0x78,0x00,0x00,0x78,0x3C,0x00,0x78,0x3C,0x00,0x78,
0x3C,0x00,0x78,0x3C,0x00,0x78,0x1E,0x00,0xF0,0x1F,0x00,0xF0,0x0F,0x83,0xE0,0x07,
0xFF,0xC0,0x03,0xFF,0x80,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

alt_u8Bmp004[]=
{
/*------------------------------------------------------------------------------
;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;源文件 / 文字 : 4
;宽×高(像素): 24×48
;字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/144字节
;数据转换日期: 2009-6-18 9:44:25
------------------------------------------------------------------------------*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x03,0xE0,0x00,0x07,
0xE0,0x00,0x0F,0xE0,0x00,0x0F,0xE0,0x00,0x1F,0xE0,0x00,0x1D,0xE0,0x00,0x39,0xE0,
0x00,0x79,0xE0,0x00,0x71,0xE0,0x00,0xF1,0xE0,0x01,0xE1,0xE0,0x01,0xC1,0xE0,0x03,
0xC1,0xE0,0x07,0x81,0xE0,0x07,0x01,0xE0,0x0F,0x01,0xE0,0x0E,0x01,0xE0,0x1C,0x01,
0xE0,0x3C,0x01,0xE0,0x3F,0xFF,0xFE,0x3F,0xFF,0xFE,0x3F,0xFF,0xFE,0x00,0x01,0xE0,
0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,
0x01,0xE0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
alt_u8Bmp005[]=
{
/*------------------------------------------------------------------------------
;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;源文件 / 文字 : 5
;宽×高(像素): 24×48
;字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/144字节
;数据转换日期: 2009-6-18 15:06:51
------------------------------------------------------------------------------*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xE0,0x1F,0xFF,0xE0,0x1F,0xFF,
0xE0,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,
0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x7E,0x00,0x1D,0xFF,0x80,0x1F,0xFF,0xC0,0x1F,
0x83,0xE0,0x1F,0x01,0xF0,0x1E,0x00,0xF0,0x1C,0x00,0xF8,0x00,0x00,0x78,0x00,0x00,
0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0x78,0x3C,0x00,0x78,
0x3C,0x00,0x78,0x3C,0x00,0xF0,0x1E,0x00,0xF0,0x1E,0x00,0xF0,0x1F,0x01,0xE0,0x0F,
0x83,0xC0,0x07,0xFF,0xC0,0x03,0xFF,0x00,0x00,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

alt_u8Bmp006[]=
{
/*------------------------------------------------------------------------------
;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;源文件 / 文字 : 6
;宽×高(像素): 24×48
;字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/144字节
;数据转换日期: 2009-6-18 9:45:35
------------------------------------------------------------------------------*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x00,0x7F,0xE0,0x01,0xFF,
0xF0,0x03,0xE0,0xF8,0x03,0xC0,0x78,0x07,0x80,0x7C,0x07,0x80,0x3C,0x0F,0x00,0x3C,
0x0F,0x00,0x00,0x0F,0x00,0x00,0x0E,0x00,0x00,0x1E,0x1F,0x80,0x1E,0x7F,0xC0,0x1E,
0xFF,0xE0,0x1F,0xC1,0xF0,0x1F,0x80,0xF8,0x1F,0x00,0x78,0x1F,0x00,0x7C,0x1E,0x00,
0x3C,0x1E,0x00,0x3C,0x1E,0x00,0x3C,0x1E,0x00,0x3C,0x1E,0x00,0x3C,0x0E,0x00,0x3C,
0x0F,0x00,0x3C,0x0F,0x00,0x78,0x07,0x00,0x78,0x07,0x80,0xF8,0x03,0xE1,0xF0,0x01,
0xFF,0xE0,0x00,0xFF,0xC0,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
alt_u8Bmp007[]=
{
/*------------------------------------------------------------------------------
;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;源文件 / 文字 : 7
;宽×高(像素): 24×48
;字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/144字节
;数据转换日期: 2009-6-18 9:45:58
------------------------------------------------------------------------------*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xF8,0x1F,0xFF,0xF8,0x1F,0xFF,
0xF8,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0xF0,
0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x01,0xE0,0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,
0x03,0xC0,0x00,0x07,0x80,0x00,0x07,0x80,0x00,0x07,0x80,0x00,0x0F,0x80,0x00,0x0F,
0x00,0x00,0x0F,0x00,0x00,0x1F,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,0x00,0x1E,0x00,
0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x00,0x78,0x00,0x00,
0x78,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
alt_u8Bmp008[]=
{
/*------------------------------------------------------------------------------
;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;源文件 / 文字 : 8
;宽×高(像素): 24×48
;字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/144字节
;数据转换日期: 2009-6-18 9:46:15
------------------------------------------------------------------------------*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x01,0xFF,0x80,0x03,0xFF,
0xC0,0x07,0xC3,0xE0,0x0F,0x00,0xF0,0x0F,0x00,0xF0,0x1E,0x00,0x78,0x1E,0x00,0x78,
0x1E,0x00,0x78,0x1E,0x00,0x78,0x1E,0x00,0x78,0x1F,0x00,0xF8,0x0F,0x00,0xF0,0x07,
0xC3,0xE0,0x03,0xFF,0xC0,0x00,0xFF,0x00,0x07,0xFF,0xE0,0x0F,0x81,0xF0,0x1F,0x00,
0xF8,0x1E,0x00,0x78,0x3C,0x00,0x3C,0x3C,0x00,0x3C,0x3C,0x00,0x3C,0x3C,0x00,0x3C,
0x3C,0x00,0x3C,0x3C,0x00,0x3C,0x1E,0x00,0x78,0x1F,0x00,0xF8,0x0F,0x81,0xF0,0x07,
0xFF,0xE0,0x03,0xFF,0xC0,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
alt_u8 Bmp009[]=
{
/*------------------------------------------------------------------------------
;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;源文件 / 文字 : 9
;宽×高(像素): 24×48
;字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/144字节
;数据转换日期: 2009-6-18 9:46:30
------------------------------------------------------------------------------*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x03,0xFF,0x00,0x07,0xFF,
0x80,0x0F,0x87,0xC0,0x1F,0x01,0xE0,0x1E,0x00,0xE0,0x3C,0x00,0xF0,0x3C,0x00,0x70,
0x3C,0x00,0x70,0x3C,0x00,0x78,0x3C,0x00,0x78,0x3C,0x00,0x78,0x3C,0x00,0x78,0x3C,
0x00,0x78,0x1E,0x00,0xF8,0x1E,0x01,0xF8,0x0F,0x83,0xF8,0x0F,0xFF,0x78,0x03,0xFE,
0x78,0x01,0xF8,0x78,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0xF0,0x00,0x00,0xF0,
0x3C,0x00,0xF0,0x3C,0x01,0xE0,0x3E,0x01,0xE0,0x1E,0x03,0xC0,0x1F,0x07,0x80,0x0F,
0xFF,0x80,0x07,0xFE,0x00,0x01,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
alt_u8Bmp000[]=
{
/*------------------------------------------------------------------------------
;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
;源文件 / 文字 : 0
;宽×高(像素): 24×48
;字模格式/大小 : 单色点阵液晶字模,横向取模,字节正序/144字节
;数据转换日期: 2009-6-18 9:47:05
------------------------------------------------------------------------------*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0xFF,0xC0,0x03,0xFF,
0xE0,0x07,0xC1,0xF0,0x07,0x80,0xF0,0x0F,0x00,0x78,0x0F,0x00,0x78,0x1E,0x00,0x3C,
0x1E,0x00,0x3C,0x1E,0x00,0x3C,0x3C,0x00,0x1E,0x3C,0x00,0x1E,0x3C,0x00,0x1E,0x3C,
0x00,0x1E,0x3C,0x00,0x1E,0x3C,0x00,0x1E,0x3C,0x00,0x1E,0x3C,0x00,0x1E,0x3C,0x00,
0x1E,0x3C,0x00,0x1E,0x3C,0x00,0x1E,0x1C,0x00,0x1C,0x1E,0x00,0x3C,0x1E,0x00,0x3C,
0x1E,0x00,0x3C,0x0F,0x00,0x78,0x0F,0x00,0x78,0x07,0x80,0xF0,0x07,0xC1,0xF0,0x03,
0xFF,0xE0,0x01,0xFF,0xC0,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

//函数声明
void LCDClr(alt_u8 dt);
void Printstr(alt_u16 x,alt_u16 y,alt_u16 w,alt_u16 h,alt_u8 *Bmp );
/******************************************************************************
函数功能:延时
******************************************************************************/
void delaynop(alt_32 n)
{
    while(n--);
}
/******************************************************************************
函数功能:延时
******************************************************************************/
void delayms(alt_32 n)
{
    alt_32 i;
   
    while(n--)
    {
      i=12000;
      while(i--);
    }
}
/******************************************************************************
函数功能:延时
******************************************************************************/
void delayus(alt_32 n)
{
    alt_32 i;   
    while(n--)
    {
      i=12;
      while(i--);
    }
}

/*******************************************************/
//UART发送一个字节子程序
/*******************************************************/

void Uart_send(unsigned char data)
{
   
    IOWR_ALTERA_AVALON_UART_TXDATA(RS232_BASE,data);
   while(!((IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE)&(0x40)) ==0x40));//等待发送完成   
}

/*******************************************************/
//UART发送多个字节子程序
/*******************************************************/

void Uart_send_n(unsigned char *ptr,unsigned char n)
{
    for(;n>0;n--)
    {
      Uart_send(*ptr);
      ptr++;
    }
}

/*******************************************************/
//串口数据扫描
/*******************************************************/

void sdatascan(void)
{
      switch (sd)
      {   
            case 0x16:
            Uart_send_n(sd,6);
            sd=0;
            break;
            default : break;
      }
}

/*******************************************************/
//串口接收中断服务程序
/*******************************************************/

void Uart_ISR(void * context,alt_u32 id)
{
   while(!((IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE)&(0x80)) ==0x80));//等待发送完成   
    sd=IORD_ALTERA_AVALON_UART_RXDATA(RS232_BASE);
   
   
   
   
   
      if(sd==0X68)
      {
            ids=ids+1;
   
                if(ids>=6)
                  {   
                     if ((sd==0X16))
                     {
                     ids=0;
                     rev=0x99;//取数标志         
                     }
                     else
                     {
                      ids=0;
                      }   
                  }               
      }      
}

//*******************************************************/
// 功    能:KEY1中断服务
//*******************************************************/

void Isr_KeyDown1(void* context, alt_u32 id)
{
   alt_u8 i,l,x;
   i=20;l=2;
   x=i/l;
   IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY1_BASE, 0x0);    // 清中断捕获寄存器
   
   LCDClr(0X00);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,0xff);//LED灭
   Printstr(0,0,24,48,Bmp001 );
}

//*******************************************************/
// 功    能:KEY2中断服务
//*******************************************************/

void Isr_KeyDown2(void* context, alt_u32 id)
{
   
   IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY2_BASE, 0x0);    // 清中断捕获寄存器
   LCDClr(0X55);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,0x00);//LED亮
   Printstr(0,0,24,48,Bmp002 );
}

//*******************************************************/
// 功    能:KEY3中断服务
//*******************************************************/
void Isr_KeyDown3(void* context, alt_u32 id)
{
   
   IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY3_BASE, 0x0);    // 清中断捕获寄存器
   LCDClr(0Xff);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,0xff);//LED灭
   Printstr(0,0,24,48,Bmp003 );
}

//*******************************************************/
// 功    能:KEY4中断服务
//*******************************************************/
void Isr_KeyDown4(void* context, alt_u32 id)
{
   
   IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY4_BASE, 0x0);    // 清中断捕获寄存器
   LCDClr(0XAA);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,0x00);//LED亮
   Printstr(0,0,24,48,Bmp004 );
}

/*******************************************************/
//串口中断初始化
/*******************************************************/

void PIOInit(void)

{
   IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_LCDDATA_BASE,0x00);
   IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_LCDCS_BASE,0x00);
   IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_LCDAO_BASE,0x00);
   IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_LCDWR_BASE,0x00);
   IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_LCDRD_BASE,0x00);
   IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_LCDRST_BASE,0x00);
   
    IOWR_ALTERA_AVALON_UART_CONTROL(RS232_BASE, 0x80);//接收中断使能
    IOWR_ALTERA_AVALON_UART_STATUS(RS232_BASE, 0x00);//清状态标志
    IOWR_ALTERA_AVALON_UART_RXDATA(RS232_BASE, 0x00);//清接收寄存器
    alt_irq_register(RS232_IRQ,NULL,Uart_ISR);//注册中断服务子程序
   
    IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_LED_BASE, 0x00); //LED_PIO为输出
   
    IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_KEY1_BASE, 0x00); //KEY_PIO为输出
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY1_BASE, 0xff); //开启KEY的中断
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY1_BASE, 0x0);//清边沿捕获寄存器
    alt_irq_register(PIO_KEY1_IRQ, NULL, Isr_KeyDown1);//注册中断服务子程序
   

    IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_KEY2_BASE, 0x00); //KEY_PIO为输出
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY2_BASE, 0xff); //开启KEY的中断
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY2_BASE, 0x0);//清边沿捕获寄存器
    alt_irq_register(PIO_KEY2_IRQ, NULL, Isr_KeyDown2);//注册中断服务子程序
   
    IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_KEY3_BASE, 0x00); //KEY_PIO为输出
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY3_BASE, 0xff); //开启KEY的中断
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY3_BASE, 0x0);//清边沿捕获寄存器
    alt_irq_register(PIO_KEY3_IRQ, NULL, Isr_KeyDown3);//注册中断服务子程序
   
    IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_KEY4_BASE, 0x00); //KEY_PIO为输出
    IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_KEY4_BASE, 0xff); //开启KEY的中断
    IOWR_ALTERA_AVALON_PIO_EDGE_CAP(PIO_KEY4_BASE, 0x0);//清边沿捕获寄存器
    alt_irq_register(PIO_KEY4_IRQ, NULL, Isr_KeyDown4);//注册中断服务子程序
}
void LCDCommand(unsigned char Com)
{
   
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDAO_BASE,0xFF);//AO=1
    delaynop(100);
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDDATA_BASE,Com);//DATA out
   delaynop(100);
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDRD_BASE,0xFF);//RD=1
   delaynop(100);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDCS_BASE,0x00);//CS=0
      delaynop(100);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDWR_BASE,0x00);//WR=0
      delaynop(100);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDWR_BASE,0xff);//WR=1;
      delaynop(100);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDCS_BASE,0xFF);//CS=1;
      delaynop(100);

}

//*******************************************************/
// 功    能:LCD数据
//*******************************************************/
void LCDData(unsigned char Data)
{
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDAO_BASE,0x00);//AO=0
      delaynop(100);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDDATA_BASE,Data);//输出COM
      delaynop(100);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDRD_BASE,0xFF);//RD=1
      delaynop(100);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDCS_BASE,0x00);//CS=0
      delaynop(100);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDWR_BASE,0x00);//WR=0
      delaynop(100);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDWR_BASE,0xff);//WR=1;
      delaynop(100);
   IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDCS_BASE,0xFF);//CS=1;
   delaynop(100);
}

//*******************************************************/
// 功    能:LCD初始化
//*******************************************************/

void LCDInit(void)
{

    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDRST_BASE,0xFF);//RES=1
    delaynop(100);
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDAO_BASE,0xFF);//AO=1
    delaynop(100);
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDRD_BASE,0xFF);//RD=1
    delaynop(100);
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDCS_BASE,0x00);//CS=0
    delaynop(100);
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDWR_BASE,0xff);//WR=1;
    delaynop(100);
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDRST_BASE,0x00);//RES=1
    delaynop(100);
    IOWR_ALTERA_AVALON_PIO_DATA(PIO_LCDRST_BASE,0xFF);//RES=1
   delaynop(100);
   
   
    LCDCommand(0x40);       //系统设置0x40
    LCDData(0x30);      //p1,原:0x30
    LCDData(0x87);       //p2,字符宽度设置
    LCDData(0x07);       //p3,字符高度设置
    LCDData(0x27);      //p4,显示窗口宽度(C/R)为40BYTE
    LCDData(0x2b);      //p5,驱动频率的时间长度TC/R>=C/R+4 0x2b
    LCDData(0xef);      //p6,扫描祯参数,240行扫描
    LCDData(0x28);         //p7,APL
    LCDData(0x00);         //p8,APH
   
    LCDCommand(0x44);          //显示区域设置,0x44
    LCDData(0x00);         //p1,sa1-L//显示一区
    LCDData(0x00);          //p2,sa1-H
    LCDData(0xef);          //p3,sL1//一区所控制的显示屏上的行数
    LCDData(0x00);          //p4,sa2-L//显示二区
    LCDData(0x00);         //p5,sa2-H
    LCDData(0xef);          //p6,sL2
    LCDData(0x00);            //p7,sa3-L//显示三区
    LCDData(0x00);             //p7,sa3-L//显示三区
   
    LCDCommand(0x58);          //显示关闭
    LCDData(0x00);
   
    LCDCommand(0x5b);            //显示合成(开/关)
    LCDData(0x0c);
   
    LCDCommand(0x59);
    LCDData(0x04);               
}
/*------------------------------------------------------------------------------
;函数名称:
;函数功能://定义写RAM的地址
------------------------------------------------------------------------------*/

void LCDaddr( alt_u16 x,alt_u16 y)
{

    unionaddr com1;
    com1.address=40*y+x/8;//9600字节
    LCDCommand(0x46);
   LCDData(com1.a);
   LCDData(com1.a);
   
   
}

//*******************************************************/
// 功    能:LCD 清屏
//*******************************************************/

void LCDClr(alt_u8 dt)
{
    alt_u32 i;
    LCDCommand(0x46);//设地址
    LCDaddr(0,0);
    LCDCommand(0x42);//写显存
    for(i=0;i<9600;i++)
    {
      usleep(1);
      LCDData(dt);
    }
}
/*------------------------------------------------------------------------------
;函数名称:
;函数功能:贴BMP图x:起始横坐标,y:起始纵坐标 ,w图片宽,h图片高,s图片字节,图片数组
------------------------------------------------------------------------------*/

void Printstr(alt_u16 x,alt_u16 y,alt_u16 w,alt_u16 h,alt_u8 *Bmp )//
{
alt_u8 i=0;
while (h!=0)//显示行数
    {
    LCDaddr(x,y);
    LCDCommand(0x42);//写入显存数据
    for(i=0;i<w/8;i++)//显示列数
      {
      LCDData(*Bmp);//写入数据
      
      Bmp++;
      
      }
    y++;
    h--;
    }
}
//*******************************************************/
//MAIN
//*******************************************************/
int main (void)
{
ids=0;
PIOInit();
LCDInit();
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,0xff);//LED灭
LCDClr(0X55);
//Printstr(0,0,24,48,Bmp001 );
while (1)
{

      if(rev==0x99)
         {
            usleep(5);
         sdatascan();
          rev=0x00;
         }   
}
return 0;
}

gwnpeter 发表于 2010-5-29 20:33:36

我的产品上用了一个stn接口的lcd,使用verilog写了一个niosii的主设备接口,直接调用SDRAM内存数据输出,不用经过软核,软核只要写数据到sdram的相应位置就可以了,这样比较方便!

cuikai12345 发表于 2010-5-29 23:09:19

mark
页: [1]
查看完整版本: 320*240 RA8835控制单色LCD 测试