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

📄 12864.c

📁 LCD12864的嵌入式C程序 很有参考价值!
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
*程序说明: 本程序是128-64型液晶的驱动程序,                                  *
*                                                                             * 
*                                                                             *
*                                                                             *
*******************************************************************************
/*---------------------------------------------------------------------------
接口连接:
     1.(CSA)--P3.2    2.(CSB)--P3.3   3.(GND)      4.(VDD)     5.(V0)
	 6.(D/I)--P3.4    7.(R/W)--P3.5   8.(E)--P3.6  17.(A)     18.(K)
	 9-16(DB0-DB7)--(P1.0-P1.7)
	 sbit RS  = P2^0;
	 sbit	RW  = P2^1;
	 sbit	E   = P1^0;
     sbit 	CS1 = P2^2;
     sbit 	CS2 = P2^3;
-------------------------------------------------------------------------------*/
#include<regx51.h>
#include<stdio.h>
#include<intrins.h>


#define DI P2_0
#define RW P2_1
#define E  P1_0
#define E1 P2_2
#define E2 P2_3
#define setxM(x) {writeM(0xC0|x);}      // 192
#define setyM(y) {writeM(0x40|y);}      //  64
#define setxS(x) {writeS(0xC0|x);}      //
#define setyS(y) {writeS(0x40|y);}      //

void delay10ms(int n);
void delay1ms(unsigned char n);
void clrsceen(void);
void reset(void);
void writeM(unsigned char i);
void writeS(unsigned char i);
void readM(unsigned char i);
void readS(unsigned char i);
void setpage(unsigned char pageM,unsigned char pageS);

void display1(unsigned char x,unsigned char y,unsigned char page,unsigned char *array,unsigned char width);
void display2(unsigned char x,unsigned char y,unsigned char page,unsigned char *array,unsigned char width);

void page(unsigned char i);
void main(void);
unsigned char code arrayadress1[][32];
unsigned char code arrayadress2[][16];
/*--------------------------------------------------------------------------
函数名:delay1ms/delay10ms
功  能:延时
说  明:
设计人:
时  间:
-----------------------------------------------------------------------------*/
void delay1ms(unsigned char n)
{
  unsigned char i,j;
   for(i=0;i<n;i++)
	for(j=0;j<120;j++);
}
/*---------------------------------------------------------------------------------*/
void delay10ms(int n)
{
  int i;
  unsigned char j,k;
  for(i=0;i<n;i++)
   for(j=0;j<10;j++)
	for(k=0;k<120;k++);
}
/*--------------------------------------------------------------------------
函数名:clrsceen()
功  能:清屏子程序
说  明:
设计人:
时  间:
-----------------------------------------------------------------------------*/
void clrsceen(void)
{
  unsigned char x;
  unsigned char y;
  unsigned char i;
   i=0;
   page(i);
  for(x=0;x<=7;x++)
   {
    for(y=0;y<=64;y++)
     {
      writeM(0x00);
      writeS(0x00); 
     }
     i+=1;
     page(i);
   }
} 
/*--------------------------------------------------------------------------
函数名:reset()
功  能:初始化子程序
说  明:
设计人:
时  间:
-----------------------------------------------------------------------------*/
void reset(void)
{
  writeM(0x3F);writeS(0x3F);
  writeM(0xC0);writeS(0xC0);
}
/*--------------------------------------------------------------------------
函数名:page()
功  能:选择输出页面
说  明:
设计人:
时  间:
-----------------------------------------------------------------------------*/
void page(unsigned char i)
{
  unsigned char layer;
  if(i==0)
      layer=0;
  if(i==1)
      layer=1;
  if(i==2)
     layer=2;
  if(i==3)
      layer=3;
  if(i==4)
      layer=4;
  if(i==5)
      layer=5;
  if(i==6)
      layer=6;
  if(i==7)
      layer=7;
  setpage(layer,layer);
}

