×
单片机 > 单片机程序设计 > 详情

LCD12864--头文件

发布时间:2020-06-17 发布时间:
|

LCD12864.h


#define LCD12864_RS PORTA.0

#define LCD12864_RW PORTA.1 

#define LCD12864_EN PORTA.2

#define LCD12864_PortOut DDRA|=0x07  //P3口的低三位设置为输出

#define LCD12864_Data DDRB

#define LCD12864_Read  PINB

#define LCD12864_Write  PORTB


void lcd12864_init(void);


void lcd12864_cleardd(void);


void lcd12864_cursoron(void);


void lcd12864_cursoroff(void);


void lcd12864_gotoxy(unsigned char x,unsigned char y);


void lcd12864_putchar(unsigned char temp);


void lcd12864_puts(unsigned char *str);


void lcd12864_cleargd(void);


void lcd12864_picture(flash unsigned char *ptr);


lcd12864.c


#include "lcd12864.h"

#include

#include

static void Write_Cmd(unsigned char cmd)

{

    unsignedchar temp,i;

           

   LCD12864_RS=0;

   LCD12864_RW=1;

   LCD12864_Data=0x00;

   do                      

   {   

       LCD12864_EN=1;           

       for(i=0;i<24;i++);

       temp=LCD12864_Read;

       LCD12864_EN=0;

    }

    while(temp& 0x80);

   LCD12864_Data=0xff;   

   LCD12864_RW=0;       

   LCD12864_Write = cmd;

   LCD12864_EN=1;

   for(i=0;i<24;i++);//延时                                     

   LCD12864_EN=0;

}

static void  Write_Data(unsigned chardat)

{

    unsignedchar temp,i;

           

   LCD12864_RS=0;

   LCD12864_RW=1;

   LCD12864_Data=0x00;

  

   do                      

   {   

       LCD12864_EN=1;           

       for(i=0;i<24;i++);//延时   

       temp=LCD12864_Read;

       LCD12864_EN=0;       

    }

    while(temp& 0x80);

   

   LCD12864_Data=0xff;

   LCD12864_RS=1;

   LCD12864_RW=0; 

       

   LCD12864_Write = dat;

   LCD12864_EN=1;

   for(i=0;i<24;i++);//延时

   LCD12864_EN=0;

}

void lcd12864_init(void)

{                 

   LCD12864_PortOut;   //液晶控制端口设置为输出

   

   Write_Cmd(0x30);   //基本指令集

   delay_ms(1);

   Write_Cmd(0x02);   // 地址归位

   delay_ms(1);

   Write_Cmd(0x0c);  //整体显示打开,游标关闭

   delay_ms(1);

   Write_Cmd(0x01);   //清除显示

   delay_ms(1);

   Write_Cmd(0x06);   //游标右移

   delay_ms(1);

   Write_Cmd(0x80);  //设定显示的起始地址

   delay_ms(1);  

}


void lcd12864_cleardd(void)

{

   Write_Cmd(0x01);

   delay_ms(5);

   lcd12864_gotoxy(0,0);   

}


void lcd12864_cursoron(void)

{

   Write_Cmd(0x0f);           //整体显示开,游标开,游标位置开   

}


void lcd12864_cursoroff(void)

{

   Write_Cmd(0x0c);           //整体显示开,游标关,游标位置关

}


void lcd12864_gotoxy(unsigned char x,unsigned char y)

{

   switch(y)

    {

    case0:Write_Cmd(0x080+x);break;

    case1:Write_Cmd(0x090+x);break;

    case2:Write_Cmd(0x088+x);break;

    case3:Write_Cmd(0x098+x);break;

    default:break;

    }

}


void lcd12864_putchar(unsigned char temp)

{

   Write_Data(temp);   

}


void lcd12864_puts(unsigned char *str)

{

    for(;*str !='';lcd12864_putchar(*(str++)));

}



void lcd12864_cleargd(void)

{

    unsignedchar i,j,k;

   

   Write_Cmd(0x34);       //打开扩展指令集

    i =0x80;           

    for(j = 0;j< 32;j++)

    {

       Write_Cmd(i++);

       Write_Cmd(0x80);

          for(k = 0;k < 16;k++)

          {

         Write_Data(0x00);

             }

    }

    i =0x80;

    for(j = 0;j < 32;j++)

    {

    Write_Cmd(i++);

       Write_Cmd(0x88);      

         for(k = 0;k < 16;k++)

         {

          Write_Data(0x00);

           }

   }  

   Write_Cmd(0x30);       //回到基本指令集

}


void lcd12864_picture(flash unsigned char *ptr)

{

       unsigned char i,j,k;

   

   Write_Cmd(0x34);       //打开扩展指令集

    i =0x80;           

    for(j = 0;j< 32;j++)

    {

       Write_Cmd(i++);

       Write_Cmd(0x80);

         for(k = 0;k < 16;k++)

         {

             Write_Data(*ptr++);

         }

    }

    i =0x80;

    for(j = 0;j < 32;j++)

    {

        Write_Cmd(i++);

       Write_Cmd(0x88);      

         for(k = 0;k < 16;k++)

         {

              Write_Data(*ptr++);

          }

   } 

       Write_Cmd(0x36);       //打开绘图显示

   Write_Cmd(0x30);       //回到基本指令集

}


关键字:LCD12864  头文件 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会