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

📄 ks0108.c

📁 ym12864i的液晶显示控制程序.这个程序已经通过验证
💻 C
字号:
#include <pic.h>
#include <pic1687x.h>

#define PORTBIT(add,bit) ((unsigned)(&add)*8+(bit))
static bit rs@PORTBIT(PORTB,4);
static bit rw@PORTBIT(PORTB,5);
static bit en@PORTBIT(PORTB,6);
static bit cs1@PORTBIT(PORTC,0);
static bit cs2@PORTBIT(PORTC,1);



unsigned int n;
char keyflag=0;
char keystore=0x00;
void (*p)(void);
void function1(void);
void function2(void);
void function3(void);
void function4(void);
void function5(void);
void function6(void);
void function7(void);
void function8(void);
void function9(void);
void struct
{
	char keyok;
	char keyesc;
	char keyup;
	char keydown;
	char maxnum;
	void (*str)(void);	
}keytab;
typedef struct keytab keytabarr[10];


const char bignumber[10][36]={
0x00,0x00,0x80,0xC0,0x60,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0xFE,0xFF,0x01,
0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x00,0x01,0x07,0x0E,0x18,0x10,0x10,0x18,
0x0E,0x07,0x01,0x00,/*"0",0*/

0x00,0x00,0x80,0x80,0x80,0xC0,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x1F,0x1F,0x10,
0x10,0x10,0x00,0x00,/*"1",1*/

0x00,0x80,0x40,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x03,0x03,0x00,
0x80,0x40,0x20,0x38,0x1F,0x07,0x00,0x00,0x00,0x1C,0x1A,0x19,0x18,0x18,0x18,0x18,
0x18,0x1F,0x00,0x00,/*"2",2*/

0x00,0x80,0xC0,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x03,0x03,0x00,
0x10,0x10,0x18,0x2F,0xE7,0x80,0x00,0x00,0x00,0x07,0x0F,0x10,0x10,0x10,0x10,0x18,
0x0F,0x07,0x00,0x00,/*"3",3*/

0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0xF0,0x00,0x00,0x00,0x00,0xC0,0xB0,0x88,
0x86,0x81,0x80,0xFF,0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x1F,
0x1F,0x10,0x10,0x00,/*"4",4*/

0x00,0x00,0xE0,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x00,0x00,0x00,0x3F,0x10,
0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x00,0x07,0x0B,0x10,0x10,0x10,0x10,0x1C,
0x0F,0x03,0x00,0x00,/*"5",5*/

0x00,0x00,0x80,0xC0,0x40,0x20,0x20,0x20,0xE0,0xC0,0x00,0x00,0x00,0xFC,0xFF,0x21,
0x10,0x08,0x08,0x08,0x18,0xF0,0xE0,0x00,0x00,0x01,0x07,0x0C,0x18,0x10,0x10,0x10,
0x08,0x0F,0x03,0x00,/*"6",6*/

0x00,0x00,0xC0,0xE0,0x60,0x60,0x60,0x60,0x60,0xE0,0x60,0x00,0x00,0x00,0x03,0x00,
0x00,0x00,0xE0,0x18,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F,0x00,
0x00,0x00,0x00,0x00,/*"7",7*/

0x00,0x80,0xC0,0x60,0x20,0x20,0x20,0x20,0x60,0xC0,0x80,0x00,0x00,0x87,0xEF,0x2C,
0x18,0x18,0x30,0x30,0x68,0xCF,0x83,0x00,0x00,0x07,0x0F,0x08,0x10,0x10,0x10,0x10,
0x18,0x0F,0x07,0x00,/*"8",8*/

0x00,0x00,0xC0,0xC0,0x20,0x20,0x20,0x20,0xC0,0x80,0x00,0x00,0x00,0x1F,0x3F,0x60,
0x40,0x40,0x40,0x20,0x10,0xFF,0xFE,0x00,0x00,0x00,0x0C,0x1C,0x10,0x10,0x10,0x08,
0x0F,0x03,0x00,0x00,/*"9",9*/
};
const char chinese[18][32]={
0x80,0x88,0x48,0xC8,0xA8,0x98,0x88,0xFF,0x88,0x98,0xA8,0xA8,0x48,0xC8,0x48,0x00,
0x00,0x40,0x40,0x5F,0x52,0x52,0x52,0x52,0x52,0x52,0x52,0x5F,0x40,0x40,0x40,0x00,/*"查",0*/

0x40,0x42,0xCC,0x04,0x00,0x10,0xE8,0x27,0x24,0x24,0xE4,0x04,0x04,0xFC,0x00,0x00,
0x00,0x00,0x7F,0x20,0x10,0x00,0x1F,0x09,0x09,0x09,0x1F,0x40,0x80,0x7F,0x00,0x00,/*"询",1*/

0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00,
0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00,/*"设",2*/

0x00,0x20,0x2F,0xA9,0xA9,0xAF,0xE9,0xB9,0xA9,0xAF,0xA9,0xA9,0x2F,0x20,0x00,0x00,
0x80,0x80,0x80,0xFF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xFF,0x80,0x80,0x80,0x00,/*"置",3*/

0x08,0x88,0x68,0xFF,0x28,0x48,0x00,0x88,0x68,0x09,0x0E,0x08,0xA8,0x48,0x88,0x00,
0x02,0x01,0x00,0xFF,0x00,0x40,0x42,0x21,0x26,0x18,0x18,0x26,0x61,0xC0,0x40,0x00,/*"校",4*/

0x02,0xFA,0x82,0x82,0xFE,0x80,0x40,0x60,0x58,0x46,0x48,0x50,0x20,0x20,0x20,0x00,
0x08,0x08,0x04,0x24,0x40,0x3F,0x22,0x2C,0x21,0x2E,0x20,0x30,0x2C,0x23,0x20,0x00,/*"验",5*/

0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,/*"时",6*/

0x00,0xF8,0x01,0x06,0x00,0xF0,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x40,0x80,0x7F,0x00,0x00,/*"间",7*/

0x10,0x21,0x86,0x70,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x02,0xFE,0x01,0x40,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x41,0x41,0x7F,0x40,0x00,/*"温",8*/

0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,
0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,/*"度",9*/

0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,
0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00,/*"压",10*/

0x00,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0xF0,0x00,0x00,
0x00,0x00,0x80,0x40,0x20,0x18,0x06,0x01,0x00,0x00,0x40,0x80,0x40,0x3F,0x00,0x00,/*"力",11*/

0x00,0xC0,0xF8,0xF8,0x18,0xD8,0xD8,0x18,0xD8,0xD8,0x18,0xD8,0xD8,0x18,0xF8,0xF8,
0x00,0x03,0x1F,0x1F,0x18,0x1B,0x1B,0x18,0x1B,0x1B,0x18,0x1B,0x1B,0x18,0x1F,0x1F,/*"电" 12*/

0x08,0xF8,0x78,0x80,0x78,0xF8,0x08,0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x00,
0x08,0x0F,0x00,0x0F,0x00,0x0F,0x08,0x08,0x0F,0x08,0x00,0x00,0x00,0x00,0x00,0x00,/*"MP",13*/

0x38,0x28,0x38,0xE0,0x10,0x08,0x08,0x08,0x10,0x38,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x03,0x04,0x08,0x08,0x08,0x08,0x06,0x00,0x00,0x00,0x00,0x00,/*"℃",14*/

0x00,0x0C,0x04,0x55,0x55,0x55,0x85,0x7F,0x85,0x55,0x55,0x55,0x05,0x0C,0x04,0x00,
0x04,0x04,0x04,0x0A,0x0A,0x09,0x2A,0xCC,0x28,0x19,0x09,0x02,0x06,0x02,0x02,0x00,/*"零",15*/

0x00,0x00,0x00,0xE0,0x20,0x20,0x20,0x3F,0x24,0x24,0x24,0xF4,0x24,0x00,0x00,0x00,
0x00,0x40,0x30,0x07,0x12,0x62,0x02,0x0A,0x12,0x62,0x02,0x0F,0x10,0x60,0x00,0x00,/*"点",16*/

0x24,0x38,0xE0,0xFF,0xB0,0x2C,0x00,0x22,0xAA,0xAA,0xBF,0xAA,0xAA,0xAA,0x22,0x00,
0x08,0x07,0x00,0xFF,0x00,0x01,0x02,0x00,0xFF,0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,/*"精",17*/

};

