⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 12864.c

📁 LCD12864串行控制方式
💻 C
字号:
#include "AT89x51.h"
#include <intrins.h>
#define uchar unsigned char
#define Busy 0x80 //用于检测LCM状态字中的Busy标识

//****定义引脚********//
sbit LCD_CS=P0^0;   //原来的RS
sbit LCD_DATA=P0^1; //原来的RW
sbit LCD_CLK=P0^2;  //原来的E
sbit LCD_PS=P0^3;

uchar show[]="12864液晶测试程序0123456789ABCDEFGHIJKLMNOPQ";

/////////延时程序/////////
void delay(second)     //second=1时,延时5ms子程序
  unsigned char second;
    {
      unsigned char i,j,k;
      for(i=second;i>0;i--)
      for(j=20;j>0;j--)
      for(k=248;k>0;k--)  ;
    }

////////串口传输3个字节////////
void Send_24bits(uchar com_or_data,uchar DATA)
{
 uchar bite,command,DIN;
 if(com_or_data) command=0xf8; //写指令到LCD
 else            command=0xfa; //写数据到LCD
 LCD_CS=1;
 for(bite=8;bite>=1;bite--)
   {
    LCD_CLK=0;
    LCD_DATA=command&0x80;
    LCD_CLK=1;
    command<<=1;
   }
 DIN=DATA;
 DIN=DIN&0xf0;
 for(bite=8;bite>=1;bite--)
   {
    LCD_CLK=0;
    LCD_DATA=DIN&0x80;
    LCD_CLK=1;
    DIN<<=1;
   }
 DIN=DATA;
 DIN=DIN&0x0f;
 DIN<<=4;
 for(bite=8;bite>=1;bite--)
   {
    LCD_CLK=0;
    LCD_DATA=DIN&0x80;
    LCD_CLK=1;
    DIN<<=1;
   }
 LCD_CS=0;
}

//////////串口读数据/////////////
uchar Read_from_LCD(void)
 {
  uchar bite,command,DIN0,DIN1;
  uchar DATA;
  command=0xfe;
  LCD_CS=1;
 for(bite=8;bite>=1;bite--)
   {
    LCD_CLK=0;
    LCD_DATA=command&0x80;
    LCD_CLK=1;
    command<<=1;
   }
 for(bite=8;bite>=1;bite--)
   {
    LCD_CLK=0;
    DIN0|=LCD_DATA;
    LCD_CLK=1;
    DIN0<<=1;
   }
 for(bite=8;bite>=1;bite--)
   {
    LCD_CLK=0;
    DIN1|=LCD_DATA;
    LCD_CLK=1;
    DIN1<<=1;
   }
 LCD_CS=0;
 DIN1>>=4;
 DATA=DIN0|DIN1;
 return(DATA);
 }
////////读状态////////
void ReadStatusLCD(void)
 {
  uchar LCD_Data;
  LCD_Data=Read_from_LCD();
  while (LCD_Data&0x80)   //检测忙信号
  Read_from_LCD(); 
 }

////////写指令////////
void WriteCommandLCD(uchar Command,BuysC) //BuysC为0时忽略忙检测
  {
   if (BuysC) ReadStatusLCD(); //根据需要检测忙
   Send_24bits(1,Command);
  }

////////写数据////////
void WriteDataLCD(uchar Data,BuysC)
  {
   if (BuysC) ReadStatusLCD(); //根据需要检测忙
   Send_24bits(0,Data);
  }

void LCDInit(void) //LCD初始化
  {
   WriteCommandLCD(0x30,1); //基本指令集动作
   WriteCommandLCD(0x01,1); //清除显示
   delay(1); 
   WriteCommandLCD(0x0f,1); //开显示
   delay(1);
   WriteCommandLCD(0x03,1); //地址归位
   //WriteCommandLCD(0x30,1); //基本指令集动作
   
  }

//显示一串汉字
void Display(uchar show[])
  {
   uchar *p,i=0;
   p=show;
   WriteCommandLCD(0x80,0);
   while(*p!='\0')
    {
     WriteDataLCD(*p++,0);
     i++;
     if(i==16)       WriteCommandLCD(0x90,1);
     else if(i==32)  WriteCommandLCD(0x88,1);
     else if(i==48)  WriteCommandLCD(0x98,1);
    }
  }

void main(void)
 {
  uchar i;
  LCD_PS=0;
  delay(8); //启动等待,等LCM讲入工作状态
  LCDInit(); //LCM初始化
  P2=0xf0;

  Display(show);
  for(i=0;i<8;i++)        //字符循环左移
     {
        WriteCommandLCD(0x18,1);  
        delay(200);
        delay(200);
        delay(200);
        delay(200);
    } 
  while(1);
 }






⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -