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

📄 6963.c

📁 89c52驱动内藏6963的LCD 160*80 图形方式
💻 C
字号:
#include <stdio.h>
#include <init.c>
#include <ziku.c>
#include <zimu.c>
#include <hanzi2.c>
#include <zimu2.c>
#include <interface.c>

#define width      0x20       //显示区宽度 
#define addr_t     0x0000   //图形显示区首地址 
#define addr_w	   0x0000
#define uchar      unsigned char 
#define uint       unsigned int  

sbit CD  =P3^0;//数据/指令
sbit RD  =P3^1; //读
sbit CE  =P3^2;//使能
sbit WR  =P3^3;  //写
sbit LCD_C= P2^4;////液晶背光管脚

void wr_comm (uchar comm); 
void wr_data (uchar dat); 
void chk_busy (uchar autowr);
//void _nop_(void);
//void delay_nop(void); 
void xianshi(void);

void chk_busy (uchar autowr)    //测状态 
{ 
  uchar PPA; 
  CD=1;    //C/D 1
  RD=0;    //RD 0
  WR=1;    //WR  1
 // delay_nop();
  PPA=P5; 
 // delay_nop();
  RD=1;
 // delay_nop();
  if(autowr) 
       { 
	   while(P5&0X08==0X00);       
       }  
  else
       {  
	   while((P5&0X01==0X00)|(P5&0X02==0X00));    
       } 
}

void wr_comm(uchar comm)       //写命令 
{ 
  chk_busy (0); 
  CD=1;    //RS  数据指令  P3^0
//  delay_nop();
  P5=comm; 
  WR=0;    //WR  
//  delay_nop();
  RD=1;
//  delay_nop();
  WR=1;
 // delay_nop();
} 

void wr_data(uchar dat)       //写数据 
{ 
  chk_busy (0); 
  CD=0;          //C/D 数据指令 
//  delay_nop();
  P5=dat; 
  WR=0;
//  delay_nop();
  RD=1;
 // delay_nop();
  WR=1;
 // delay_nop();
} 


/*------------写命令或数据到LCD-一字节参数指令写入函数 -------------*/ 
void wr_od (uchar dat,uchar comm)       //写一个数据和一个命令 
{ 
  wr_data(dat); 
  wr_comm(comm); 
} 
void wr_td (uchar datl,uchar dath,uchar comm)  //写两个数据和一个命令 
{ 
  wr_data(datl); 
  wr_data(dath); 
  wr_comm(comm); 
} 
void wr_xd(uint dat,uchar comm)       //写一个16进制数据和一个命令 
{ 
  uchar datl,dath; 
  datl=dat; 
  dath=dat>>8; 
  wr_data(datl); 
  wr_data(dath); 
  wr_comm(comm); 
} 
void wr_auto (uchar dat)               //自动写数据 
{ 
  chk_busy (1); 
  CD=0;     //C/D                  
  P5=dat; 
  WR=0;     //WR  
  RD=1;  ///RD  
  WR=1;                 
} 
 
/*------------------初始化-----------------*/ 
void init_lcd (void) 
{ 
  CE=0;
  wr_xd(addr_w,0x40);                   //文本显示区首地址 
  wr_xd(addr_t,0x42);                   //图形显示区首地址 
  wr_td(width,0x00,0x41);               //文本显示区宽度 
  wr_td(width,0x00,0x43);               //图形显示区宽度 
  wr_td(0x03,0x00,0x22);                //CGRAM偏置地址设置 
  wr_comm(0x88);                        //逻辑"异或" 
  wr_comm(0x98);                        //启用文本显示,启用图形显示    
} 
/*--------------清RAM------------------*/ 
void clrram (void) 
{ 
  uchar i,j; 
  wr_td(0x00,0x00,0x24); //设置显示存储器首地址  
  wr_comm(0xb0); 
  for(j=0;j<144;j++) 
  { 
    for(i=0;i<20;i++) 
      wr_auto(0x00); 
  } 
  wr_comm(0xb2); 
} 
	
void disp_c(unsigned int addr,unsigned int xl,unsigned int yl,unsigned char code1)
{
  uint i,j;
  const unsigned char *img;
  img=&HZTable[code1][0];
  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      wr_xd(addr+j*width+i,0x24);
      wr_od(img[j*xl+i],0xc0);
    }
  }
}

void disp_c2(unsigned int addr,unsigned int xl,unsigned int yl,unsigned char code2)
{
  uint i,j;
  const unsigned char *img;
  img=&HZTable2[code2][0];
  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      wr_xd(addr+j*width+i,0x24);
      wr_od(img[j*xl+i],0xc0);
    }
  }
}

void disp_e(unsigned int addr,unsigned int xl,unsigned int yl,unsigned char code3)
{
  uint i,j;
  const unsigned char *img;
  img=&ZMTable[code3][0];
  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      wr_xd(addr+j*width+i,0x24);              
      wr_od(img[j*xl+i],0xc0);
    }
  }
}


void disp_e2(unsigned int addr,unsigned int xl,unsigned int yl,unsigned char code4)
{
  uint i,j;
  const unsigned char *img;
  img=&ZMTable2[code4][0];
  for(j=0;j<yl;j++)
  {
    for(i=0;i<xl;i++)
    {
      wr_xd(addr+j*width+i,0x24);              
      wr_od(img[j*xl+i],0xc0);
    }
  }
}
/*void delay_nop()
{ _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
}*/
/*------------------演示程序--------------------*/ 
void main () 
{ 
	WDTCN = 0xde;                      // 禁止看门狗定时器
	WDTCN = 0xad; 
	SYSCLK_Init();
//	delay_nop();
	PORT_Init();
//	delay_nop();
	init_lcd(); 
//	delay_nop();
	clrram();
	xianshi();
	while (1) ;
}

⌨️ 快捷键说明

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