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

📄 tzqno.c

📁 QH12864显示开机画面"欢迎使用"C51语言AT89S52
💻 C
字号:
#include<stdio.h>
#include <reg52.h>
#include <math.h>
#include <absacc.h>
#include <string.h>   //头文件


/*lcd函数声明*/
PR1();
PR11();
PR12();
void ST01(void);
void ST2(void);
void ST3(void);
INT_1();         
CCW2_PR();
void DRAW();
W_DOT();
NOP();
//中断定义函数声明
//void initial(void);
//显示画面函数定义
display1();
display2();
display4();
display5();
display6();
display7();
void display();

/* lcd  地址定义   */
  sbit  cd=P1^7;     //定义液晶指令数据通道C/D
  sbit  wr=P3^6;     //定义wr
  sbit  rd=P3^7;     //定义rd
  sbit  yjcs=P2^7;   //定义lcd 的cs

/*   常数定义   */
#define  para1 0x10;		 //显示宽度16个
unsigned char bei_data=6; 
 
/*宏定义*/
unsigned char lcd_step=1;  //读ram时的读数间隔

/*标志位*/
char flag,flag1;
/*参数声明*/
bit a;
long int ram_wr=0;
unsigned int O_X,O_Y, com,dat1,dat2,adc_sum;//com为液晶屏的指令代码,dat2显示文本垂直位置
unsigned char code_1,attr,wave_count=0,adc_t,lb_date,adc_date,keyvalue;
unsigned char xdata RAM[5120]_at_ 0xc400;  //外部存储器,注意必须为0XCxxx,跟P2口有关
unsigned int timecount;
/******************************/
code unsigned char  CCTAB[5][32]={ 
/*--  文字:  欢  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x00,0x80,0xFC,0x80,0x05,0xFE,0x85,0x04,0x4A,0x48,0x28,0x40,0x10,0x40,
0x18,0x40,0x18,0x60,0x24,0xA0,0x24,0x90,0x41,0x18,0x86,0x0E,0x38,0x04,0x00,0x00,

/*--  文字:  迎  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x40,0x00,0x21,0x80,0x36,0x7C,0x24,0x44,0x04,0x44,0x04,0x44,0xE4,0x44,0x24,0x44,
0x25,0x44,0x26,0x54,0x24,0x48,0x20,0x40,0x20,0x40,0x50,0x00,0x8F,0xFE,0x00,0x00,

/*--  文字:  使  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x40,0x0C,0x40,0x1B,0xFE,0x10,0x40,0x37,0xFC,0x64,0x44,0xA4,0x44,0x27,0xFC,
0x24,0x44,0x22,0x40,0x21,0x80,0x20,0x80,0x21,0x70,0x22,0x1E,0x2C,0x04,0x00,0x00,

/*--  文字:  用  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x1F,0xFC,0x10,0x84,0x10,0x84,0x10,0x84,0x1F,0xFC,0x10,0x84,0x10,0x84,
0x10,0x84,0x1F,0xFC,0x10,0x84,0x10,0x84,0x20,0x84,0x20,0x84,0x40,0x94,0x80,0x88,

/*--  文字:  !  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x00,0x00,0x10,0x00,0x00,0x00,



};
code unsigned char  DTAB[11]={ 0x25,0x2e,0x34,0x25,0x32,0x00,0x00,0x00,0x25,0x33,0x23};
code unsigned char  DTAB1[32]={ 0x33,0x25,0x2c,0x25,0x23,0x34,0x00,0x00,0x30,0x29,0x23,0x34,0x35,0x32,0x25,0x00,
                         0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x41,0x42,0x43,0x44,0x45,0x46}; 
code unsigned char  DTAB2[15]={0x33,0x25,0x2c,0x25,0x23,0x34,0x00,0x2f,0x34,0x28,
                          0x25,0x32,0x33,0x1f};
code unsigned char  DTAB3[32]={0x33,0x21,0x36,0x25,0x00,0x27,0x32,0x21,0x30,0x28,0x29,0x23,0x33,0x00,0x00,0x00,
                          0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x41,0x42,0x43,0x44,0x45,0x46};

/*------------------------------------------------
The main C function.  Program execution starts
here after stack initialization.
------------------------------------------------*/
main()
 {     unsigned int i=0;
       
       yjcs=0;  
       INT_1();         /* 屏幕初始化函数 */
       display1();    //显示开机画面
   NOP();
} 
/**************************/
 /*     屏幕初始化函数        */
 /**************************/
INT_1()
    {
       dat1=0x00;      /*设文本显示区域首地址*/
       dat2=0x00;
       com=0x40;
       PR1();
       
	   dat1=para1;    /*设文本显示区域宽度*/
       dat2=0x00;
       com=0x41;
       PR1();
       
	   dat1=0x00;    /*设图形显示区域首地址*/
       dat2=0x08;
       com=0x42;
       PR1();
       
	   dat1=para1;    /*设图形显示区域宽度*/
       dat2=0x00;
       com=0x43;
       PR1();
       
	   com=0xa3;      /*光标形状设置*/
       PR12();
       
	   com=0x80;      /*显示方式设置逻辑"或"合成*/
       PR12();
       
	   com=0x9c;      /*显示开关设置 开文本和图形显示*/
       PR12();
    }
/*****************************/
/*    汉字写入(图形方式)函数  */
/********************************/
CCW2_PR()
    {
     unsigned int i,j,count1;
        i=para1;
        j=i*O_Y+O_X+0x0800;   /* 图形显示区首地址为

0x0800*/
             for(count1=0;count1<16;count1++)
                {
                 dat1=j%256;  /* 显示地址设置 */
                 dat2=j/256;
                 com=0x24;
                 PR1();
                 dat2=CCTAB[code_1][count1];
                 com=0xc0;
                 PR11();
                 dat2=CCTAB[code_1][count1+16];
                 PR11();
                 j=j+i;
                }
     }
/********************************/
/*  西文字符写入(文本属性)函数  */
/********************************/
   CW2_PR()
       {
       unsigned int i,j;
        i=para1;
        j=i*O_Y+O_X;
        dat1=j%256;
        dat2=j/256;
        com=0x24;  // 显示地址设置 
        PR1();
        dat2=code_1;
        com=0xc4;  // 数据写 
        PR11();
        dat2=0x08;
        com=0x24;
        PR1();
        dat2=attr;  // 写入属性参数 
        com=0xc4;
        PR11();
		NOP();
       }	 


/****************************/
/*    写指令和写数据函数    */
/****************************/
PR1()              /* 双字节参数指令写入入口 */
    {
      ST01();
      cd=0;		  //数据通道
      P0=0xff;	  //清一下电平
      
      P0=dat1;  /* 取第一参数单元数据 */
     wr=0;
     NOP();
     wr=1;
     PR11();
    }
PR11()             /* 单字节参数指令写入入口 */
    {
      ST01();
     cd=0;
     P0=0xff;
      P0=dat2;  /* 取第二参数单元数据 */
     wr=0;
  NOP();
     wr=1;
     PR12();
    }
PR12()             /* 无参数指令代码写入入口 */
  {
    ST01();
    cd=1;		  //指令通道
    P0=0xff;
     P0=com;    /* 写入指令代码 */
    wr=0;
    NOP();
     wr=1;
  }
/*******************************************/
/*读取lcd状态字   */
/******************************************/
unsigned char readstate(void)
{ 
 unsigned char lcd_state;
  P0=0xff; //p0为输入方式
  cd=1; // C/D=1 
  rd=0; // /RD=0     
 lcd_state=P0&0xff;   // 读取引脚A物理电平 
 NOP();  
 NOP(); 
 rd=1;   // /RD=1  
return lcd_state;
}

/************************************************/
/*  判状态位S1,S0 函数(读写指令和读写数据状态)  */
/************************************************/
void ST01(void)
 {
    while((readstate()&0x03)!=3)
    ;  
 }
/************************************/
/*  判状态位S2函数(数据自动读状态)  */
/************************************/
void ST2(void)
{
 while((readstate()&0x04)!=4);
}
/************************************/
/*  判状态位S3函数(数据自动写状态)  */
/************************************/
void ST3(void)
{ 
 while((readstate()&0x08)!=8)   
 ;
}
/****************/
NOP()
{
     unsigned int j;
      for(j=0;j<2500;j++)
          {;}
     
}

/*****************************/
  /* 显示显示波形开机画面 */
/*****************************/
display1()
  {    
       code_1=0x05;         /* 汉字写入显示波形回车确认*/     
       O_X=0x03;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x00;
       O_X=0x05;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x01;
       O_X=0x07;
       O_Y=0x00;
       CCW2_PR();
       code_1=0x02;
       O_X=0x09;
       O_Y=0x00;
       CCW2_PR();
          
       code_1=0x13;
       O_X=0x03;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x14;
       O_X=0x05;
       O_Y=0x10;
       CCW2_PR();
       code_1=0x05;
      
    }


⌨️ 快捷键说明

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