const  char figure[13][16]={
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",0*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"1",1*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",2*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*"3",3*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*"4",4*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*"5",5*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"6",6*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*"7",7*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",8*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*"9",9*/
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/*"/",10*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*":",11*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*".",12*/
};

void delay(unsigned int time)
{
	while(time!=0)
	{
		time--;
	}
}
void sendorder(unsigned int order)
{	
	rs=0;
	rw=0;
	en=0;
	PORTD=order;
	en=1;
	en=0;
}
void senddata(char data)
{
	rs=1;
	rw=0;
	en=0;
	PORTD=data;
	en=1;
	en=0;
}
void setpage(unsigned int page)
{
	page=page&0x07;
	page=page|0xB8;
	sendorder(page);
}
void setcolumn(unsigned int column)
{
	column=column&0x3f;
	column=column|0x40;
	sendorder(column);
}
void clearscreen(void)
{
	unsigned int i,j;
	PORTC=0x01;
	for(i=0;i<8;i++)
	{
		setpage(i);
		setcolumn(0);
		for(j=0;j<64;j++)
		{	
			senddata(0x00);
		}
	}	
	PORTC=0x02;
	for(i=0;i<8;i++)
	{
		setpage(i);
		setcolumn(0);
		for(j=0;j<64;j++)
		{	
			senddata(0x00);
		}
	}
}
void initial(void)
{
	delay(500);
	TRISA=0x0F;
	TRISB=0x00;
	TRISC=0x00;
	TRISD=0x00;
	PORTA=0x00;	
	PORTB=0x00;
	PORTC=0x00;
	PORTD=0x00;
	ADCON1=0x07;
	//设置显示起始行为第0行;
	PORTC=0x01;
	sendorder(0xC0);
	sendorder(0x3F);
	PORTC=0x02;
	sendorder(0xC0);
	sendorder(0x3F);
	clearscreen();
	delay(100);
}
void shownumber(char page ,char column,char no,char mode)
{
	unsigned int i,j;
	char data;
	if(column<64)
	PORTC=0x01;
	else 
	{
		PORTC=0x02;
		column=column-64;
	}
	
	for(i=0;i<2;i++)
	{
		setpage(page+i);
		setcolumn(column);
		for(j=0;j<8;j++)
		{
			data=mode^figure[no][i*8+j];
			senddata(data);
		}
	}
}
void showbignum(char page,char column,char no,char mode)
{
	unsigned int i,j;
	char data;
	if(column<64)
	PORTC=0x01;
	else 
	{
		PORTC=0x02;
		column=column-64;
	}
	
	for(i=0;i<3;i++)
	{
		setpage(page+i);
		setcolumn(column);
		for(j=0;j<12;j++)
		{
			data=mode^bignumber[no][i*12+j];
			senddata(data);
		}
	}
}
void showword(char page,char column,char no,char mode)
{
	unsigned int i,j;
	char data;
	if(column<64)
	PORTC=0x01;
	else 
	{
		PORTC=0x02;
		column=column-64;
	}
	
	for(i=0;i<2;i++)
	{
		setpage(page+i);
		setcolumn(column);
		for(j=0;j<16;j++)
		{
			data=mode^chinese[no][i*16+j];
			senddata(data);
		}
	}
}

