📄 12864perfect.c
字号:
#include <reg52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar code Photo1[] ={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0x00,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0xFF,0x1C,0x7C,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0xE3,0x9C,0x7C,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0xC7,0x9E,0xFC,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0F,0x07,0x9E,0xF9,0xF3,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0x67,0x9C,0x59,0xE1,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3C,0xF3,0xC0,0x1B,0xE0,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x79,0xF0,0xFF,0xFB,0xE3,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,
0x00,0xF1,0xF3,0xFF,0xFF,0x67,0xBC,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,
0x01,0xE3,0xCF,0xE0,0x1F,0xDF,0x9E,0x00,0x00,0x01,0xE0,0x00,0x00,0x1F,0xF0,0x00,
0x01,0xD1,0xDF,0x80,0x07,0xE2,0x0E,0x00,0x00,0x01,0xE0,0x00,0x00,0x1F,0xF0,0x00,
0x03,0xF8,0x3E,0x00,0x01,0xF2,0x07,0x00,0x00,0x01,0xE0,0x80,0x00,0x0F,0xF0,0x00,
0x03,0xFE,0x78,0x00,0xC0,0x79,0xF7,0x00,0x00,0x01,0xE3,0xE0,0x00,0x07,0xC0,0x00,
0x07,0x3E,0xF0,0x00,0xE0,0x3D,0xFF,0x80,0x00,0x01,0xE7,0xE0,0x00,0x07,0x80,0x00,
0x07,0x3D,0xE0,0x00,0xF0,0xFE,0x7B,0x80,0x00,0x03,0xE7,0xE0,0x02,0x07,0x80,0x00,
0x0E,0x3F,0xC0,0x71,0xF9,0xEF,0xF9,0xC0,0x00,0x03,0xE7,0xC0,0x07,0x07,0xFF,0xC0,
0x0E,0x3F,0x80,0x7D,0xFF,0xE7,0xE1,0xC0,0x00,0x03,0xE7,0x80,0x07,0x0F,0xFF,0xC0,
0x0C,0x03,0x80,0x7F,0xFF,0xE7,0x01,0xC0,0x00,0x03,0xF6,0x00,0x07,0x1F,0xFF,0xC0,
0x1C,0x67,0x00,0x7F,0xFF,0xE3,0x98,0xE0,0x00,0x03,0xF0,0xE0,0x0F,0xFF,0x81,0xC0,
0x1C,0x67,0x00,0xFF,0xFF,0xE3,0x88,0xE0,0x00,0x03,0xF3,0xF0,0x0F,0xFF,0x80,0x00,
0x1C,0x06,0x00,0xFF,0xFF,0xE1,0x80,0xE0,0x00,0x07,0xFF,0xF8,0x1F,0xFF,0x80,0x00,
0x19,0xEE,0x00,0x1F,0xFF,0xE1,0xDE,0xE0,0x00,0x0F,0xEF,0xF8,0x1F,0xF7,0xC0,0x00,
0x18,0xEE,0x00,0x7F,0xFF,0xE1,0xDE,0x60,0x00,0x1F,0xFF,0xF0,0x1F,0xCF,0xF0,0x00,
0x19,0xEE,0x07,0xFB,0xFF,0xE1,0xD8,0x60,0x00,0x7F,0xEF,0xE0,0x1F,0x8F,0xF0,0x00,
0x19,0x6E,0x0F,0x83,0xFF,0xC1,0xD0,0x60,0x00,0xFF,0xE7,0xC0,0x1F,0x8F,0xF0,0x00,
0x19,0xEE,0x1E,0x01,0xFF,0xC1,0xDE,0x60,0x03,0xFF,0xEF,0xC0,0x1F,0x06,0x60,0x00,
0x19,0xEE,0x3C,0x01,0xFF,0x81,0xD0,0x60,0x07,0xF7,0xEF,0xE0,0x0F,0x03,0xF0,0x00,
0x19,0x8E,0x7C,0x01,0xFF,0x01,0xDA,0x60,0x07,0xE7,0xFF,0xF0,0x00,0x0F,0xFE,0x00,
0x19,0xEE,0x78,0x01,0xFE,0x01,0xDE,0x60,0x07,0xCF,0xFE,0xFF,0x00,0xFF,0xFE,0x00,
0x1D,0xEE,0x78,0x03,0xFC,0x05,0xDE,0xE0,0x00,0x1F,0xFE,0x7F,0x01,0xE7,0xFE,0x00,
0x1D,0xE7,0x7C,0x07,0xF8,0x0F,0xBE,0xE0,0x00,0x1F,0xFC,0x7F,0x03,0xE7,0xFE,0x00,
0x1C,0xF7,0x7C,0x0F,0xE0,0x1B,0xBE,0xE0,0x00,0x3F,0xF8,0x3F,0x03,0xF7,0xFC,0x00,
0x1C,0xF7,0x7E,0x3F,0x80,0x3B,0x84,0xE0,0x00,0x7F,0xC0,0x00,0x01,0xF7,0xF8,0x00,
0x0E,0xF3,0xFF,0x78,0x00,0xF7,0x7D,0xC0,0x00,0x7B,0xC0,0x00,0x01,0xFF,0xF0,0x00,
0x0E,0xFB,0xFF,0xC0,0x07,0xEF,0x79,0xC0,0x00,0x77,0xC0,0x00,0x01,0xFF,0xE0,0x00,
0x0E,0x7D,0xFF,0xFF,0xFF,0xCE,0xF9,0xC0,0x00,0x07,0xC0,0x00,0x00,0xFF,0xE0,0x00,
0x07,0x7D,0xEF,0xFF,0xFF,0x1E,0xFB,0x80,0x00,0x07,0xC0,0x00,0x00,0xFF,0xC0,0x00,
0x07,0x6E,0xF7,0xFF,0xFC,0x3D,0xFB,0x80,0x00,0x07,0xC0,0x00,0x00,0x7B,0xFF,0x00,
0x03,0xBF,0x79,0xFF,0xE0,0x78,0xF7,0x00,0x00,0x07,0xC0,0x00,0x00,0x01,0xFF,0x00,
0x03,0xDF,0x3E,0x00,0x01,0xF3,0xEF,0x00,0x00,0x03,0xC0,0x00,0x00,0x01,0xFF,0x00,
0x01,0xCF,0x9F,0x80,0x07,0xE7,0xEE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,
0x01,0xE7,0xC7,0xF0,0x3F,0x8F,0x9E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,
0x00,0xF7,0xE1,0xFF,0xFE,0x3F,0xBC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7B,0xF8,0x7F,0xF8,0x7F,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3C,0xFB,0x00,0x01,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1E,0xF7,0xE0,0x0C,0xF9,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0F,0x07,0xEF,0xFC,0xE3,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0xC7,0xFF,0xB6,0x2F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x03,0xF2,0xFF,0xBE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0xFC,0x36,0xF8,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0x80,0x07,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x0F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
sbit IRIN = P3^2; //红外接收器数据线
/*12864 pins define*/
sbit CS=P1^0;
sbit SID=P1^1;
sbit SCLK=P1^2;
uchar IRCOM[7];
//全局变量
uchar key;
void delay0(uchar x) //x*0.14MS
{
uchar i;
while(x--)
{
for (i = 0; i<13; i++) {}
}
}
void delay(uint x)
{
uint j;
uchar i;
for(j=0;j<x;j++)
{
for(i=0;i<120;i++);
}
}
void lcd_delay(int ms)
{
while(ms--)
{
uchar i;
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
void send_command(uchar command_data)
{
uchar i;
uchar i_data,temp_data1,temp_data2;
i_data=0xf8;
//delay(10);
CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
}
void send_data(uchar command_data)
{
uchar i;
uchar i_data,temp_data1,temp_data2;
i_data=0xfa;
//delay(10); //原来是delay(10)
CS=1;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=command_data;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
}
void lcd_init()
{
uchar command_data;
delay(100);
command_data=0x30;
send_command(command_data); /*功能设置:一次送8位数据,基本指令集*/
command_data=0x04;
send_command(command_data); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
command_data=0x0c;
send_command(command_data); /*显示设定:开显示,显示光标,当前显示位反白闪动*/
command_data=0x01;
send_command(command_data); /*清DDRAM*/
command_data=0x02;
send_command(command_data); /*DDRAM地址归位*/
command_data=0x80;
send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/
}
/*********************************************************/
/* */
/* 设定显示位置 */
/* */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==1)
{X=0x80;}
else if (X==2)
{X=0x90;}
else if (X==3)
{X=0x88;}
else if (X==4)
{X=0x98;}
pos = X+Y ;
send_command(pos); //显示地址
}
/*********************************************************
* *
* 闪烁函数 *
* *
*********************************************************/
void lcdflag()
{
send_command(0x08); //睡眠模式
lcd_delay(400);
send_command(0x0c); //睡眠中醒过来了,哈哈
lcd_delay(400);
send_command(0x08);
lcd_delay(400);
send_command(0x0c);
lcd_delay(400);
send_command(0x08);
lcd_delay(400);
send_command(0x0c);
lcd_delay(5);
send_command(0x01);
lcd_delay(5);
}
/*********************************************************
* *
* 图形显示 *
* *
*********************************************************/
void photodisplay(uchar *bmp)
{
uchar i,j;
send_command(0x34); //写数据时,关闭图形显示
for(i=0;i<32;i++)
{
send_command(0x80+i); //先写入水平坐标值
send_command(0x80); //写入垂直坐标值
for(j=0;j<16;j++) //再写入两个8位元的数据
send_data(*bmp++);
// delay(1);
}
for(i=0;i<32;i++)
{
send_command(0x80+i);
send_command(0x88);
for(j=0;j<16;j++)
send_data(*bmp++);
// delay(1);
}
send_command(0x36); //写完数据,开图形显示
}
/*********************************************************/
//红外发射
/*************************************/
void IR_IN() interrupt 0 using 0
{
uchar i,j,k,N=0;
uchar number;
EX0 = 0;
delay0(15);
if (IRIN==1)
{ EX0 =1;
return;
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delay0(1);}
for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN); //等IR变为低电平,跳过4.5ms的前导高电平信号。
while (!IRIN); //等IR变为高电平
while (IRIN) //计算IR高电平时长
{
delay0(1);
N++;
if (N>=30)
{ EX0=1;
return;} //0.14ms计数过长自动离开。
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”
N=0;
}//end for k
}//end for j
if (IRCOM[2]!=~IRCOM[3])
{ EX0=1;
return; }
switch(IRCOM[2])
{case 0x10:number=1;break;
case 0x03:number=2;break;
case 0x01:number=3;break;
case 0x06:number=4;break;
case 0x09:number=5;break;
case 0x1D:number=6;break;
case 0x1F:number=7;break;
case 0x0D:number=8;break;
case 0x19:number=9;break;
case 0x1B:number=0;break;
// case 0x11:next++;if(next==3) next=0;number=0;break;
// case 0x15:queren++;break;
// case 0x17:gg++;if(gg==4) gg=0;break;
// case 0x1c:c1++;if(c1==10) c1=0;break;
// case 0x14:c2++;if(c2==10) c2=0;break;
// case 0x0f:c3++;if(c3==10) c3=0;break;
default:break;
}
key=number;
lcd_pos(2,4);
send_data(0x30+key);
EX0 = 1;
}
main()
{
uchar command_data;
uchar i;
EA=1;
EX0=1;
IT0=1;
IRIN=1; //I/O口初始化
//上电,等待稳定
lcd_init();
send_command(0x01);
photodisplay(Photo1); //显示图片1
//lcdflag();
//send_command(0x80);
//send_data(0xa1);
//send_data(0xf8);
//delay(1000);
//send_command(0x80);
// send_command(0x00);
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -