📄 hong_jie.c
字号:
#include"reg51.h"
#include"intrins.h"
//
#define uchar unsigned char
#define uint unsigned int
#define disout P1 //显示输出
//
//
uchar IRCOM[7];
uchar key;
uchar kk,temp;//矩阵按键
uint i,n;
uint s=1;
//
/////////////////////////////
//////////////////////////////
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 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); //写完数据,开图形显示
}
/*****************1ms延时程序****************/
delay1ms(uint t)
{
for(i=0;i<t;i++)
for(n=0;n<120;n++)
;
}
//
/************100us延时程序********************/
delay_jingque(uint m)
{
TMOD=0x22;
TR0=1;
while(m!=0)
{
TH0=0x9b;
TL0=0x9b;
while(TF0!=1);
TF0=0;
m--;
}
TR0=0;
}
//
/*****************初始化函数******************/
/********************主函数**************************/
/*main()
{
IE = 0x81; //允许总中断中断,使能 INT0 外部中断
TCON = 0x01; //触发方式为脉冲负边沿触发
clearmen();
while(1);
} */
/****************外部中断0中断服务程序*********************/
void IR_IN() interrupt 0 using 0
{
unsigned char j,k,N=0;
EX0 = 0;
delay_jingque(15);
if (IRIN==1)
{
EX0 =1;
return;
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delay_jingque(1);}
for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{delay_jingque(1);}
while (!IRIN) //等 IR 变为高电平
{delay_jingque(1);}
while (IRIN) //计算IR高电平时长
{
delay_jingque(1);
N++;
if (N>=28)
{
EX0=1;
return;
} //0.1ms计数过长自动离开(超过2.8ms)。
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
if (N>=12) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”
N=0; //1.2ms~2.8ms算作"1"
}//end for k
}//end for j
if (IRCOM[2]!=~IRCOM[3])
{
EX0=1;
return;
}
IRCOM[5]=IRCOM[2] & 0x0F; //取键码的低四位
IRCOM[6]=IRCOM[2] >> 4; //右移4次,高四位变为低四位
if(IRCOM[6]==8)
{
key=IRCOM[5]+1;
} //解码后判断的键值1~16
if(IRCOM[6]==9)
{
key=IRCOM[5]+17;
} //解码后判断的键值17~32
lcd_pos(2,2);
send_data(0x30+key/10);
send_data(0x30+key%10) ;
EX0=1;
}
//矩阵按键程序
void keyscan()
{
P0=0xfe;
temp=P0;
temp&=0xf0;
if(temp!=0xf0)
{
delay(20);
switch(temp)
{
case 0xe0: kk=0;break;
case 0xd0: kk=1;break;
case 0xb0: kk=2;break;
case 0x70: kk=3;break;
}
}
P0=0xfd;
temp=P0;
temp&=0xf0;
if(temp!=0xf0)
{
delay(20);
switch(temp)
{
case 0xe0: kk=4;break;
case 0xd0: kk=5;break;
case 0xb0: kk=6;break;
case 0x70: kk=7;break;
}
}
P0=0xfb;
temp=P0;
temp&=0xf0;
if(temp!=0xf0)
{
delay(20);
switch(temp)
{
case 0xe0: kk=8;break;
case 0xd0: kk=9;break;
case 0xb0: kk=10;break;
case 0x70: kk=11;break;
}
}
P0=0xf7;
temp=P0;
temp&=0xf0;
if(temp!=0xf0)
{
delay(20);
switch(temp)
{
case 0xe0: kk=12;break;
case 0xd0: kk=13;break;
case 0xb0: kk=14;break;
case 0x70: kk=15;break;
}
}
}
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)
{
keyscan();
//lcd_pos(2,2);
// send_data(0x30+key/10);
// send_data(0x30+key%10) ;
}
}
//
//
/**********************************END************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -