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

📄 nh12864i.c

📁 LCD 128*64 S6B0108*2 驱动芯片 双控制芯片
💻 C
字号:
/***** Standard Includes *******/
#include <iom128v.h>
#include <string.h>   
#include <stdio.h>
#include <stdlib.h>
#include <macros.h>
#include "BaseType.h"

uchar Column;/*定义列*/
uchar Page;/*定义页*/
uchar *p;/*建立数组指针*/
uchar i,j,k,Disp_Page;
uchar z;/*汉字数组的页,为实际点阵列数除以8*/
uchar y;/*汉字数组的列,为实际点阵行数*/
uchar q;/*判忙*/	  

#define E_1	PORTC |= 0x08		/*读写使能信号,1有效*/
#define E_0	PORTC  &= ~ 0x08		

#define R_W_1	PORTC |= 0x04		/*读写选择信号;1为读选通,0为写选通*/
#define R_W_0	PORTC  &= ~ 0x04

#define D_I_1	PORTC |= 0x02		/*数据指令选择信号;1为数据操作,0为写指令或读状态*/
#define D_I_0	PORTC  &= ~ 0x02

#define CSA_1	PORTC |= 0x10		/*芯片片选信号*/
#define CSA_0	PORTC  &= ~ 0x10

#define CSB_1	PORTC |= 0x20		/*芯片片选信号*/
#define CSB_0	PORTC  &= ~ 0x20

