Board logo

标题: 1602驱动程序 [打印本页]

作者: wxg1988    时间: 2011-12-3 20:16     标题: 1602驱动程序

#include <C8051F350.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

#define HT1621Delay() {;}/*在此可调节数据传输速度*/
#define Bias_Duty  0x52    /*此处设置LCD的COM数量和偏置*/
#define Rc256 0x30         /*启用内部RC振荡*/
#define LCD_ON 0x6         /*打开LCD偏置发生器*/
#define SIS_EN 0x2         /*打开系统振荡*/
#define TONE_OFF 0x10      /*内部蜂鸣器关*/
#define TONE_2K 0x13       /*打开蜂鸣器并且频率为2KHz*/
#define TONE_4K 0x12       /*打开蜂鸣器并且频率为4KHz*/
/*没用用到蜂鸣器可以不用理睬*/
/*端口根据自己需要修改*/
sbit CS2=P1^0;             /*定义片选端口*/
sbit Wr=P0^7;              /*定义写命令端口*/
sbit Dat=P0^6;             /*定义数据线端口*/

////////////////////////////////////////////////////////
/////////////////*写控制命令函数*///////////////////////
void WrCmd(uchar Cmd)/*写控制命令函数*/
{
      uchar data i,CmdByte=0x80;
      CS2=0;                   /*低电平有效*/
      for(i=0;i<4;i++)
      {
           Dat=(bit)(CmdByte&0x80);
           Wr=0;;
           HT1621Delay();
           Wr=1;
           CmdByte<<=1;
      }
      for(i=0;i<8;i++)
      {
           Dat=(bit)(Cmd&0x80);
           Wr=0;
           HT1621Delay();
           Wr=1;
           HT1621Delay();
           Cmd<<=1;
      }
      CS2=1;                 /*低电平有效*/
}
////////////////////////////////////////////////////////
////////////////*写数据函数 一次处理四位*///////////////
void WrAddDdat(uchar Add,uchar Ddat,uchar Bit_4_8)/*写数据函数  uchar Bit_4_8  表示一次写入四位还是一次写入八位*/
{
  uchar i,Cmdbyte=0xA0;
  CS2=0;
  for(i=0;i<3;i++)
   {
         Dat=(bit)(Cmdbyte&0x80);
       Wr=0;
       HT1621Delay();
       Wr=1;
       Cmdbyte<<=1;
   }
  Add<<=2;
  for(i=0;i<6;i++)
   {
         Dat=(bit)(Add&0x80);
       Wr=0;
       HT1621Delay();
       Wr=1;
       Add<<=1;
   }
  for(i=0;i<Bit_4_8;i++)      // 地址自动加一 四位处理
   {
         Dat=(bit)(Ddat&0x80);
       Wr=0;
       HT1621Delay();
       Wr=1;
       Ddat<<=1;
   }
    CS2=1;  
}
////////////////////////////////////////////////////////
/////////*写数据函数 一次处理八位 1622地址地动加1*//////

////////////////////////////////////////////////////////
///////////////*初始化函数*/////////////////////////////
void Init_LCD(void)
{
      WrCmd(Bias_Duty);
      WrCmd(Rc256);
      WrCmd(SIS_EN);
      WrCmd(LCD_ON);
      WrCmd(TONE_OFF);
}
////////////////////////////////////////////////////////
///////////////*清屏函数*///////////////////////////////
void Cls(void)/*清屏函数*/
{
uchar i;
for(i=0;i<64;i+=2)
{
      WrAddDdat(i,0x00,8);
}
}






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0