i++;
}
lcd_pos(1,0); //设置显示位置为第二行的第1个字符
i = 0;
while(dis2[i] != ’\0’)
{
lcd_wdat(dis2[i]); //显示字符
i++;
}
lcd_pos(2,0); //设置显示位置为第三行的第1个字符
i = 0;
while(dis3[i] != ’\0’)
{
lcd_wdat(dis3[i]); //显示字符
i++;
}
lcd_pos(3,0); //设置显示位置为第四行的第1个字符
i = 0;
while(dis4[i] != ’\0’)
{
lcd_wdat(dis4[i]); //显示字符
i++;
}
while(1);
}
/*********************************************************/
/* */
/* INT0外部中断子程序 */
/* */
/*********************************************************/
void IR_IN() interrupt 0 using 0
{
uchar j,k,N=0;
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; }
IRDIS[0]=IRCOM[2]&0x0F; //取键码的低四位
IRDIS[1]=IRCOM[2]>>4; //取键码的高四位,右移4次,高四位变为低四位
dataconv();
lcd_pos(2,5);
lcd_wdat(IRDIS[1]); //第一位数显示
lcd_pos(2,6);
lcd_wdat(IRDIS[0]); //第二位数显示
IRDIS[0]=IRCOM[3]&0x0F; //取键码的低四位
IRDIS[1]=IRCOM[3]>>4; //取键码的高四位,右移4次,高四位变为低四位
dataconv();
lcd_pos(3,5);
lcd_wdat(IRDIS[1]); //第一位数显示
lcd_pos(3,6);
lcd_wdat(IRDIS[0]); //第二位数显示
beep();
EX0 = 1;
}
/*********************************************************/
/* */
/* 转换为ASCII码 */
上一页 [1] [2] [3] [4] 下一页
本文关键字:程序 51单片机,单片机-工控设备 - 51单片机