| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2703 人关注过本帖, 1 人收藏
标题:基于LPC213X的OCMJ8X15B驱动(以前写的,大家别笑我)
只看楼主 加入收藏
murufy
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2008-8-16
收藏(1)
 问题点数:0 回复次数:0 
基于LPC213X的OCMJ8X15B驱动(以前写的,大家别笑我)
#include "config.h"
#include "string.h"
#include <stdio.h>


/*定义总线起始的GPIO,即对应的GPIO值(本程序中为p1.18)*/
#define BUS_NO    18

/*输出总线宏定义   用于拉低拉高电平,以准备及发送数据*/
#define Data_Start() IO1CLR = 0xff<<BUS_NO   //将总线电平拉低,准备数据
#define Data_Send(dat)   IO1SET = dat<<BUS_NO


/*定义BUSY控制*/
#define LCM_BUSY 7             //接第4位
#define LCM_IOPIN IO0PIN        //接P0   即接P0.4
#define     BUSY_1 LCM_IOPIN &(1<<LCM_BUSY)  
   
/*定义REQ控制*/
#define LCM_REQ 5            
#define SREQ() IO0SET =1<<LCM_REQ
#define CREQ() IO0CLR =1<<LCM_REQ

/*定义REQ控制*/
#define LCM_RES 6
#define SRES() IO0SET =1<<LCM_RES
#define CRES() IO0CLR =1<<LCM_RES



/*
*********************************************************
**延时dly * 1 us
*********************************************************
*/
void delay_1(uint32 dly1)
{
uint32 j;
   
    for(;dly1>0;dly1--)
       for(j=0;j<=6;j++);
}
/*
*********************************************************
**延时dly * 5 us
*********************************************************
*/
void delay_5(uint32 dly)
{
while(dly--)
   delay_1(5);
}
/*
*************************************************************
** 函数名称 : delay()
** 函数功能 : 小延时
*************************************************************
*/
void delay(void)
{uint32 i;
for(i=0;i<1000;i++);
}
/*
******************************************************************************************
** 函数名称 : DelayNS()
** 函数功能 : 长软件延时。
** 入口参数 : dly   延时控制值,值越大延时越长
** 出口参数 : 无
******************************************************************************************
*/
void DelayNS(uint32 dly)
{ uint32 i;

   for(; dly>0; dly--)
      for(i=0; i<50000; i++);
}

/*
*************************************************************
**向端口P1口[25:18]送数据
*************************************************************
*/
void LCM_Send(uint32 dat)
{

Data_Start();
while(BUSY_1 == 0);
delay();
Data_Send(dat);      //送数据到LCD
delay();   
SREQ();          //送请求信号REQ
delay();
CREQ();         // 撤销请求REQ
while(BUSY_1 == 1);      //应答信号BUSY为1,表明已收到数据并正在处理中;等待
delay();
}
/*
*************************************************************
**向LCD送命令和坐标位置
*************************************************************
*/
void LCM_Command(uint32 comm,uint32 addr_x,uint32 addr_y)
{
LCM_Send(comm); //送命令
LCM_Send(addr_x);//送X坐标
LCM_Send(addr_y);//送Y坐标
}
/*
*************************************************************
**复位
*************************************************************
*/
void LCM_Reset(void)
{
   CRES();//RES清0
   DelayNS(5);
   SRES();//RES置位
}
/*
*************************************************************
**清屏
*************************************************************
*/
void LCM_ClrScr(void)
{
LCM_Send(0xf4);
}
/*
*************************************************************
**向LCD显示
*************************************************************
*/
void show(uint8 x,uint8 y,char *buf)
{
while(*buf)
{
   LCM_Command(0xf9,x+4,y*8);
   LCM_Send(*(buf++));
   x++;
}
}
/*
*************************************************************
**显示汉字1行 分别为汉字指针,汉字个数,汉字所在行,汉字开始列
*************************************************************
*/
void disp_chn1(uint8 const *chn,uint8 num,uint8 line,uint8 row)
{
uint8 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 disp_eng2(uint32 x,uint8 m)
{
LCM_Command(0xf9,x,16);
LCM_Send(m);
}
/*
*************************************************************
**显示字符8*16
*************************************************************
*/
void disp_eng(uint8 const *eng)
{
uint32 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]);
    }
}
}
/*
*************************************************************
**LCM_DispInit(void)   显示初始化
*************************************************************
*/
void LCM_DispInit(void)
{
uint32 i;
/*设置引脚连接*/
#if LCM_BUSY<16
    PINSEL0&=~(3<<(2*LCM_BUSY));
#else
    PINSEL1&=~(3<<(2*LCM_BUSY));
#endif

#if LCM_REQ<16
    PINSEL0&=~(3<<(2*LCM_REQ));
#else
    PINSEL1&=~(3<<(2*LCM_REQ));
#endif

#if LCM_RES<16
    PINSEL0&=~(3<<(2*LCM_RES));
#else
    PINSEL1&=~(3<<(2*LCM_RES));
#endif

/*                                      //如果总线用的是P0口则此处打开
#if BUS_NO<9
    for(i=BUS_NO;i<BUS_NO+8;i++)
    {
       PINSEL0&=~(3<<(2*i));
    }
#else
    for(i=BUS_NO;i<16;i++)
    {
       PINSEL0&=~(3<<(2*i));
    }
   
    for(;i<(BUS_NO+8);i++)
    {
       PINSEL1&=~(3<<(2*(i-16)));
    }*/
/*本程序硬件所用P1.18`25,故用以下代码*/
     PINSEL2 =PINSEL2 & (~0x08);
     
     
     /*设置IO输出方式*/
     IO0DIR=IO0DIR|(1<<LCM_BUSY)|(1<<LCM_REQ)|(1<<LCM_RES);
     //IO0DIR=IO0DIR|(0xFF<<BUS_NO); //若总线连接此口,则打开,将下一行关闭
     IO1DIR=0xff<<BUS_NO;//特殊位需注意
     
     
     LCM_Reset();//复位一下
    LCM_ClrScr();
    LCM_ClrScr();
}
/*****************************************************************
**LCM_White() 反白显示
******************************************************************/
void LCM_White()
{
LCM_Send(0xfa);
}
//------------------------以下为绘图函数---------------------
/*****************************************************************
**GUI_Point() x表示指定列坐标,y表示指定行坐标,color 显示颜色或亮灭
**x 0~239
**y 0~127 仅针对OCMJ8X15B
******************************************************************/
void GUI_Point(uint8 x,uint8 y)
{
LCM_Command(0xf2,x,y);
}
/*****************************************************************
**GUI_HLine()
**功能:画水平线
**x0 水平线起点所在的列的位置
**y0 水平线起点所在的行的位置
**x1 水平线终点所在的列的位置
******************************************************************/
void GUI_HLine(uint8 xx,uint8 yy,uint8 x1)
{
uint8 bak;

if(xx>x1)//排序,方便画图
{
   bak=x1;
   x1=xx;
   xx=bak;
}

do
{
   GUI_Point(xx,yy);
   xx++;
}while(x1>=xx);
}
搜索更多相关主题的帖子: 驱动 
2008-10-22 21:08
快速回复:基于LPC213X的OCMJ8X15B驱动(以前写的,大家别笑我)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017474 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved