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

📄 lcd240x128.c

📁 T6963控制的240X128的图形显示器原码,这是我调通并在使用的程序,可供大家参考 Fr
💻 C
📖 第 1 页 / 共 3 页
字号:


#include "reg52.h"
#include "string.h"
#include "stdio.h"
#include "absacc.h"
#include "intrins.h"

#include "lcd240x128.h"
#include "24lc256.h"

unsigned char idata d1,d2,com; //LCD操作时的三个公共寄存器
unsigned int  idata sursor_place; //光标位置

const tab1=0x0000;// 开机画面  //  0---1f8
const tab2=0x0200;//hz_table1  //  200--540
const tab3=0x0600;//hz_table2  //  600--a00
const tab4=0x0a00;//inputpass  //  a00--b20
const tab5=0x0c00;//set_tab1   //  c00--de0
const tab6=0x0e00;//set_tab2   //  e00--f80
const tab7=0x1000;//set_tab3   //  1000- 1140
const tab8=0x1200;//set_tab4   //  1200--1300
const tab9=0x1300;//set_tab5   //  1300--14e0
const tab10=0x1500;//set_tab6  //  1500--1640  
const tab11=0x1700;//ASCLL tab //  1700--1810

unsigned char xdata starttable[504];//系统启动时的画面字库
unsigned char xdata hz_table1[832]; //系统正常运行时的字库
unsigned char xdata hz_table2[1024];//系统参数设置的菜单用的字库
unsigned char xdata inputpass[288]; //输入权限密的提示信息字库

unsigned char xdata set_tab1[480];
unsigned char xdata set_tab2[384];
unsigned char xdata set_tab3[320];
unsigned char xdata set_tab4[256];
unsigned char xdata set_tab5[480];
unsigned char xdata set_tab6[320];
unsigned char xdata set_tab7[272];


 
void lcd_rst()
{ 
 lcd_rest_en=0x80;//复位操作允许

 lcd_rest=0x80;
 _nop_();
 lcd_rest=0x0;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 lcd_rest=0x80;
 lcd_rest_en=0; //禁止操作复位
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 _nop_();

}

/********************************************/
 // STA7  闪烁状态检测
 // STA6  屏读、拷贝出错
 //	STA5  控制器运行可能性检测
 //	STA4  未用
 //	STA3  数据自动写状态准备好
 //	STA2  数据自动读状态准备好
 //	STA1  数据读写状态准备好
 //	STA0  指令读写状态准备好
 
unsigned char read_sta()  //读状态值
{
  unsigned char data temp=0;
  temp=comd_addr;
  return temp;
}
//**********************************************************************************
//          sta=0 write data  sta=1 write commandthe will write's data

void write(unsigned char  stai,unsigned char  sta,unsigned char  dat)  //写一个数据
{ //stai=1,check STA.0 & STA.1=1
  //stai=2,check STA.2 & STA.3=1
  if(stai==1)
	{
      for(;;)
        {
          if(read_sta()&0x03==0x03)
            break;
        }
      
    }
  else if(stai==2)
	{
      for(;;)
        {
          if(read_sta()&0x08==0x08)
            break;
        }
    }
  else
    {;}
  //***************
  if(sta==0)
     {data_addr=dat;}
  else
     {comd_addr=dat;}
} 
//***************************************************

void write_1( )  //写一个参数的命令
{ //0xcX  数据一次读、写方式控制
 //命令由com 数据由D2
  write(1,0,d2);
  write(1,1,com);
}

void write_2() //写两个参数的命令
{     
  write(1,0,d1);
  write(1,0,d2);
  write(1,1,com);
}

//**************************************************************************
//240X128 对字符:32个x16行  对汉字:15个x8行 
//该X、Y是针对字符的位置来标注,左上角为(0,0)
//如:第5行,第10列的位置 X=5,Y=10
void write_char(unsigned char  character,unsigned char  X,unsigned char  Y) //在指定行、列位置上显示一个字符
{
    
  unsigned int data  addr;
  //unsigned char data d1,d2;

  addr=32*X+Y;
  d1=addr;
  d2=addr>>8;
  com=0x24;
  write_2();//设置显示位置
  
  d2=character;
  com=0xc4;
  write_1();//按写一个数据,地址再+1的方式写

}
//**************************************************************************
void write_Lchar(unsigned char character,unsigned char X,unsigned char Y)
{
  //0xb8
  write_char(0xb8+character*2,X,Y);
  write_char(0xb8+character*2+1,X+1,Y);

}

