找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3022|回复: 0
收起左侧

LCD12864--头文件

[复制链接]
ID:51024 发表于 2014-7-12 01:51 | 显示全部楼层 |阅读模式
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 !='\0';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);       //回到基本指令集
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表