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

📄 tuxing.c

📁 51单片机开发与应用技术详解(珍藏版)PPT及源码
💻 C
字号:
#include<reg52.h>
#include<stdio.h>

unsigned data i;
unsigned char q;
unsigned char *p2,*pp;				 //建立数组指针
unsigned char wbyte;
unsigned char Column;				//定义列
unsigned char Page;					//定义页

sbit E=P3^2;					//读写使能信号,1有效
sbit R_W=P3^1;				//读写选择信号;1为读选通,0为写选通
sbit RS=P3^0;
sbit D_I=P3^0;					//数据指令选择信号;1为数据操作,0为写指令或读状态

unsigned char data j;
unsigned char data k;		

/********************扩充指令集画图********************/
unsigned char data z;//图形数组的页,为实际点阵行数
unsigned char data y;//图形数组的列,为实际点阵列数除以8
unsigned char data Column;//起始点设定:为在液晶中显示的实际起始列
unsigned char data Page;//起始点设定:为在液晶中显示的实际起始行

char code Tu[64][16]= 			//图形数组,龙的标志
{
0xFF,0xFE,0xFE,0x80,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x01,0x7F,0x7F,0xFF,
0xE9,0x6E,0xEE,0x80,0x00,0x00,0x70,0x00,0x80,0x00,0x00,0x00,0x01,0x77,0x69,0x69,
0x96,0x96,0xEE,0x80,0x00,0x00,0x70,0x07,0x80,0x00,0x00,0x00,0x01,0x77,0x76,0x97,
0xE9,0x6E,0xE0,0x80,0x00,0x00,0xE6,0x1E,0x00,0x00,0x00,0x00,0x01,0x07,0x69,0x69,
0x96,0x96,0xFF,0x80,0x00,0x01,0xE8,0x78,0x00,0x00,0x00,0x00,0x01,0xFF,0x76,0x97,
0xE9,0x6E,0xFF,0x80,0x00,0x07,0xF7,0xFF,0xFF,0x80,0x00,0x00,0x01,0xFF,0x69,0x69,
0x96,0x96,0x00,0x80,0x00,0x0F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x01,0x00,0x76,0x97,
0xE9,0x6F,0xFE,0x80,0x00,0x1F,0xF7,0xFF,0xF0,0x00,0x00,0x00,0x01,0x7F,0xE9,0x69,
0x96,0x97,0xFE,0x80,0x00,0xFF,0xFF,0x0F,0xF8,0x00,0x00,0x00,0x01,0x7F,0xF6,0x97,
0xE9,0x6E,0x0E,0x80,0x01,0xFF,0xFE,0xF6,0xFF,0x80,0x00,0x00,0x01,0x70,0x69,0x69,
0x96,0x96,0xEE,0x80,0x07,0xFF,0xF7,0xFF,0x1F,0xF8,0x00,0x00,0x01,0x77,0x76,0x97,
0xE9,0x6E,0xEE,0x80,0xFF,0xFF,0xF0,0x1E,0xFF,0xFE,0x00,0x00,0x01,0x77,0x69,0x69,
0x96,0x96,0xFE,0x81,0xFF,0x1F,0xF8,0x01,0xF7,0xE1,0x00,0x00,0x01,0x7F,0x76,0x97,
0xE9,0x6E,0x00,0x81,0xFE,0x1F,0xFF,0x00,0x97,0xF0,0x78,0x00,0x01,0x00,0x69,0x69,
0x96,0x97,0xFF,0x80,0x00,0x78,0x00,0x00,0x79,0xF8,0x68,0x00,0x01,0xFF,0xF6,0x97,
0xE9,0x6F,0xFF,0x80,0x00,0x70,0x00,0x00,0x71,0xFE,0x7E,0x00,0x01,0xFF,0xE9,0x69,
0x96,0x96,0x00,0x80,0x00,0x70,0x00,0x00,0x1F,0xFE,0x7F,0x00,0x01,0x00,0x76,0x97,
0xE9,0x6E,0xFE,0x80,0x00,0x70,0x00,0x00,0x1E,0xFE,0x97,0x80,0x01,0x7F,0x69,0x69,
0x96,0x96,0xEE,0x80,0x01,0xF0,0x00,0x00,0x0E,0xF8,0xFF,0xE0,0x01,0x77,0x76,0x97,
0xE9,0x6E,0xEE,0x80,0x00,0xF0,0x00,0x00,0x1E,0xFF,0x9F,0xF0,0x01,0x77,0x69,0x69,
0x96,0x96,0xE0,0x80,0x00,0x60,0x00,0x00,0x1E,0xEF,0xF9,0xF0,0x01,0x07,0x76,0x97,
0xE9,0x6E,0xFF,0x80,0x00,0x00,0x00,0x00,0x16,0xFF,0x99,0xF8,0x01,0xFF,0x69,0x69,
0x96,0x96,0xFF,0x80,0x00,0x00,0x00,0x00,0x79,0xFF,0x79,0xFE,0x01,0xFF,0x76,0x97,
0xE9,0x6E,0x00,0x80,0x00,0x00,0x00,0x00,0x7F,0xF9,0xFF,0xFE,0x01,0x00,0x69,0x69,
0x96,0x97,0xFE,0x80,0x00,0x00,0x00,0x01,0xE7,0xF9,0x7F,0xEF,0x01,0x7F,0xF6,0x97,
0xE9,0x6F,0xFE,0x80,0x00,0x00,0x00,0x01,0xEF,0xF8,0x07,0x87,0x01,0x7F,0xE9,0x69,
0x96,0x96,0x0E,0x80,0x00,0x00,0x00,0x1F,0x7F,0x98,0x07,0x01,0x01,0x70,0x76,0x97,
0xE9,0x6E,0xEE,0x80,0x00,0x00,0x00,0xFE,0xFF,0x90,0x00,0x00,0x81,0x77,0x69,0x69,
0x96,0x96,0xEE,0x80,0x00,0x00,0x01,0xF7,0xFF,0x10,0x00,0x00,0x01,0x77,0x76,0x97,
0xE9,0x6E,0xFE,0x80,0x00,0x00,0x1E,0xFF,0xFE,0x00,0x80,0x00,0x01,0x7F,0x69,0x69,
0x96,0x96,0x00,0x80,0x00,0x00,0x7F,0x7F,0xEE,0x1F,0xFE,0x00,0x01,0x00,0x76,0x97,
0xE9,0x6F,0xFF,0x80,0x00,0x00,0x8E,0xFF,0xE8,0x1F,0xFF,0x00,0x01,0xFF,0xE9,0x69,
0x96,0x97,0xFF,0x80,0x00,0x01,0xF9,0xF9,0xE8,0xFF,0xEF,0x00,0x01,0xFF,0xF6,0x97,
0xE9,0x6E,0x00,0x80,0x00,0x06,0xF7,0xF9,0x87,0xF0,0x01,0xE0,0x01,0x00,0x69,0x69,
0x96,0x96,0xFE,0x80,0x00,0x0F,0x6F,0xF9,0x8F,0xE0,0x00,0xE0,0x01,0x7F,0x76,0x97,
0xE9,0x6E,0xEE,0x80,0x00,0x1F,0x9F,0x11,0x0F,0x80,0x00,0x70,0x01,0x77,0x69,0x69,
0x96,0x96,0xEE,0x80,0x00,0x7F,0xFF,0x71,0x0F,0x00,0x01,0x91,0x01,0x77,0x76,0x97,
0xE9,0x6E,0xE0,0x80,0x00,0x16,0x7F,0x10,0x1F,0x80,0x00,0xFE,0x01,0x07,0x69,0x69,
0x96,0x96,0xFF,0x80,0x00,0xFF,0xFF,0x60,0x1F,0xE0,0x00,0x7E,0x01,0xFF,0x76,0x97,
0xE9,0x6E,0xFF,0x80,0x00,0xFE,0xFF,0x00,0x1F,0xFF,0x80,0x1E,0x01,0xFF,0x69,0x69,
0x96,0x96,0x00,0x80,0x00,0xFF,0xEF,0x00,0x0F,0xFF,0xF8,0x18,0x01,0x00,0x76,0x97,
0xE9,0x6F,0xFE,0x80,0x00,0x96,0xE7,0x00,0x07,0xFF,0xFE,0x0E,0x01,0x7F,0xE9,0x69,
0x96,0x97,0xFE,0x80,0x01,0xF9,0xE1,0x00,0x00,0xFF,0xFF,0x08,0x01,0x7F,0xF6,0x97,
0xE9,0x6E,0x0E,0x80,0x01,0xF9,0xF1,0x00,0x00,0x1F,0xFF,0x00,0x01,0x70,0x69,0x69,
0x96,0x96,0xEE,0x80,0x01,0xF9,0xF8,0x00,0x00,0x09,0xFF,0x80,0x01,0x77,0x76,0x97,
0xE9,0x6E,0xEE,0x80,0x01,0xF9,0xF8,0x00,0x00,0x07,0xFF,0x80,0x01,0x77,0x69,0x69,
0x96,0x96,0xFE,0x80,0x01,0x01,0xF8,0x00,0x00,0x01,0xFF,0xE0,0x01,0x7F,0x76,0x97,
0xE9,0x6E,0x00,0x80,0x01,0xF9,0x8E,0x00,0x00,0x00,0xFF,0x80,0x01,0x00,0x69,0x69,
0x96,0x97,0xFF,0x80,0x01,0xF9,0xE6,0x00,0x00,0x00,0x7F,0xE0,0x01,0xFF,0xF6,0x97,
0xE9,0x6F,0xFF,0x80,0x00,0xFE,0xF0,0x00,0x00,0x06,0x1F,0xE0,0x01,0xFF,0xE9,0x69,
0x96,0x96,0x00,0x80,0x00,0xF8,0xF8,0x00,0x00,0x07,0xFF,0xE0,0x01,0x00,0x76,0x97,
0xE9,0x6E,0xFE,0x80,0x00,0x96,0xFF,0x80,0x00,0x01,0xFF,0x80,0x01,0x7F,0x69,0x69,
0x96,0x96,0xEE,0x80,0x00,0x7F,0xF9,0x60,0x00,0x01,0xFF,0x80,0x01,0x77,0x76,0x97,
0xE9,0x6E,0xEE,0x80,0x00,0x7F,0x78,0x00,0x00,0x18,0xFF,0x80,0x01,0x77,0x69,0x69,
0x96,0x96,0xE0,0x80,0x00,0x79,0x7E,0x7F,0x01,0x10,0xFF,0x00,0x01,0x07,0x76,0x97,
0xE9,0x6E,0xFF,0x80,0x00,0x1F,0x9F,0xFE,0x1E,0x70,0xFF,0x00,0x01,0xFF,0x69,0x69,
0x96,0x96,0xFF,0x80,0x00,0x0F,0xEF,0xE0,0x78,0x79,0xFF,0x00,0x01,0xFF,0x76,0x97,
0xE9,0x6E,0x00,0x80,0x00,0x07,0x87,0xE1,0xF8,0xFF,0xFE,0x00,0x01,0x00,0x69,0x69,
0x96,0x97,0xFE,0x80,0x00,0x01,0xF9,0xFF,0xF9,0xFF,0xF8,0x00,0x01,0x7F,0xF6,0x97,
0xE9,0x6F,0xFE,0x80,0x00,0x00,0xF8,0xFF,0xFF,0xFF,0xF0,0x00,0x01,0x7F,0xE9,0x69,
0x96,0x96,0x0E,0x80,0x00,0x00,0x6F,0x7F,0xFF,0xFF,0xE0,0x00,0x01,0x70,0x76,0x97,
0xE9,0x6E,0xEE,0x80,0x00,0x00,0x1F,0x87,0xFF,0xFF,0x00,0x00,0x01,0x77,0x69,0x69,
0x96,0x96,0xEE,0x80,0x00,0x00,0x0F,0xF8,0xFF,0xF8,0x00,0x00,0x01,0x77,0x76,0x97,
0xFF,0xFE,0xFE,0x80,0x00,0x00,0x00,0x0E,0x70,0x00,0x00,0x00,0x01,0x7F,0x7F,0xFF,
};

void WCOM(unsigned char d)    			//写指令程序
{
 R_W=1;
 D_I=0;						//设置状态
Loop:
 P1=0xFF;
 E=1;						//使能有效
 q=P1;						//将p1口状态读入
 E=0;						//关闭使能信号
 if(q&0x80)					//判断屏幕是否忙
 {
 goto Loop;					//若忙,循环等待
 }
 R_W=0;
 D_I=0;						//写数据指令
 P1=d;						//将数据送入p1口
 E=1;						//使能信号开
 E=0;						//使能信号关
}

void Dat(unsigned char d)
{
 R_W=1;
 D_I=0;						//读状态指令
Loop:
 P1=0xFF;
 E=1;						//使能
 q=P1;
 E=0;
 if(q&0x80)
 {
 goto Loop;
 }							//判忙
 D_I=1;						//送数据指令
 R_W=0;
 P1=d;
 E=1;						//使能信号开
 E=0;						//使能信号关
}

void Clearlcd()
{
 D_I=0;
 R_W=0;
 P1=0x01;
 WCOM(0x01);					//清除显示
}

void Imim()
{
 P0=0xff;
 P1=0xff;
 P2=0xff;
 P3=0xff;
 E=0;
WCOM(0x38);					//功能设定
 WCOM(0x08);					//关显示指令
 WCOM(0x06);					//游标右移
 Clearlcd();					//清屏
 WCOM(0x0c);					//开显示指令
}



