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

📄 text1.c

📁 LCD TS12864-3的一些驱动。可显示中文。
💻 C
字号:
#include<reg52.h>
#define uchar unsigned char  
#define uint  unsigned int
#define DataPort    P0 
#define N 800
sbit E=P2^5;
sbit RW=P2^6;
sbit RS=P2^7;
sbit RSTB=P2^4;
int    num;
uint i=0;
uint l=0;
uint b;
uchar temp;
uchar a[]="东莞理工学院0123456789abcdefg,今天是2008年04月07日星期1.";
uchar c[]={2+'0',5+'0'};
uchar d[]={0x98,0x90,0x88,0x80};
////////////////////////////////////////////////////////////

/**************延时1ms*count*****************///
void delay(int count)
{
  int x,y;
  for(x=0;x<count;x++)
  for(y=0;y<120;y++);
}
/***********忙检测********************/
void Busy()
{
  DataPort=0xFF;
  RS=0; 
  RW=1; 
    E =1; 
    if (P0^7==1) delay(10); 
    E=0;
 }

/***********写指令子程序****************/
void Write_Com(uchar command)
{
  Busy();        //检测忙标志位
  RS=0;
  RW=0; 
  E=1;                                          
  DataPort=command;  //写入指令
  delay(1);                                               
  E=0;  
  RW=1;
  DataPort=0xff;                                                                             
}                                                  

/***********写数据子程序***************/ 
void Write_Data(uchar Data)
{
  Busy();
  RS=1;                 
  RW=0;
  E=1;
  DataPort=Data;
  delay(1);
  E=0; 
  RW=1;
}

/***********LCD初始化*******************/ 

void Init_LCD(void) 
{    
   RSTB=0; 
   delay(1);
   RSTB=1;         
   delay(1); 
   Write_Com(0x32);//30H--基本指令操作  
   Write_Com(0x32);
   Write_Com(0x0e);//开显示,关光标,不闪烁。 
   Write_Com(0x00);//清除显示  
   Write_Com(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。   
} 

/*****************清屏***********************/ 
void Clear_LCD(void) 
{ 
  Write_Com(0x01); 
  Write_Com(0x34); 
  Write_Com(0x30); 
}
/*******************逐行显示***************************************/
/**** 灵活的算法,实现字体向上走动,x=d[0]=0x98时,i=0时执行第1,3个if,最终将字写在0x98开始的行中。
      x=d[1]=0x90时,i=0时执行第1,4个if,最终将字写在0x98开始的行中,i=16时执行第2个if,将字写在
	  0x98中。。。以此类推。。。                                                            ****/

void Display_Line(uchar x)
{
  uchar c=0;
  c=x-0x1;                        //本函数说明,函数内部的计算公式一定要处在函数的首行
  if(i==0) Write_Com(x);
  if(i==2*(0x87-c)) Write_Com(0x90); 
  if(i==2*(0x97-c)) Write_Com(0x98);
  if(i==2*(0x8f-c)) Write_Com(0x88);
 }

/********************汉字显示********************/
void Show_Chiese()
{
   EA=0;
   b=sizeof(a)/sizeof(char);  //注意,这里不能单纯写成b=sizeof(a),编译器看到的就是一个有52个元素的字符形数组,大小就是2*52. 
   num=b;
   //for(l=0;l<4;l++)
   //{
   l=3;
    for(i=0;i<num;i++)
    { 
     Display_Line(d[l]);
     Write_Data(a[i]);
    }
      delay(N);                 //决定字幕向上走的速度。
       //EA=1;
   //}
   
   EA=1;
   TH0=0x06;
   TL0=0x06;                   //设定定时的时间,1542=(65536-定时时间)*(12/晶振频率)                          
                              //晶振频率为12M的定时时间为63994ms。
   Write_Com(0x9e); 
  
   for(i=0;i<3;i++)
    {Write_Data(c[i]);}
   delay(5000);                
   Clear_LCD();
   delay(500);
}

///////////////////////////////////////////////////////////////

/*********************主函数********************/

void main(void) 
{   
  TMOD=0x01;    ///选择定时器模式
  TR0=1;       //开中断,并允许T0中断
  ET0=1;
  EA=1;            //总开关
  Init_LCD();
  Clear_LCD();
  DataPort=0xff;
  DataPort=0x00;
  while(1);
  {
  
  };
}   
////////////////////////////////////////////////////
void t0(void) interrupt 1 using 0 
{
 //delay(100);
 Show_Chiese();
 //EA=0; 
}  

⌨️ 快捷键说明

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