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

📄 12864m-p.c

📁 小护士脉搏监护仪全套系统
💻 C
字号:
//深圳瑞特RT12864带M系列(控制器ST7920A),单片机:89S52,晶振:12M,
//并行连接方式,P2.0-RS,P2.1-RW,P2.2-E
//设计:TIMEN HUANG
#include<reg52.h>
#include <intrins.h>
sbit RS=P2^0;//串口时为CS
sbit RW=P2^1; //串口为SID
sbit E=P2^2;  //串口为时钟SCLK
sbit stop=P3^2;
sbit PSB=P2^3;
sbit REST=P2^4;

//以下是用<at89x51.h>头文件的定义
/*
#define RS  P2_0
#define RW  P2_1 //定义引脚
#define E   P2_2
#define PSB P2_3
#define REST P2_4
#define Data  P1
#include<at89x51.h>
*/
#define BF    0x80 //用于检测LCM状态字中的Busy标识
typedef unsigned int Uint;
typedef unsigned char Uchar;
//字符串例子
//"F1--English",也可以往里面写入汉字码,一个汉字由两个码组成
const Uchar F1English[]={0x46,0x31,0x2d,0x2d,0x45,0x6e,0x67,0x6c,0x69,0x73,0x68,0x00};
const Uchar lengthF1=6;  //字符串长度
//汉字,直接可以写入字形
unsigned char code uctech[] = {"瑞特电子有限公司"};
const Uchar lengthCF3=8;

