您当前的位置:五五电子网电子知识单片机-工控设备综合-其它ATMEAGl6L驱动16x2点阵字符液晶模块的实验 正文
ATMEAGl6L驱动16x2点阵字符液晶模块的实验

ATMEAGl6L驱动16x2点阵字符液晶模块的实验

点击数:7573 次   录入时间:03-04 11:41:32   整理:http://www.55dianzi.com   综合-其它

  Delay_nms(2000);

  /*延时2S*/

  }

  }

  /*************显示指定座标的一串字符子函数***************/

  void ePutstr(uchar x,uchar y,uchar const*ptr)

  {

  uchar i.I=0:

  while(ptr[I]>31){I++;)

  for(i=0;i<I:i++){

  DisplayoneChar(x++,Y,pt r[i]);

  if(X==16){

  x=0;y^=1:

  }

  }

  }

  /***************

  void LocateXY(char posx,char posy)

  {

  uchar temp;

  temp&=0x7f;

  temp=posx&0xof;

  posy&=0x01;

  if(posy)templ=0x40;

  templ=0x80;

  LcdWriteCommand(temp,0):

  }

  /**************显示指定座标的一个字符子函数************/

  void DisplayOneChar(uchar X.uchar y,uchar Wdata)

  {

  LocateXY(x,y):

  LcdWriteData(Wdata);

  }

  /**************LCD初始化子函数******************/

  void lnitLcd(void)

  {

  LcdWriteCommand(0x38,O):

  /*8位数据传送,2行显示,5*7字形,不检测忙信号*/

  Delay_nms(5);

  LcdWriteCommand(Ox38,O):

  /*8位数据传送;2行显示,5*7字形,不检测忙信号*/

  Delay_nms(5);

  LcdWriteCommand(0x38.0):

  /*8位数据传送,2行显示,5*7字形,不检测忙信号*/

  Delay_nms(5);

  LcdWriteCommand(0x38,1):

  /*8位数据传送,2行显示,5/7字形、检测忙信号*/

  LcdWriteCommand(0x08,1):

  /*关闭显示,检测忙信号*/

  LcdWriteCommand(0x01,1);

  /*清屏,检测忙信号*/

  LcdWriteCommand(0x06,1):

  /*显示光标右移设置,检测忙信号*/

  LcdWriteCommand(0xoc,1):

  /*显示屏打开,光标不显示、不闪烁,检测忙信号*/

  }

  /****************写命令到LCM子函数*******************/

  void LcdWfiteCommand(uchar CMD,uchar Attribc)

  {

  if(Attribc)WaitForEnable():

  LCM_RS_0;LCM_RW_0;_NOP();

  DataPort=CMD;_NOP();

  LCM_EN_1;_NOP0;_NOP();LCM_EN_O;

  }

  /***************写数据到LCM子函数***************/

  void LEDWriteData(uchar dataW)

  {

  WaitF0rEnable();

  LCM_RS_1;LCM_RW_O;_NOP();

  DataPort=dataW;_NOP();

  LCM_EN_1:_NOP();_NOP();LCM_EN_0;

  }

  /************检测LCD忙忙信号子函数**************/

  void WaitFOrEnable(vOid)

  {

  uchar val;

  DataPort=0xff;

  LCM_RS_0;LCM_RW_1;_NOP();

  LCM_EN_1:_NOP0;_NOP();

  DDRA=0x00;

  vaI=PINA;

  while(val&Busy)val=PINA;

  LCM_EN_O;

  DDRA=0xff;

  }

  /************************************************/

  void Delay_1 ms(void)

  /*1mS延时子函数*/

  { uint i;

  for(i=1;i<(uint)(xtal*143-2):i++)

  }

  /*==========================*/

  void Delay_nms(uint n)

  /*n*1mS延时子函数*/

  {

  uint i=0:

  while(i<n)

  {Delay_1 ms();

  i++:

  }

  }

  编译通过后,将ac18.hex文件下载到AVR单片机综合试验板上进行实际演示。标示“LCD16*2”的单排座上正确插上16x2液晶模块(脚号对应,不能插反),在标示“DC5V”电源端输入5V稳压电压。我们看到液晶屏上的显示与我们设计的目标完全一致。

  9.在AVR单片机综合试验板上实现16x2LCM演示程序--2一开始第一行及第二行显示预定的字符串(第一行显示“--ELECTRONICS--”,第二行显示“WORLDMAgazine”),随后第二行显示移动的ASCII字符。

  在我的文档中新建一个acl9的文件夹。建立一个acl9.pri的工程项目,最后建立源程序文件ac19.C。输入下面的程序:

  #include<iom1 6v.h>

  #include<macros.h>

  /*---------------------------------*/

  #define uchar unsigned char

  #define uint unsigned int

  #define LCM_RS_1 PORTBI=BlT(P80)

  #define LCM_RS_O PORTB&=~BIT(PB0)

  #define LCM_RW_1 PORTBI=BIT(PBl)

  #define LCM_RW_0 PORTB&=~BlT(PBl)

  #define LCM_EN_1 PORTBl=BlT(PB2)

  #define LCM_EN_O PORTB&=~BIT(PB2)

  #define DataPort PORTA

  #define Busy 0x80

  #define xtal 8

  /*-----------------------------*/

  const uchar exampl[]=“--ELECTRONlCS--WORLD

  magazine\n”;

  void Delay_1 ms(void);

  void Delay_nms(uint n);

  void WaitFOrEnabIe(void):

  void LcdWmeData(uchar W):

  void LcdWriteCommand(uchar CMD,uchar Attribc);

  void InitLcd(void);

  void Display(uchar dd):

  void DlsplayoneChar(uchar×,uchar y,uchar Wdata);

  void ePutstr(uchar x,uchar y,uchar const*ptr);

  /******************************************/

  void main(void)

  {

  uchar temp;

  Delay_nms(400);

  DD RA:0xff:PO RTA=0x00;

  DDRB=0xff:PORTB=0x00;

  InitLcd();

  temp=32;

  ePutstr(0,0,exampl);

  Delay_nms(3200);

  while(1)

  {

  temp&=0x7f;

  if(temp<32)temp=32;

  Display(temp++);

  Delay_nms(400);

  }

  }

  /*********************************/



上一页  [1] [2] 


本文关键字:暂无联系方式综合-其它单片机-工控设备 - 综合-其它