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

📄 main.c

📁 凌阳单片机液晶驱动 /*--------------------------------------------------------*|***************简易心电图仪源程序*****
💻 C
字号:
/*--------------------------------------------------------*\
|***************简易心电图仪源程序*************************|
|**********作者:李桃*******2007年3月**********************|
|**********************************************************|
|**********IOB低八位为数据口,第8--13位为控制线*************|
|***	P1_8	P1_9	P1_10	P1_11	P1_12	P1_13	***|
|***	  |		  |		  |		  |		  |		  |	 	***|
|***	 DI	 	 RW		  E		 CS1	 CS2	 RST 	***|
\*--------------------------------------------------------*/

#include "SPCE061V004.H"
#include "bit.h"

#define DI  P1_8	//数据,指令选择:1数据,0指令
#define RW  P1_9	//读,写选择:1读,0写
#define E   P1_10	//读写使能1有效,下降沿锁定数/据
#define CS1 P1_11	//左半屏选择0有效
#define CS2 P1_12	//右半屏选择0有效
#define RST P1_13	//复位0有效

typedef unsigned int uint;
uint min=0,sec=0,count=0;
uint *min_a,*min_b,*sec_a,*sec_b;

uint huan[]=
{
	/*--  文字:  欢  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00,
	0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00,
};
uint ying[]=
{
	/*--  文字:  迎  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00,
	0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00,
};
uint shi[]=
{
	/*--  文字:  使  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00,
	0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00,
};
uint yong[]=
{
	/*--  文字:  用  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
	0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00,
};
uint xin_1[]=
{
	/*--  文字:  心  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0x80,0x00,0x00,0xF0,0x00,0x01,0x02,0x1C,0x08,0x00,0x40,0x80,0x00,0x00,0x00,
	0x04,0x03,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x07,0x02,0x00,
};
uint dian[]=
{
	/*--  文字:  电  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
	0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,
};
uint tu[]=
{
	/*--  文字:  图  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0xFE,0x42,0x42,0x22,0x1E,0xAA,0x4A,0xAA,0x9A,0x0A,0x02,0x02,0xFE,0x00,0x00,
	0x00,0xFF,0x42,0x42,0x41,0x41,0x48,0x72,0x54,0x40,0x41,0x43,0x41,0xFF,0x00,0x00,
};
uint yi_1[]=
{
	/*--  文字:  仪  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x40,0x20,0xF0,0x0C,0x03,0x00,0x38,0xC0,0x01,0x0E,0x04,0xE0,0x1C,0x00,0x00,0x00,
	0x00,0x00,0xFF,0x00,0x40,0x40,0x20,0x10,0x0B,0x04,0x0B,0x10,0x20,0x60,0x20,0x00,
};
uint cheng_1[]=
{
	/*--  文字:  成  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0x00,0xF8,0x48,0x48,0x48,0xC8,0x08,0xFF,0x08,0x09,0x0A,0xC8,0x88,0x08,0x00,
	0x40,0x30,0x0F,0x00,0x08,0x50,0x4F,0x20,0x10,0x0B,0x0C,0x12,0x21,0x40,0xF0,0x00,
};
uint du[]=
{
	/*--  文字:  都  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x24,0x00,0xFE,0x22,0x52,0x8A,0x06,0x00,
	0x04,0x02,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0xFF,0x08,0x08,0x10,0x0F,0x00,
};
uint xin_2[]=
{
	/*--  文字:  信  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x80,0x40,0x30,0xFC,0x07,0x0A,0xA8,0xA8,0xA9,0xAE,0xAA,0xA8,0xA8,0x08,0x08,0x00,
	0x00,0x00,0x00,0x7F,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,
};
uint xi[]=
{
	/*--  文字:  息  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0x00,0x00,0xFC,0x54,0x54,0x56,0x55,0x54,0x54,0x54,0xFC,0x00,0x00,0x00,0x00,
	0x00,0x20,0x38,0x01,0x3D,0x41,0x41,0x45,0x59,0x41,0x41,0x71,0x00,0x08,0x30,0x00,
};
uint gong[]=
{
	/*--  文字:  工  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
	0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
};
uint cheng_2[]=
{
	/*--  文字:  程  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x10,0x12,0xD2,0xFE,0x91,0x11,0x80,0xBF,0xA1,0xA1,0xA1,0xA1,0xBF,0x80,0x00,0x00,
	0x04,0x03,0x00,0xFF,0x00,0x41,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x40,0x00,
};
uint xue[]=
{
	/*--  文字:  学  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
	0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
};
uint yuan[]=
{
	/*--  文字:  院  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
	0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,0x01,0x01,0x7F,0x81,0x81,0x81,0xF1,0x00,
};
uint ji[]=
{
	/*--  文字:  级  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x20,0x30,0xAC,0x63,0x20,0x18,0x02,0x82,0x7E,0x82,0x42,0x72,0x4E,0xC0,0x40,0x00,
	0x10,0x13,0x11,0x49,0x29,0x91,0x8C,0x43,0x40,0x23,0x14,0x18,0x66,0xC1,0x40,0x00,
};
uint yi_2[]=
{
	/*--  文字:  医  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0xFE,0x42,0xA2,0x9E,0x92,0x92,0x92,0xF2,0x92,0x92,0x92,0xD2,0x82,0x00,0x00,
	0x00,0x7F,0x40,0x40,0x50,0x48,0x44,0x43,0x40,0x41,0x42,0x5C,0x48,0x40,0x40,0x00,
};
uint liao[]=
{
	/*--  文字:  疗  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x10,0x60,0x80,0xFC,0x04,0x24,0x24,0x25,0x26,0x24,0xA4,0x64,0x24,0x06,0x04,0x00,
	0x82,0x61,0x18,0x07,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,
};

uint zi[]=
{
	/*--  文字:  子  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,
	0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
};
uint er[]=
{
	/*--  文字:  二  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x06,0x04,0x00,0x00,0x00,
	0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x18,0x10,0x00,
};
uint ban[]=
{
	/*--  文字:  班  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x42,0x42,0xFE,0x42,0x42,0xE0,0x00,0xFF,0x00,0x42,0x42,0xFE,0x42,0x42,0x42,0x00,
	0x10,0x10,0x0F,0x88,0x49,0x20,0x18,0x07,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x00,
};
uint li[]=
{
	/*--  文字:  李  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x80,0x84,0x44,0xC4,0xA4,0x94,0x8C,0xFF,0x8C,0x94,0xA4,0x24,0x44,0xC4,0x40,0x00,
	0x00,0x04,0x04,0x04,0x04,0x44,0x84,0x7E,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
};
uint tao[]=
{
	/*--  文字:  桃  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x88,0x68,0xFF,0x28,0x48,0x00,0x10,0x20,0xFF,0x00,0xFF,0x80,0x20,0x18,0x08,0x00,
	0x01,0x00,0x7F,0x00,0x40,0x42,0x22,0x19,0x07,0x00,0x3F,0x40,0x43,0x46,0x70,0x00,
};
uint nian[]=
{
	/*--  文字:  年  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,
	0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
};
uint san[]=
{
	/*--  文字:  三  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04,0x00,0x00,
	0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
};
uint yue[]=
{
	/*--  文字:  月  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
	0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,
	0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00,
};

uint zero[]=
{
	/*--  文字:  0  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
};
uint one[]=
{
	/*--  文字:  1  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
};
uint two[]=
{
	/*--  文字:  2  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
};
uint three[]=
{
	/*--  文字:  3  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
};
uint four[]=
{
	/*--  文字:  4  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
};
uint five[]=
{
	/*--  文字:  5  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
};
uint six[]=
{
	/*--  文字:  6  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
};
uint seven[]=
{
	/*--  文字:  7  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
};
uint eight[]=
{
	/*--  文字:  8  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
};
uint nine[]=
{
	/*--  文字:  9  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
};
uint gang[]=
{
	/*--  文字:  -  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
};
uint maohao[]=
{
	/*--  文字:  :  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,
};
static void delay(uint i)
{	//延时
	while(i--)
	*P_Watchdog_Clear=C_WDTCLR;
}

static void write_instr(uint idat)		
{	//写指令
	E=RW=DI=0;
	P1_Lowbyte=idat;
	E=1;E=0;
}

static void write_dat(uint ddat)
{	//写数据
	E=RW=0;
	DI=1;
	P1_Lowbyte=ddat;
	E=1;E=0;
}

static void write_word(uint cs,uint page,uint column,uint *p,uint rd)
{	//写一个16*16的汉字
	uint i,j;
	if(0==cs)	//选择左半屏
		{CS1=0,CS2=1;}	
	else		//选择右半屏
		{CS1=1,CS2=0;}	
	for(j=0;j<2;j++)
	{
		write_instr(0xb8|page++);	//写字页地址
		write_instr(0x40|column);	//写字列地址
		if(0==rd)	//正常显示
			{
				for(i=0;i<16;i++)
					write_dat(*(p+i+j*16));	
			}
		else		//反白显示
			{
				for(i=0;i<16;i++)
					write_dat(~*(p+i+j*16));
			}
	}
	*P_Watchdog_Clear=C_WDTCLR;		//喂狗
}

static void write_char(uint cs,uint page,uint column,uint *p,uint rd)
{	//写一个8*16的字符
	uint i,j;
	if(0==cs)	//选择左半屏
		{CS1=0,CS2=1;}	
	else		//选择右半屏
		{CS1=1,CS2=0;}	
	for(j=0;j<2;j++)
	{
		write_instr(0xb8|page++);	//写字符页地址
		write_instr(0x40|column);	//写字符列地址
		if(0==rd)	//正常显示
			{
				for(i=0;i<8;i++)
					write_dat(*(p+i+j*8));	
			}
		else		//反白显示
			{
				for(i=0;i<8;i++)
					write_dat(~*(p+i+j*8));
			}
	}
	*P_Watchdog_Clear=C_WDTCLR;		//喂狗
}

static void initial(void)	
{	//单片机初始化及液晶复位
	asm("int off");//关中断
	*P_INT_Ctrl=C_IRQ5_2Hz;//设置时基信号
	P1_Dir=0xffff;
	P1_Attrib=0xffff;
	P1=0xffff;	//very very important!!    ^_^
	E=0;
	RST=0;
	delay(5);
	RST=1;
	write_instr(0x3f);
	write_instr(0xc0);
	asm("irq on");//开中断
}

static void lcd_clr(void)
{	//清屏
	int i,j;
	CS1=0;CS2=1;
	for(i=0;i<8;i++)
	{
		write_instr(0xb8|i);
		for(j=0;j<64;j++)
			write_dat(0x00);//0不显示 
	}	
	CS1=1;CS2=0;
	for(i=0;i<8;i++)
	{
		write_instr(0xb8|i);
		for(j=0;j<64;j++)
			write_dat(0x00);
	}
}

static uint *num(uint n)
{
	switch(n)
	{
		case 0:return zero;
		case 1:return one;
		case 2:return two;
		case 3:return three;
		case 4:return four;
		case 5:return five;
		case 6:return six;
		case 7:return seven;
		case 8:return eight;
		case 9:return nine;
		default:break;
	}
}

main()
{
	initial();
	lcd_clr();
	while(1)
	{		//第一行
		write_word(0,0,0,huan,0);//欢
		write_word(0,0,16,ying,0);//迎
		write_word(0,0,32,shi,0);//使
		write_word(0,0,48,yong,0);//用
		write_word(1,0,0,xin_1,0);//心
		write_word(1,0,16,dian,0);//电
		write_word(1,0,32,tu,0);//图
		write_word(1,0,48,yi_1,0);//仪
			//第二行
		write_word(0,2,0,cheng_1,0);//成
		write_word(0,2,16,du,0);//都
		write_word(0,2,32,xin_2,0);//信
		write_word(0,2,48,xi,0);//息
		write_word(1,2,0,gong,0);//工
		write_word(1,2,16,cheng_2,0);//程
		write_word(1,2,32,xue,0);//学
		write_word(1,2,48,yuan,0);//院
			//第三行		
		write_char(0,4,0,zero,0);//0
		write_char(0,4,8,three,0);//3
		write_word(0,4,16,ji,0);//级
		write_word(0,4,32,yi_2,0);//医
		write_word(0,4,48,liao,0);//疗
		write_word(1,4,0,dian,0);//电
		write_word(1,4,16,zi,0);//子
		write_word(1,4,32,er,0);//二
		write_word(1,4,48,ban,0);//班
	/*		//第四行
		write_word(0,6,0,li,0);//李
		write_word(0,6,16,tao,0);//桃
		write_char(0,6,32,gang,0);//-
		write_char(0,6,40,gang,0);//-
		write_char(0,6,48,two,0);//2
		write_char(0,6,56,zero,0);//0
		write_char(1,6,0,zero,0);//0
		write_char(1,6,8,seven,0);//7
		write_word(1,6,16,nian,0);//年
		write_word(1,6,32,san,0);//三
		write_word(1,6,48,yue,0);//月
		*P_Watchdog_Clear=C_WDTCLR;//喂狗*/
		min_a=num(min/10);
		min_b=num(min%10);
		sec_a=num(sec/10);
		sec_b=num(sec%10);
		write_char(0,6,0,min_a,1);
		write_char(0,6,8,min_b,1);
		write_char(0,6,16,maohao,1);
		write_char(0,6,24,sec_a,1);
		write_char(0,6,32,sec_b,1);
	}
}

⌨️ 快捷键说明

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