手上有块没控制器的 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[2];
};
unsigned char led,rev;
unsigned char ids=0;
unsigned char sd[9];
alt_u8 Bmp001[]=
{
/*------------------------------------------------------------------------------
; 若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
; 源文件 / 文字 : 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_u8 Bmp002[]=
{
/*------------------------------------------------------------------------------
; 若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
; 源文件 / 文字 : 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_u8 Bmp003[]=
{
/*------------------------------------------------------------------------------
; 若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
; 源文件 / 文字 : 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_u8 Bmp004[]=
{
/*------------------------------------------------------------------------------
; 若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
; 源文件 / 文字 : 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_u8 Bmp005[]=
{
/*------------------------------------------------------------------------------
; 若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
; 源文件 / 文字 : 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_u8 Bmp006[]=
{
/*------------------------------------------------------------------------------
; 若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
; 源文件 / 文字 : 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_u8 Bmp007[]=
{
/*------------------------------------------------------------------------------
; 若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
; 源文件 / 文字 : 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_u8 Bmp008[]=
{
/*------------------------------------------------------------------------------
; 若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
; 源文件 / 文字 : 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_u8 Bmp000[]=
{
/*------------------------------------------------------------------------------
; 若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。
; 源文件 / 文字 : 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[5])
{
case 0x16:
Uart_send_n(sd,6);
sd[6]=0;
break;
default : break;
}
}
/*******************************************************/
//串口接收中断服务程序
/*******************************************************/
void Uart_ISR(void * context,alt_u32 id)
{
while(!((IORD_ALTERA_AVALON_UART_STATUS(RS232_BASE)&(0x80)) ==0x80));//等待发送完成
sd[ids]=IORD_ALTERA_AVALON_UART_RXDATA(RS232_BASE);
if(sd[0]==0X68)
{
ids=ids+1;
if(ids>=6)
{
if ((sd[5]==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)
{
union addr com1;
com1.address=40*y+x/8;//9600字节
LCDCommand(0x46);
LCDData(com1.a[0]);
LCDData(com1.a[1]);
}
//*******************************************************/
// 功 能: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;
} |