标题:我来贴个12864LCD显示屏驱动程序来提提人气
取消只看楼主
一起补天
Rank: 2
等 级:论坛游民
帖 子:73
专家分:61
注 册:2008-9-19
结帖率:25%
已结贴  问题点数:0 回复次数:0 
我来贴个12864LCD显示屏驱动程序来提提人气
这个驱动程序适合ARM7213x和214x开发板,用的是GPIO控制,没用SPI。仅供大家娱乐消遣,有更好的也请贴出来分享一下,见笑了各位~~~~

.h文件是
#ifndef _LCD12864_H_
#define _LCD12864_H_
#define SCK  1<<1
#define SID  1<<0

extern void LCDData(unsigned char ucByte);        //写数据
extern void LCDCmd(unsigned char ucCommand);        //写命令
extern void LCDInit(void);                      //初始化
extern void LCDDisplayStr(unsigned char row,  char *LcmDat,unsigned char length);
extern void LCDSendData(uint8 uiData);
extern void DelayNS (uint32  uiDly);
extern void DisplayStr(unsigned char row, char *LcmDat,unsigned char length);
#endif



.c文件是

#include "config.H"
#include "LCD12864.H"
/*********************************************************************************************************
** Function name:        DelayNS
** Descriptions:        长软件延时
** input parameters:    uiDly延时控制值,值越大,延时越长
** output parameters:   无
** Returned value:      无
*********************************************************************************************************/
void DelayNS (uint32  uiDly)
{
    uint32  i;
   
    for(; uiDly > 0; uiDly--){
        for(i = 0; i < 50000; i++);
    }
}

/*==============================================================================
函 数 名 : WriteDataToLcd()
函数功能 : 向LCD的数据RAM写一个字节的数据.
入口参数 : ucByte ---- 要写的字节.
返回参数 : 无
==============================================================================*/
void LCDData(unsigned char ucByte)
{
    LCDSendData(0xFA);                // 同步数据
    LCDSendData(ucByte & 0xf0);        // 高半字节
    LCDSendData(ucByte << 4);        // 低半字节
}

/*==============================================================================
函 数 名 : WriteCommandToLcd()
函数功能 : 向LCD写一条指令.
入口参数 : ucCommand ---- 要写的指令.
返回参数 : 无
==============================================================================*/
void LCDCmd(unsigned char ucCommand)
{
    LCDSendData(0xF8);                    // 同步数据
    LCDSendData(ucCommand & 0xf0);        // 高半字节
    LCDSendData(ucCommand << 4);        // 低半字节
}

/*==============================================================================
函 数 名 : InitLcd()
函数功能 : 初始化LCD12864.
入口参数 : 无
返回参数 : 无
==============================================================================*/
void LCDInit(void)
{   
    PINSEL0 = PINSEL0&(~0x0F);
    IO0DIR = IO0DIR|SCK|SID;
   
    LCDCmd(0x01);        
    DelayNS(20);
    LCDCmd(0x02);        
    DelayNS(20);
    LCDCmd(0x06);        
    DelayNS(20);
    LCDCmd(0x0C);    
    DelayNS(20);
    LCDCmd(0x30);    
    DelayNS(20);
        
    
}
/*==============================================================================
函 数 名 : LCDDisplayStr()
函数功能 : 在LCD的某一行上显示汉字
入口参数 : row             第几行
           *LcmDat         显示的汉字内容
           length        内容长度
返回参数 : 无
==============================================================================*/

void LCDDisplayStr(unsigned char row, char *LcmDat,unsigned char length)
{
      unsigned char i;
      switch(row)
    {
        case 1 : LCDCmd(0x80);break;
        case 2 : LCDCmd(0x90);break;
          case 3 : LCDCmd(0x88);break;
        case 4 : LCDCmd(0x98);break;
    }
    DelayNS(5);
    for (i = 0 ; i< length ; i++)
    {
         LCDData( *LcmDat);
        LcmDat++ ;
    }
}
/*==============================================================================
函 数 名 : LCDDisplayStr()
函数功能 : 在LCD的某一行上显示汉字
入口参数 : row             位置
           *LcmDat         显示的内容
           length        内容长度
返回参数 : 无
==============================================================================*/

void DisplayStr(unsigned char rew, char *LcdDat,unsigned char lenth)
{
      unsigned char i;
    LCDCmd(rew);
    DelayNS(5);
    for (i = 0 ; i< lenth ; i++)
    {
         LCDData( *LcdDat);
        LcdDat++ ;
    }
}
/*==============================================================================
函 数 名 : LCDSendData()
函数功能 : 发送数据
入口参数 : 要发送地数据
返回参数 : 无
==============================================================================*/

void LCDSendData(uint8 uiData)
{
         uint8 i;
        
         for(i=0;i<8;i++)
         {
                IO0CLR = SCK;
              if((uiData&0x80)==0x80)
              IO0SET = SID;
              else
              IO0CLR = SID;
              IO0SET = SCK;
              uiData=uiData<<1;
         }
}
搜索更多相关主题的帖子: 显示屏 人气 驱动 
2009-07-30 19:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-281076-1-1.html




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

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