/*--------------------------------------------------------------------------
函数名:writeM()
功  能:主控制写状态
说  明:主控制
设计人:
时  间:
-----------------------------------------------------------------------------*/
void writeM(unsigned char i)
{
 do
 {
  E=0;E1=0;  
  RW=0; DI=1; E1=1;_nop_();           //主控制器发送数据//
 }                     
 while(P0&0x80); 					 //判断主控制器是否数据发送完/忙?//
 E1=0;
 DI=0;RW=0;E1=1;_nop_();
 P1=i;_nop_(); E1=0;                  //低电平时发指令     
}   
/*--------------------------------------------------------------------------
函数名:writeS()
功  能:从控制写状态
说  明:从控制
设计人:YANGKEZHONG
时  间:2005.7.13
-----------------------------------------------------------------------------*/
void writeS(unsigned char i)
{
 do
 {
  E=0;E2=0;  
  RW=0; DI=1; E2=1;_nop_();           //判断主控制器忙?//
 }                     
 while(P0&0x80); 
 E2=0;
 DI=0;RW=0;E2=1;_nop_();
 P1=i;_nop_(); E2=0;        
}
/*--------------------------------------------------------------------------
函数名:readM()
功  能:主控制器读状态
说  明:主控制
设计人:YANGKEZHONG
时  间:2005.7.13
-----------------------------------------------------------------------------*/
void readM(unsigned char i)
{
  do
   {
    E=0; E1=0;   
    RW=0; DI=1; E1=1; _nop_();          //判断主控制器忙?//   
   }
   while(P1&0x80);  
   E1=0;
   DI=0; RW=1; E1=1;_nop_();
   P1=i; _nop_();E1=0;                  //低电平时发数据//
}       
/*--------------------------------------------------------------------------
函数名:readS()
功  能:从控制器读状态
说  明:从控制
设计人:YANGKEZHONG
时  间:2005.7.13
-----------------------------------------------------------------------------*/
void readS(unsigned char i)
{
  do
   {
    E=0;E2=0;   
    RW=0; DI=1; E2=1; _nop_();          //判断主控制器忙?//   
   }
   while(P1&0x80);  
   E2=0;
   DI=0; RW=1; E2=1;_nop_();
   P1=i; _nop_();E2=0;                   //低电平时发数据//        
}
/*--------------------------------------------------------------------------
函数名:setpage()
功  能:设置显示起始页面
说  明:页面初始化
设计人:YANGKEZHONG
时  间:2005.7.13
-----------------------------------------------------------------------------*/
void setPage(unsigned char pageM,unsigned char pageS)
{
 writeM(0xB8|pageM);          //设置主窗口页面地址//                   
 writeS(0xB8|pageS);          //设置从窗口页面地址//
}
/*--------------------------------------------------------------------------
函数名:display1()
功  能:输出16*16型汉字
说  明:16*16
设计人:YANGKEZHONG
时  间:2005.7.13
-----------------------------------------------------------------------------*/
void display1(unsigned char x,unsigned char y,unsigned char layer,unsigned char *array,unsigned char width)
{
  unsigned char p=0;
  unsigned char k;
  unsigned char v; 
  unsigned char n;
  unsigned char a;
  unsigned char b;
  
  n=layer;
  page(n);
  a=x;b=y;
  setxM(a);setyM(b);
  setxS(a);setyS(b);  
 if(y<=48)
  {
   for(v=0;v<=width;v++)
	  {
       if(k--)
         { 
          readM(array[p]);            // (左-- 上)层数据输出
          p++;
         }
	   else
         {
          k=16;
		  p+=16;
		 }  
      }
  }
 if(y>=49&&y<=80)
  {
   for(v=0;v<=64-y;v++)
     {
      if(k--)
       {
        readM(array[p]);
        p++;
       }
      else
       {
        k=16;
        p+=16;
       } 
     }
   for(v=0;v<=y+width-64;v++)
     {
      if(k--)
        { 
          readS(array[p]);            // (左-- 上)层数据输出
          p++;
         }
	   else
         {
          k=16;
		  p+=16;
		 } 
     }
  } 
 if(y>=81)
  {
   for(v=0;v<=width;v++)
	  {      
       if(k--)
         { 
          readS(array[p]);            // (左-- 上)层数据输出
          p++;
         }
	   else
         {
          k=16;
		  p+=16;
		 }  
      }
   }
}       

/*--------------------------------------------------------------------------
函数名:display2()
功  能:输出8*8型数字及字符
说  明:8*8
设计人:YANGKEZHONG
时  间:2005.7.13
-----------------------------------------------------------------------------*/
void display2(unsigned char x,unsigned char y,unsigned char layer,unsigned char *array,unsigned char width)
{
  unsigned char p=0;
  unsigned char k=8;
  unsigned char v; 
  unsigned char n;
  unsigned char a;
  unsigned char b;
  
  n=layer;
  page(n);
  a=x;b=y;
  setxM(a);setyM(b);
  setxS(a);setyS(b);
 if(y<=56)
  {
   for(v=0;v<=width;v++)
	  {

⌨️ 快捷键说明

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