/****************************************************************************
* $Id:: gpiotest.c 7177 2011-04-26 23:08:15Z usb00423 $
* Project: NXP LPC13xx GPIO example
*
* Description:
* This file contains GPIO test modules, main entry, to test GPIO APIs.
*
****************************************************************************
* Software that is described herein is for illustrative purposes only
* which provides customers with programming information regarding the
* products. This software is supplied "AS IS" without any warranties.
* NXP Semiconductors assumes no responsibility or liability for the
* use of the software, conveys no license or title under any patent,
* copyright, or mask work right to the product. NXP Semiconductors
* reserves the right to make changes in the software without
* notification. NXP Semiconductors also make no representation or
* warranty that such application will be suitable for the specified
* use without further testing or modification.
****************************************************************************/
#include "LPC13xx.h"
/* LPC13xx Peripheral Registers */
#include "gpio.h"
#define BUS_NO 0
//定义总线起始的IO口,例如P2.0
#define LCM_BUS_PORT 2
#define Data_Start()
(LPC_GPIO2->DATA &= ~(0xFF << BUS_NO))
//总线位全部拉低,准备数据
//#define Data_Send(dat)
(LPC_GPIO2->DATA=LPC_GPIO1->DATA & (~(0xFF << BUS_NO))|(dat<<BUS_NO)) //发送数据
#define Data_Send(dat)
(LPC_GPIO2->DATA=dat) //发送数据
#define LCM_BUSY 0
//定义BUSY
#define BUSY_1
LPC_GPIO3->DATA&(1<<LCM_BUSY)
//忙查询
#define LCM_REQ 1
//定义REQ
#define SREQ()
LPC_GPIO3->DATA|=1<<LCM_REQ
//请求信号,高电平有效
#define CREQ()
LPC_GPIO3->DATA&=~(1<<LCM_REQ)
#define LCM_RES 2
//定义RES
#define SRES()
LPC_GPIO3->DATA|=1<<LCM_RES
//复位信号,低电平有效
#define CRES()
LPC_GPIO3->DATA&=~(1<<LCM_RES)
void delay(void)
{
uint32_t i;
for(i=0;i<1000;i++);
}
void LCM_Send(uint32_t dat)
{
Data_Start();
//准备数据
while(BUSY_1==1);
//忙检查
delay();
//???
Data_Send(dat);
//发送数据
delay();
SREQ();
//请求信号REQ
delay();
CREQ();
//撤销请求
while(BUSY_1==0);
//确认
delay();
}
void LCM_Command(uint32_t comm,uint32_t addr_x,uint32_t addr_y)
{
LCM_Send(comm);
//发送命令
LCM_Send(addr_x);
//发送坐标
LCM_Send(addr_y);
}
void LCM_Reset(void)
{
CRES();
//复位
(低电平有效)
delay();
//???????
SRES();
}
void LCM_ClrScr(void)
//清屏
{
LCM_Send(0xf4);
}
void LCM_UpScr(void)
//上移
{
LCM_Send(0xf5);
}
void LCM_DownScr(void)
//下移
{
LCM_Send(0xf6);
}
void LCM_LeftScr(void)
//
左移
{
LCM_Send(0xf7);
}
void LCM_RightScr(void)
//
右移
{
LCM_Send(0xf8);
}
void LCM_White(void)
//反白
{
LCM_Send(0xfa);
}
void LCM_ShowTrad(uint8_t trad)
//显示光标
{
LCM_Send(0xFB);
LCM_Send(trad);
// 0x00:关闭 0x07:光标为八点长度 0x0f:光标为16点长度
}
void LCM_MoveTradSpeed(uint8_t LCM_Speed)
//显示光标
{
LCM_Send(0xFC);
LCM_Send(LCM_Speed);
// 0x00: 一点 0x01: 两点 0x07:八点 0x0f:16点
}
void show(uint8_t x,uint8_t y,char *buf)
//显示
{
while(*buf)
{
LCM_Command(0xf9,x+4,y*8);
LCM_Send(*(buf++));
x++;
}
}
void Disp_eng(uint32_t x,uint32_t m) //显示数字
{
//
GPIOSetDir( PORT1, 8, 1 );
//
GPIOSetValue( PORT1, 8, 1 );
//
GPIOIntEnable( PORT1, 8 );
LCM_Command(0xf9,x,16);
LCM_Send(m);
}
void Disp_eng1(uint8_t const *eng)
//显示8*16字符
{
uint32_t i,j;
for(j=0;j<4;j++)
{
for(i=4;i<20;i++)
{
LCM_Command(0xf9,i,j*16);
LCM_Send(eng[j*16+i-4]);
}
}
}
void Disp_chn1(uint8_t const *chn,uint8_t num,uint8_t line,uint8_t row)
//显示汉字
{
uint8_t i;
for(i=3;i<num+3;i++)
{
LCM_Command(0xf0,i-4+row,line-1);
LCM_Send(chn[(i-3)*2]-0xa0);
LCM_Send(chn[(i-3)*2+1]-0xa0);
}
}
void GUI_Point(uint8_t x,uint8_t y)
// x: 0~239
y: 0~127
画点
{
LCM_Command(0xf2,x,y);
}
void GUI_HLine(uint8_t xx,uint8_t yy,uint8_t x1)
//画线 xx起始点,x1终点
{
uint8_t bak;
if(xx>x1)//排序,方便画图
{
bak=x1;
x1=xx;
xx=bak;
}
do
{
GUI_Point(xx,yy);
xx++;
}while(x1>=xx);
}
void LCM_DispInit(void)
{
LPC_GPIO3->DIR |= (1<<LCM_REQ)|(1<<LCM_RES);
//
LPC_GPIO3->DIR |= (1<<LCM_BUSY)|(1<<LCM_REQ)|(1<<LCM_RES);
LPC_GPIO2->DIR |= (0xff<<BUS_NO);
LPC_GPIO3->DIR &= ~(1<<LCM_BUSY);
LCM_Reset();//复位一下
LCM_ClrScr();
LCM_ClrScr();
}
/*****************************************************************************
** Main Function main()
******************************************************************************/
int main (void)
{
SystemInit();
GPIOInit();
LCM_DispInit();
LCM_ClrScr();
SREQ();
//
LCM_White();
Disp_eng(0,36);
//
GUI_HLine(0,16,100);
// LCM_ShowTrad(0x0f);
GPIOSetDir( PORT1, 8, 1 );
while( 1 )
{
int i;
GPIOSetValue( PORT1, 8, 1 );
for(i=0;i<1000;i++)
{
delay();
}
GPIOSetValue( PORT1, 8, 0 );
for(i=0;i<1000;i++)
{
delay();
}
}
}
/*********************************************************************************
** End Of File
*********************************************************************************/ |
|