//*************************************************************************
//             一个要显示的8位数的数据   从低位开始显示几个数
void disply_keydata(unsigned long keydata,unsigned char np)//显示键盘输入的数字,在光标处,8位,一个专用程序
{//不设置指示位置,利用原来的位置

    unsigned int i;
    
    i=sursor_place-np;    
    d1=i;
    d2=i>>8;
    com=0x24;
    write_2();//设置显示位置

    switch(np)
      {
        case 8:
         {
           break;
         }
        case 7:
         {
           goto a7;
           break;
         }
        case 6:
         {
           goto a6;
           break;
         }
        case 5:
         {
           goto a5;
           break;
         }
        case 4:
         {
           goto a4;
           break;
         }
        case 3:
         {
           goto a3;
           break;
         }
        case 2:
         {
           goto a2;
           break;
         }
        case 1:
         {
           goto a1;
           break;
         }
      }
    //MSB
    d2=hex_dsc((keydata>>28)&0x0000000f);
    com=0xc0;
    write_1();
  a7:
    d2=hex_dsc((keydata>>24)&0x0000000f);
    com=0xc0;
    write_1();
  a6:
    d2=hex_dsc((keydata>>20)&0x0000000f);
    com=0xc0;
    write_1();
  a5:
    d2=hex_dsc((keydata>>16)&0x0000000f);
    com=0xc0;
    write_1();
  a4:
    d2=hex_dsc((keydata>>12)&0x0000000f);
    com=0xc0;
    write_1();
  a3:
    d2=hex_dsc((keydata>>8)&0x0000000f);
    com=0xc0;
    write_1();
  a2:
    d2=hex_dsc((keydata>>4)&0x0000000f);
    com=0xc0;
    write_1();
  a1:
    d2=hex_dsc(keydata&0x0000000f);
    com=0xc0;
    write_1();
    //LSB
  
}
//*************************************************************************
//                         字符串指针       行位置(0-15)   列位置(0-32)
/*void write_string(unsigned char *str,unsigned char X,unsigned char Y)  //从指定位置开始输出一串字符
{ //送进来的数据是一个char型,一个char两个字符,要程序自已分解成自已能显示的数据
  unsigned int data addr;

  addr=32*X+Y;
  d1=addr;
  d2=addr>>8;
  com=0x24;
  write_2();//设置显示位置

  d2=0xb0;
  write(1,1,d2);		 //设置自动写方式
  while(*str!='\0')
    {
      d2=hex_dsc(*str>>4)
      write(2,0,d2);
      d2=hex_dsc(*str&0x0f);
	  write(2,0,d2);
	  str++;	  	
	}
  d2=0xb2;
  write(1,1,d2);		//结束自动写方式

} */

extern void write_long(unsigned long codedata,unsigned char X,unsigned char Y)
{
  unsigned int data addr;

  addr=32*X+Y;
  d1=addr;
  d2=addr>>8;
  com=0x24;
  write_2();//设置显示位置

  d2=0xb0;
  write(1,1,d2);		 //设置自动写方式

  d2=hex_dsc((codedata>>28)&0x0000000f);
  write(2,0,d2);
  d2=hex_dsc((codedata>>24)&0x0000000f);
  write(2,0,d2);
  d2=hex_dsc((codedata>>20)&0x0000000f);
  write(2,0,d2);
  d2=hex_dsc((codedata>>16)&0x0000000f);
  write(2,0,d2);
  d2=hex_dsc((codedata>>12)&0x0000000f);
  write(2,0,d2);
  d2=hex_dsc((codedata>>8)&0x0000000f);
  write(2,0,d2);
  d2=hex_dsc((codedata>>4)&0x0000000f);
  write(2,0,d2);
  d2=hex_dsc(codedata&0x0000000f);
  write(2,0,d2);

  d2=0xb2;
  write(1,1,d2);		//结束自动写方式

}
//************************************************************************************
extern void write_int(unsigned int codedata,unsigned char X,unsigned char Y)//在指定行列位置显示一个int数据
{
  unsigned int data addr;

  addr=32*X+Y;
  d1=addr;
  d2=addr>>8;
  com=0x24;
  write_2();//设置显示位置

  d2=0xb0;

⌨️ 快捷键说明

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