Uchar code TAB1[]={
/*--  调入了一幅图像:D:\公司的文件\程序图片\未命名11.bmp  --*/
/*--  宽度x高度=128x64  --*/
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0xFF,0xFF,0xF9,0xE9,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xF8,0x97,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xF9,0xE8,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xF8,0xBF,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x0F,0xFF,0xFF,0xFF,0xF8,0xB5,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0x80,0x04,0x00,0x03,0xFF,0xFF,0xFF,0xF8,0xF5,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x07,0xFF,0xFF,0xFF,0xF9,0xA5,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0x00,0x04,0x00,0x03,0xFF,0xFF,0xFF,0xF8,0x23,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFE,0x00,0x02,0x00,0x03,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFE,0x00,0x02,0x00,0x01,0xFF,0xFF,0xFF,0xF8,0x88,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFC,0x00,0x12,0x00,0x01,0xFF,0xFF,0xFF,0xF8,0x88,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFC,0x00,0x12,0x00,0x00,0xFF,0xFF,0xFF,0xF9,0x9E,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xF8,0x00,0x32,0x00,0x00,0xFF,0xFF,0xFF,0xFA,0xC9,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xF8,0x00,0x22,0x00,0x00,0xFF,0xFF,0xFF,0xFA,0x96,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xF8,0x00,0x33,0x00,0x00,0xFF,0xFF,0xFF,0xF8,0xC5,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xF8,0x00,0x63,0x00,0x00,0xFF,0xFF,0xFF,0xF9,0xBE,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFC,0x00,0x61,0x80,0x00,0xFF,0xFF,0xFF,0xF8,0x94,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFC,0x00,0xE1,0x80,0x00,0xFF,0xFF,0xFF,0xF8,0x84,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFC,0x00,0xE1,0xC0,0x00,0xFF,0xFF,0xFF,0xF8,0x84,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFE,0x00,0xE1,0xC0,0x01,0xFF,0xFF,0xFF,0xF8,0x40,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFE,0x01,0xE1,0xC0,0x01,0xFF,0xFF,0xFF,0xFB,0xF8,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFE,0x01,0xF1,0xE0,0x03,0xFF,0xFF,0xFF,0xFA,0x48,0x02,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0x03,0xE3,0xE0,0x02,0xFF,0xFF,0xFF,0xFB,0xF9,0xFF,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0x03,0xE1,0xF0,0x07,0xFF,0xFF,0xFF,0xFA,0x48,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0x4B,0xF1,0xF8,0x06,0xFF,0xFF,0xFF,0xFB,0xFC,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF1,0xF8,0x0F,0xFF,0xFF,0xFF,0xF8,0x44,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF5,0xFC,0x1F,0xFF,0xFF,0xFF,0xF8,0x7C,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0x3F,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xF9,0xF8,0x9C,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xCF,0xFB,0xFF,0x00,0x7E,0xFF,0xFF,0xF8,0x11,0xF4,0x01,
0xBF,0xFF,0xFF,0xDE,0x10,0x8F,0xF9,0xFF,0x01,0x2B,0x39,0xFF,0xF8,0x21,0xB4,0x01,
0xBF,0xFF,0xFC,0x42,0xF0,0x1F,0xFD,0xFF,0x80,0x44,0x0A,0xFF,0xFB,0xFD,0xBC,0x01,
0xBF,0xFF,0xFD,0x07,0x20,0x3F,0xE9,0xFF,0xC0,0x41,0x45,0xFF,0xF8,0x21,0xB4,0x01,
0xBF,0xFF,0xFE,0xED,0x5A,0x8B,0xC0,0xFF,0xC0,0x05,0xDD,0xFF,0xF8,0x21,0xF4,0x01,
0xBF,0xFF,0xFD,0xB0,0xF4,0x20,0x01,0x00,0x62,0xF7,0xFF,0xFF,0xF8,0x20,0x95,0x01,
0xBF,0xFF,0xFF,0xFF,0xB4,0x0F,0xF9,0x00,0x23,0x7F,0xFF,0xFF,0xF8,0x60,0xB7,0x01,
0xBF,0xFF,0xFF,0xFC,0x14,0x83,0xFF,0xF9,0x3C,0x08,0xFF,0xFF,0xF8,0x00,0x80,0x01,
0xBF,0xFF,0xFF,0xE6,0x56,0x81,0xFF,0xFF,0xFD,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFD,0x00,0xFF,0xFF,0xFA,0x7F,0xFF,0xFF,0xF8,0x00,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xDA,0x87,0xFF,0xFF,0xDA,0x3F,0xFF,0xFF,0xF8,0x00,0xFC,0x01,
0xBF,0xFF,0xFF,0xEE,0xFF,0x02,0xFD,0x7F,0xF9,0x7F,0xFF,0xFF,0xF8,0x00,0x84,0x01,
0xBF,0xFF,0xFF,0xFF,0xF8,0xC0,0x01,0x02,0xDA,0xFF,0xFF,0xFF,0xF8,0x00,0xCC,0x01,
0xBF,0xFF,0xFF,0xFF,0xF6,0x11,0x80,0xC0,0x1A,0x3F,0xFF,0xFF,0xF8,0x00,0xB4,0x01,
0xBF,0xFF,0xFF,0xFF,0xFD,0x0E,0xC1,0xF9,0x41,0xFF,0xFF,0xFF,0xF8,0x00,0xB4,0x01,
0xBF,0xFF,0xFF,0xF8,0xA2,0xAF,0xF0,0xFF,0x93,0xFF,0xFF,0xFF,0xF8,0x00,0xCC,0x01,
0xBF,0xFF,0xFF,0xFF,0xFD,0x8F,0xF8,0xFF,0x2E,0xBF,0xFF,0xFF,0xF8,0x00,0x85,0x01,
0xBF,0xFF,0xFF,0xFF,0xFD,0x57,0xF8,0xFF,0x18,0xFF,0xFF,0xFF,0xF8,0x01,0x03,0x01,
0xBF,0xFF,0xFF,0xFF,0xFD,0x07,0xF1,0xFE,0x47,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xE3,0xF9,0xFE,0x3F,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0x83,0xF1,0xF9,0x7F,0xFF,0xFF,0xFF,0xF8,0x00,0x00,0x01,
0xBF,0xFF,0xFF,0xFF,0xFA,0xC1,0xE1,0xF8,0x7F,0xFF,0xFF,0xFF,0xF8,0x00,0x02,0x01,
0xBF,0xFF,0xFF,0xFF,0xF9,0x00,0xF1,0xF0,0x34,0xFF,0xFF,0xFF,0xF8,0x01,0x5F,0x01,
0xBF,0xFF,0xFF,0xFF,0xF7,0x2C,0xE1,0xE4,0xFF,0xFF,0xFF,0xFF,0xF8,0x01,0xCC,0x01,
0xBF,0xFF,0xFF,0xFF,0xFF,0xD0,0x61,0xC0,0x7F,0xFF,0xFF,0xFF,0xF8,0x01,0x5E,0x01,
0xBF,0xFF,0xFF,0xFF,0xFE,0xAC,0x61,0xC1,0x67,0xFF,0xFF,0xFF,0xF8,0x01,0x5A,0x01,
0xBF,0xFF,0xFF,0xFF,0xFE,0x80,0x21,0xC0,0x3F,0xFF,0xFF,0xFF,0xF8,0x01,0x5A,0x01,
0xBF,0xFF,0xFF,0xFF,0xFD,0xC0,0x21,0x00,0x07,0xFF,0xFF,0xFF,0xF8,0x01,0xDA,0x01,
0xBF,0xFF,0xFF,0xFF,0xFA,0x60,0x01,0x00,0x13,0xFF,0xFF,0xFF,0xF8,0x03,0x4C,0x01,
0xBF,0xFF,0xFF,0xFF,0xFC,0xD0,0x00,0x00,0x1F,0xFF,0xFF,0xFF,0xF8,0x02,0x52,0x01,
0xBF,0xFF,0xFF,0xFF,0xE1,0x00,0x00,0x00,0x08,0xD7,0xFF,0xFF,0xF8,0x00,0x21,0x01,
0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

};
//这个是在串口时指令和数据之间的延时
/*
void delay10US(Uchar x)
{
   Uchar k;
 for(k=0;k<x;k++);
 }
*/
const Uchar delay=250;  //延时时间常数
static void Wait1ms(void)//延迟1 ms
{
  Uchar cnt=0;
  while (cnt<delay) cnt++;
}
//延迟n ms 
void WaitNms(int n)
{
    Uchar i;
    for(i=1;i<=n;i++)
   	Wait1ms();
}

void stopint(void)//中断程序
{
if(stop==0)
 while(1);
}

//**************************************************************************//
//以下是并口时才开的
//读忙标志,
void RDBF(void)
{
	Uchar temp; 
	RS=0;	// RS=0
	RW=1;	// RW=1
	while(1)
	{
	    P1=0xFF;      //数据线为输入
    	E=1;
	temp=P1;
	E=0;	// E=0
	if ((temp&0x80)==0) break;
    }	
}
//写数据到指令寄存器

void WRCommand(Uchar comm)
{
	RDBF();
	RW=0;
	P1=comm;
	E=1;
	E=0;
}
//写数据到数据寄存器
void WRData(Uchar TEMP)
{
	RDBF();
	RS=1;
	RW=0;
	P1=TEMP;
	E=1; 
	E=0;
	stopint();
}

/////////////////////////////////////////////////////////////////////////////////
//以下是串口时开的读写时序
/*void SendByteLCD(Uchar WLCDData)
{
 Uchar i;
 for(i=0;i<8;i++)
 {
 if((WLCDData<<i)&0x80)RW=1;
 else RW=0;
 E=0; 
 E=1 ;
 }
}
 SPIWR(Uchar Wdata,Uchar WRS)
 {
   SendByteLCD(0xf8+(WRS<<1));
   SendByteLCD(Wdata&0xf0);
   SendByteLCD((Wdata<<4)&0xf0);
 }
void WRCommand(Uchar CMD)
{
  RS=0;
  RS=1;
  SPIWR(CMD,0);
  delay10US(90);//89S52来模拟串行通信,所以,加上89S52的延时,
}
void WRData(Uchar Data)
{ 
  RS=0;
  RS=1;
  SPIWR(Data,1);

}
*/
/*******************************************************************/
//初始化LCD-8位接口
void LCDInit(void)
{  //	PSB=0; //串口
    PSB=1;//并口时选这个,上一行取消
    REST=1;
    REST=0;
    REST=1;
  	WRCommand(0x30);	//基本指令集,8位并行

	WRCommand(0x06);	//启始点设定:光标右移

	WRCommand(0x01);	//清除显示DDRAM

	WRCommand(0x0C);	//显示状态开关:整体显示开,光标显示关,光标显示反白关

	WRCommand(0x02);	//地址归零	
}
//显示数组字符串(显示半宽字型16*8点阵)
void ShowQQChar(Uchar addr,Uchar *english,Uchar count)
{	
	Uchar i;
	WRCommand(addr);	//设定DDRAM地址
	for(i=0;i<count;)
	{	
	    WRData(english[i*2]);
        WRData(english[i*2+1]);
		i++;
    }
}
//显示连续字串(半宽字符)
void ShowNUMChar(Uchar addr,Uchar i,Uchar count)
{
     Uchar j;
	for(j=0;j<count;)
	{	
	    WRCommand(addr);	//设定DDRAM地址
		WRData(i+j);
		j++;
		WRData(i+j);
		addr++;
		j++;
	}		
}
//自定义字符写入CGRAM
void WRCGRAM(Uchar data1,Uchar data2,Uchar addr)
{     
      Uchar i;
      for(i=0;i<16;)
  {
      WRCommand(addr+i);  	//设定CGRAM地址
      WRData(data1);
	  WRData(data1);
      i++;
	  WRCommand(addr+i);  	//设定CGRAM地址
	  WRData(data2);
	  WRData(data2);
      i++;
  }  
}
//显示自定义的字符,并把这个字符填满全屏16*16
void ShowCGChar(Uchar addr,Uchar i)
{
     Uchar j;
	for(j=0;j<0x20;)
	{	
	    WRCommand(addr+j);	//设定DDRAM地址
		WRData(0x00);
	    WRData(i);
		j++;
	}		
}
void CLEARGDRAM(void)
{    
       Uchar j;
       Uchar i;
	   WRCommand(0x34);
	   WRCommand(0x36);
       for(j=0;j<32;j++)
  {
       WRCommand(0x80+j);
	   WRCommand(0x80);//X坐标
       for(i=0;i<32;i++)//
      {
       WRData(0x00);
      }
   }
  
}
//写入GDRAM 绘图,Y是Y绘图坐标,2个字节一行,CLONG是图形长度,以字节
//为单位;HIGHT是图形高度,TAB是图形数据表.12864M的图形显示是相当于256*32点阵.
//由两屏128*32上下两屏组成,同一行的下屏的头地址紧接上屏的未地址。
//绘图在串口输入时,会比在并口下的输入要慢一些
void WRGDRAM(Uchar Y1,Uchar clong,Uchar hight,Uchar *TAB1)
{    
       Uint k;
       Uchar j;
       Uchar i;
	   WRCommand(0x34);
	   WRCommand(0x36);
	   for(j=0;j<hight;j++)//32
  {   //先上半屏
       WRCommand(Y1+j);  //Y总坐标,即第几行
	   WRCommand(0x80);//X坐标,即横数第几个字节开始写起
       for(i=0;i<clong;i++)//
      {
       WRData(TAB1[clong*j+i]);
      }
	     //后下半屏
      
       for(k=0;k<clong;k++)//
      {
       WRData(TAB1[clong*(j+hight)+k]);
      }
     
  }
}

void menu(void)
{
	LCDInit();
    ShowNUMChar(0x80,0x01,0x0f);//显示半宽特殊符号
	ShowNUMChar(0x90,0x30,0x0f);//显示半宽0~?数字标点
	ShowNUMChar(0x88,0x41,0x0f);//显示半宽A~P大写
	ShowNUMChar(0x98,0x61,0x0f);//显示半宽a~p小写
	WaitNms(250);		//等待时间
	WaitNms(250);		//等待时间
	  stopint();
	WRCommand(0x01);	//清除显示DDRAM

	WRCGRAM(0xff,0x00,0x40);//写入横
	WRCGRAM(0x00,0xff,0x50);//写入横2
	WRCGRAM(0xaa,0xaa,0x60);//写入竖
	WRCGRAM(0x55,0x55,0x70);//写入竖2
    ShowCGChar(0x80,0x00);//显示横并填满
	WaitNms(250);		//等待时间
	WaitNms(250);		//等待时间
	  stopint();
	WRCommand(0x01);	//清除显示DDRAM

    ShowCGChar(0x80,02);//显示横2并填满
	WaitNms(250);		//等待时间
	WaitNms(250);		//等待时间
	  stopint();
	WRCommand(0x01);	//清除显示DDRAM

	ShowCGChar(0x80,04);//显示竖并填满
	WaitNms(250);		//等待时间
	WaitNms(250);		//等待时间
	  stopint();
	WRCommand(0x01);	//清除显示DDRAM

	ShowCGChar(0x80,06);//显示竖2并填满
	WaitNms(250);		//等待时间
	WaitNms(250);		//等待时间
	  stopint();
	WRCommand(0x01);	//清除显示DDRAM

	WRCGRAM(0x00,0x00,0x40);//清CGRAM1
	WRCGRAM(0x00,0x00,0x50);//清CGRAM2
	WRCGRAM(0xaa,0x55,0x40);//写入点
	WRCGRAM(0x55,0xaa,0x50);//写入点2
	ShowCGChar(0x80,00);//显示点并填满
	WaitNms(250);		//等待时间
	WaitNms(250);		//等待时间
	  stopint();
	WRCommand(0x01);	//清除显示DDRAM

	ShowCGChar(0x80,02);//显示点2并填满
	WaitNms(250);		//等待时间
	WaitNms(250);		//等待时间
	  stopint();
	WRCommand(0x01);	//清除显示DDRAM

    ShowQQChar(0x80,uctech,lengthCF3);//显示'瑞特电子有限公司',以下共四行
    ShowQQChar(0x90,uctech,lengthCF3);
    ShowQQChar(0x88,uctech,lengthCF3);
    ShowQQChar(0x98,uctech,lengthCF3);
   	WaitNms(250);		//等待时间
	WaitNms(250);		//等待时间
	  stopint();
	WRCommand(0x01);	//清除显示DDRAM
}

void menu2(void)
{   CLEARGDRAM();
    WRGDRAM(0x80,16,32,TAB1);
 	WaitNms(250);		//等待时间
	WaitNms(250);		//等待时间
	  stopint();

}
//主函数
void main(void)
{
    menu();//初始化及半宽字符和点横竖汉字扫描
    menu2();//绘图显示
for(;;)
{;}

}

⌨️ 快捷键说明

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