📄 ks0108.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 + -