void showface(void)
{
	clearscreen();
	shownumber(0,8,2,0x00);
	shownumber(0,16,6,0x00);
	showword(0,24,14,0x00);
	////////////////////////////
	shownumber(0,48,0,0x00);
	shownumber(0,56,7,0x00);
	shownumber(0,64,6,0x00);
	shownumber(0,72,0,0x00);
	showword(0,80,13,0x00);
	/////////////////////////////
	showword(0,104,12,0x00);
	////////////////////////////
	showbignum(3,32,1,0xff);
	showbignum(3,44,0,0xff);
	shownumber(4,56,12,0xff);
	showbignum(3,64,0,0xff);
	showbignum(3,76,7,0xff);
	////////////////////////////
	shownumber(4,96,0,0x00);
	shownumber(4,104,4,0x00);
	shownumber(4,112,3,0x00);
	///////////////////////////
	shownumber(6,8,0,0x00);
	shownumber(6,16,6,0x00);
	shownumber(6,24,10,0x00);
	shownumber(6,32,0,0x00);
	shownumber(6,40,9,0x00);
	shownumber(6,48,10,0x00);
	shownumber(6,56,2,0x00);
	shownumber(6,64,8,0x00);
	/////////////////////////////
	shownumber(6,80,1,0x00);
	shownumber(6,88,0,0x00);
	shownumber(6,96,11,0x00);
	shownumber(6,104,3,0x00);
	shownumber(6,112,9,0x00);
}
void function1(void)
{
	clearscreen();
	showword(2,0,0,0x00);
	showword(2,16,1,0x00);
	showword(4,0,2,0xff);
	showword(4,16,3,0xff);
	showword(6,0,4,0x00);
	showword(6,16,5,0x00);
}
void function2(void)
{
	clearscreen();
	showbignum(3,32,0,0x00);
	showbignum(3,44,8,0x00);
	shownumber(4,56,12,0x00);
	showbignum(3,64,8,0x00);
	showbignum(3,76,9,0x00);
}
void function3(void)
{
	clearscreen();
	showword(2,0,2,0x00);
	showword(2,16,3,0x00);
	showword(2,32,6,0x00);
	showword(2,48,7,0x00);
	showword(4,0,2,0x00);
	showword(4,16,3,0x00);
	showword(4,32,8,0x00);
	showword(4,48,9,0x00);
	showword(6,0,2,0x00);
	showword(6,16,3,0x00);
	showword(6,32,10,0x00);
	showword(6,48,11,0x00);
}
void function4(void)
{
	char hour,minite,second;
	hour=11;
	minite=51;
	clearscreen();
	showword(0,32,2,0xff);
	showword(0,48,3,0xff);
	showword(0,64,6,0xff);
	showword(0,76,7,0xff);
	showbignum(3,32,hour/10,0x00);
	showbignum(3,44,hour%10,0x00);
	shownumber(4,52,12,0x00);
	showbignum(3,64,minite/10,0x00);
	showbignum(3,76,minite%10,0x00);
	//////////////////////////////
	shownumber(6,32,0,0x00);
	shownumber(6,40,6,0x00);
	shownumber(6,48,10,0x00);
	shownumber(6,56,0,0x00);
	shownumber(6,64,9,0x00);
	shownumber(6,72,10,0x00);
	shownumber(6,80,2,0x00);
	shownumber(6,88,8,0x00);
	
}
void function5(void)
{
	clearscreen();
	showword(0,32,2,0xff);
	showword(0,48,3,0xff);
	showword(0,64,8,0xff);
	showword(0,76,9,0xff);
	showbignum(3,52,2,0x00);
	showbignum(3,64,8,0x00);
	showword(4,76,14,0x00);
}
void function6(void)
{
	clearscreen();
	showword(0,32,2,0xff);
	showword(0,48,3,0xff);
	showword(0,64,10,0xff);
	showword(0,76,11,0xff);
	showbignum(3,40,0,0x00);
	showbignum(3,52,7,0x00);
	showbignum(3,64,6,0x00);
	showbignum(3,76,0,0x00);
	showword(4,88,13,0x00);
}
void function7(void)
{
	clearscreen();
	showword(4,0,4,0x00);
	showword(4,16,5,0x00);
	showword(4,32,15,0x00);
	showword(4,48,16,0x00);
	showword(6,0,4,0x000);
	showword(6,16,5,0x00);
	showword(6,32,17,0x00);
	showword(6,48,9,0x00);
}
void function8(void)
{
	clearscreen();
	showword(0,32,4,0xff);
	showword(0,48,5,0xff);
	showword(0,64,15,0xff);
	showword(0,80,16,0xff);
	showbignum(3,44,0,0x00);
	shownumber(4,52,12,0x00);
	showbignum(3,64,0,0x00);
	showbignum(3,76,0,0x00);
}
void function9(void)
{
	clearscreen();
	showword(0,32,4,0xff);
	showword(0,48,5,0xff);
	showword(0,64,17,0xff);
	showword(0,76,9,0xff);
	showbignum(3,44,2,0x00);
	shownumber(4,56,12,0x00);
	showbignum(3,64,9,0x00);
	showbignum(3,76,9,0x00);
}
char keyscan(void)
{
   char key1,key2;
	key1=PORTA;
	key1=key1&0x0f;
   if(key1!=0x00&&keyflag==0)
   {
      delay(1000);
      key2=PORTA;
      key2=key2&0x0f;
      if(key1==key2&&keystore==0x00)
      {
         keyflag=1;
         keystore=key1;
         return(key1);
      }
      else
      {
         PORTA=0x00;
         return(0x00);
      }
   }

      if(key1==0x00)
      {
         keyflag=0;
         keystore=0x00;
         return(0x00);
      }
}
main()
{
	char key;
	initial();
	delay(500);
	showface();
	p=function6;
	while(1)
	{	
	 	key=keyscan();	
		if(key!=0x00)
		{
			switch(key)
			{
				case 0x01:
				(*p)();
				break;
				case 0x02:
				function2();
				break;
				case 0x04:
				function3();
				break;
				case 0x08:
				function4();
				break;
				default:
				break;
			}
		}
		asm("clrwdt");
	}
}

⌨️ 快捷键说明

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