void Tuxing()
{
 unsigned char data v;
 unsigned char data w;
 unsigned char data x;
 unsigned char data h;
 WCOM(0x34);					//功能设定
 WCOM(0x36);					//扩充功能设定
 pp=p2;
 pp=pp+16*y*2;
 for(h=0;h<z/2;h++)  			//页循环
 {
  v=Column|0x80;
  w=Page|0x80;
  WCOM(w);					//送入起始页地址
  WCOM(v);					//送入起始列地址
  Page++; 					//准备对下一页进行操作
  for(x=0;x<2*y;x++) 			//列循环
   {
    if(x<y)
    {
     wbyte=*p2;
     Dat(wbyte);				//循环送入图形数据
     p2=p2+1;
    }
    else
     {
      wbyte=*pp;
      Dat(wbyte);				//循环送入图形数据
      pp=pp+1;
     }
   }
  }
}

void Clearlcd1()
{
  unsigned char data Disp_Page;
  unsigned char data i;
  unsigned char data j;
  for(i=0;i<64;i++)				//共32页
  {
   Disp_Page=i|0x80;			//设置页地址
   WCOM(Disp_Page);			//送入页地址
   WCOM(0x80);				//送入起始列地址
   for(j=0;j<32;j++)
   {
    Dat(0x00);					//清屏
   }
  }
}


/********************主程序********************/
void main()
{
 Imim();						//初始化
 Clearlcd1();					//扩充指令集清屏

 p2=Tu;
z=64;						//图形数组的页,为实际点阵行数
 y=16;						//图形数组的列,为实际点阵列数除以8
 Column=0;					//起始点设定:为在液晶中显示的实际起始列
 Page=0;						//起始点设定:为在液晶中显示的实际起始行
 Tuxing();	   					//龙的图形
 while(1)
{
}
}


⌨️ 快捷键说明

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