char code Hanzi[126][3]=  /*汉字数组*/
{
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,
 0x7E,0x00,0x20,0x7E,0x00,0x60,0x07,0x00,0xF1,0x2F,0x00,0xFF,0x7F,0x00,0xFF,0xFF,
 0x01,0xFE,0xFF,0x01,0xD8,0xFF,0x00,0xD8,0xD7,0x01,0x88,0xF0,0x01,0x80,0xFF,0x01,
 0x80,0x7F,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x80,0x03,0x00,0xC0,0xC3,
 0x03,0xE0,0xC9,0x03,0xE0,0xDC,0x00,0xF0,0xCE,0x01,0xFE,0x5F,0x01,0xFE,0xFF,0x03,
 0xFC,0xFF,0x03,0xFC,0x27,0x00,0x70,0xA7,0x00,0x30,0xE0,0x01,0x00,0xC0,0x01,0x00,
 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0xE0,0x7F,0x00,
 0xE0,0xE3,0x00,0xC8,0xF7,0x00,0xEC,0xFE,0x00,0xEC,0xBF,0x00,0xEC,0xBF,0x01,0xEC,
 0xBF,0x01,0x04,0x9F,0x01,0x1C,0xC7,0x01,0xF8,0xFF,0x01,0xF0,0xFF,0x00,0x80,0x7F,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x80,0x01,0x00,0x98,0x01,0x78,
 0xB8,0x01,0xF8,0xD9,0x00,0xF0,0xFD,0x00,0xFE,0xFF,0x00,0xFE,0xF7,0x00,0xFE,0xFF,
 0x00,0xFA,0xFF,0x00,0x7E,0xCE,0x00,0x3C,0xCE,0x00,0x18,0xC0,0x00,0x00,0xC0,0x01,
 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x80,0x03,0x00,0x80,0x1F,0x00,0x80,0x3F,0x00,0xC0,0x3E,
 0x00,0xCC,0x3F,0x00,0xFE,0x7F,0x00,0xFC,0xFF,0x00,0xF8,0xDF,0x00,0x20,0xDF,0x00,
 0x20,0xDF,0x00,0xE0,0xC7,0x00,0xE0,0xC3,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x30,0x3E,0x00,
 0x3C,0x6E,0x00,0x3E,0xC7,0x00,0xFC,0x83,0x01,0xF6,0x81,0x01,0xFF,0xFF,0x01,0xDF,
 0xFF,0x01,0x8E,0x7F,0x00,0x86,0x03,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void WCom_L(uchar);/*写左半屏指令*/
void WCom_R(uchar);/*写右半屏指令*/
void Clearlcd();/*清屏*/
void Imim();/*初始化*/
void Dat_L(uchar);/*送左半屏显示*/
void Dat_R(uchar);/*送右半屏显示*/
void Delay();/*延时*/
void W_byte();/*写一个字节*/
void Hanz();/*写汉字*/
/********************主程序********************/
void main()
{
 uchar data asd;
 Delay();
 Delay();
 Delay();/*延时*/
 Imim();/*初始化*/
 p=Hanzi;/*指针指向数组的首地址*/
 Page=2; /*自定义,液晶上显示汉字的起始页*/
 Column=1;/*自定义,液晶上显示汉字的起始列*/
 y=126;
 z=3;
 Hanz();/*写汉字程序*/
loop:
 goto loop;
 }

/********************写左半屏指令子程序********************/
void WCOM_L(uchar d)    /*写指令程序*/
{
 CSA_1;/*左半屏片选*/
 
 D_I_0;/*读状态指令*/

Delay();

 R_W_0;/*写数据*/
 PORTA=d;
 
 E_1;
 E_0;
 CSA_0;
 CSB_0;/*屏处于未选状态*/
}
/********************写右半屏指令子程序********************/
void WCOM_R(uchar d)    /*写指令程序*/
{
 CSB_1;/*右半屏片选*/
 
 D_I_0;
 
 Delay();

 R_W_0;/*写数据*/
 PORTA=d;
 
 E_1;
 E_0;
 CSA_0;
 CSB_0;/*屏处于未选状态*/
}
/********************送左半屏显示字符子程序********************/
void Dat_L(uchar d)
{
 CSA_1;/*右半屏片选*/
 
 D_I_1;
 R_W_0;/*写数据指令*/
 
 Delay();
 
 PORTA=d;
 
 E_1;
 E_0;
 CSA_0;
 CSB_0;
}
/********************送右半屏显示字符子程序********************/
void Dat_R(uchar d)
{
 CSB_1;/*右半屏片选*/
 
 D_I_1;
 
 R_W_0;/*写数据指令*/
 
 Delay();
 
 PORTA=d;
 
 E_1;
 E_0;
 CSA_0;
 CSB_0;
}

/********************初始化子程序********************/
void Imim()
{ 
 CSA_0;
 CSB_0; /*屏幕处于未选状态*/
 E_0;
 Delay();
 WCOM_L(0x3E);/*关显示指令*/
 WCOM_R(0x3E);/*关显示指令*/
 WCOM_L(0xC0);/*设置起始行*/
 WCOM_R(0xC0);/*设置起始行*/
 Clearlcd();
 WCOM_L(0x3F);/*开显示指令*/
 WCOM_R(0x3F);/*开显示指令*/
}
/********************延时子程序********************/
void Delay()
{
 uchar data i,j;
 for(i=0;i<255;i++)
  for(j=0;j<255;j++);
}
/********************清屏子程序********************/
void Clearlcd()
{
 for(i=0;i<8;i++)
  {
   Disp_Page=i|0xb8;/*设置页地址*/
   WCOM_L(Disp_Page);/*送入左半屏*/
   WCOM_L(0x40);/*设置列地址*/
   for(j=0;j<64;j++)
   {Dat_L(0x00);}
  }              /*左半屏清屏*/
 for(i=0;i<8;i++)
  {
   Disp_Page=i|0xb8;/*设置页地址*/
   WCOM_R(Disp_Page);/*送入右半屏*/
   WCOM_R(0x40);/*设置列地址*/
   for(j=0;j<64;j++)
   {Dat_R(0x00);}
  }              /*右半屏清屏*/
}
/********************汉字主程序********************/
void Hanz()
{
 uchar data i;
 uchar data j;
 char *p1;
 uchar data Column1;
 uchar data Page1;
 p1=p; /*建立指针,使其与数组指针相对应*/
 Column1=Column;/*与全局变量列相对应*/
 Page1=Page;  /*与全局变量页相对应*/
 for(i=0;i<z;i++)  /*页循环*/
 {
  for(j=0;j<y;j++) /*列循环*/
  {
   W_byte();   /*写一列*/
   Column=Column++;
   p=p+z;
  }
  Page++; /*下一页*/
  p1=p1++;
  p=p1;    /*指针对应数组下一首地址*/
  Column=Column1;/*将列量送回*/
 }
}
/********************汉字子程序********************/
void W_byte ()/*在page和column位置写一字节*/
{
 uchar data wbyte;
 uchar num_col;
 uchar num_page;
 wbyte=*p;  /*送进数组头地址*/
   if(Column<64) /*判断对哪一个屏进行操作*/
   {
     num_page=Page|0xb8;
     WCOM_L(num_page);/*设置页地址*/
     num_col=Column|0x40;
     WCOM_L(num_col);/*设置列地址*/
     Dat_L(wbyte); /*写入数据*/
   }
  else if(Column<128)
   {
     num_page=Page|0xb8;
     WCOM_R(num_page);/*设置页地址*/
     num_col=(Column-64)|0x40;
     WCOM_R(num_col);/*设置列地址*/
     Dat_R(wbyte);
   }
}

⌨️ 快捷键说明

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