📄 mt8870.c
字号:
case 0: WriteDataLCM(0x4F); TEL=TEL*10+Number ; break;
}
} //算出完整来电号码
}
//===========拨号显示=============================================
void Signal_BoHao_Start()
{
switch (Number) //判断电话号码
{
case 1: WriteDataLCM(0x31); k++; break;
case 2: WriteDataLCM(0x32); k++; break;
case 3: WriteDataLCM(0x33); k++; break;
case 4: WriteDataLCM(0x34); k++; break;
case 5: WriteDataLCM(0x35); k++; break;
case 6: WriteDataLCM(0x36); k++; break;
case 7: WriteDataLCM(0x37); k++; break;
case 8: WriteDataLCM(0x38); k++; break;
case 9: WriteDataLCM(0x39); k++; break;
case 0: WriteDataLCM(0x30); k++; break;
case 11: WriteDataLCM(0x2A); k++; break; //*
case 12: WriteDataLCM(0x23); k++; break; //#
}
}
//结束读取完整来电号码=============================================
void Signal_CID_END()
{
Receiving=0 ; //
Receiving2=0;
WriteCommandLCM(0x0C,1); // 显示开及光标设置,0x0C关光标,0x0D开光标,0x0E光标不闪
//------------以下刷屏----------------------------------
Display_XY(0,0); Display("来电:");
Display_XY(0,1); Display("单位: ");
Display_XY(8,0); Display("姓名: ");
Display_XY(8,1); Display("备注: ");
Display_XY(3,1); //显示信息光标初始定位
//------------以上刷屏----------------------------------
//----------------------------------------------------------------------
//======以下判断电话号码=================================================
//----------------------------------------------------------------------
switch ( TEL )
{
case 12345: //如果来电是该号码,此行用于测试
Display( "某个单位" ); //显示单位
Display_XY(11,0); Display( "张三" ); //显示姓名
Display_XY(11,1); Display( "VIP" ); //显示备注
break;
case 136123456: //如果来电是该号码,此行用于测试
Display( "某个单位" ); //显示单位
Display_XY(11,0); Display( "某名字" ); //显示姓名
Display_XY(11,1); Display( "VIP" ); //显示备注
break;
//----------------------------------------------------------------------
//========以上是电话簿,可不断添加,电话号码长度在11位或以下=======
//----------------------------------------------------------------------
default: //--------- 如果没有查到号码----------------------------
Record=0;
Display_XY(3,1); Display( "┌───┐" ); //第四行
Display_XY(11,0);Display( "│无记录┃" ); //第三行
Display_XY(11,1); Display( "└━━━┛" ); //第四行
break;
}
//---------判断是否有记录---------------------------------------------
if (Record ==0 ) //号码1
{ Record2 = 0; Record =1;}
else if (Record ==1 )
{ Record2 = 1;}
//--------------------------------------------------------------
TEL = 0; //号码清零
}
//将DTMF音频转换成号码数值=======================
void Signal_Read()
{
while(STD==1)
{ } //等待STD的下降延开始读取DTMF解码
Delay(260); //消抖
Bell=1; //关蜂鸣器
_nop_();
if (b4==0 && b3==0 && b2==0 && b1==1) //号码1
{ Number = 1; }
else if (b4==0 && b3==0 && b2==1 && b1==0) //号码2
{ Number = 2; }
else if (b4==0 && b3==0 && b2==1 && b1==1) //号码3
{ Number = 3; }
else if (b4==0 && b3==1 && b2==0 && b1==0) //号码4
{ Number = 4; }
else if (b4==0 && b3==1 && b2==0 && b1==1) //号码5
{ Number = 5; }
else if (b4==0 && b3==1 && b2==1 && b1==0) //号码6
{ Number = 6; }
else if (b4==0 && b3==1 && b2==1 && b1==1) //号码7
{ Number = 7; }
else if (b4==1 && b3==0 && b2==0 && b1==0) //号码8
{ Number = 8; }
else if (b4==1 && b3==0 && b2==0 && b1==1) //号码9
{ Number = 9; }
else if (b4==1 && b3==0 && b2==1 && b1==0) //号码0
{ Number = 0; }
else if (b4==1 && b3==0 && b2==1 && b1==1) //号码*
{ Number = 11;}
else if (b4==1 && b3==1 && b2==0 && b1==0) //号码#
{ Number = 12;}
else if (b4==0 && b3==0 && b2==0 && b1==0) //号码D
{ Number = 13;}
else if (b4==1 && b3==1 && b2==1 && b1==1) //号码C
{ Number = 14;}
}
//LCM初始化================================================================
void LCMInit(void)
{
LCM_Data = 0;
WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
Delay(1000);
WriteCommandLCM(0x38,0);
Delay(1000);
WriteCommandLCM(0x38,0);
Delay(1000);
WriteCommandLCM(0x38,1); //基本指令集0x38,扩充指令0x34,开始要求每次检测忙信号
WriteCommandLCM(0x08,1); //关闭显示
WriteCommandLCM(0x01,1); //显示清屏
WriteCommandLCM(0x06,1); // 显示光标移动设置,0x06 AC值自动加1,
WriteCommandLCM(0x0D,1); // 显示开及光标设置,0x0C关光标,0x0D开光标,0x0E光标不闪
}
//写指令==============================================================
void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
{
if (BuysC) ReadStatusLCM(); //根据需要检测忙
LCM_Data = WCLCM;
LCM_RS = 0;
LCM_RW = 0;
LCM_EN = 0;
LCM_EN = 0;
LCM_EN = 1;
}
//读状态=======================================================
unsigned char ReadStatusLCM(void)
{
LCM_Data = 0xFF;
LCM_RS = 0;
LCM_RW = 1;
LCM_EN = 0;
LCM_EN = 0;
LCM_EN = 1;
while (LCM_Data & Busy); //检测忙信号
return(LCM_Data);
}
//定位光标位置=============================
void Display_XY(unsigned char X, unsigned char Y)
{
WriteCommandLCM(0x06,1);//bug
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x10; //当要显示第二行时地址码+0x10;
X |= 0x80; //算出指令码
WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
}
//写数据=======================================================
void WriteDataLCM(unsigned char WDLCM)
{
ReadStatusLCM(); //检测忙
LCM_Data = WDLCM;
LCM_Data = WDLCM;
LCM_RS = 1;
LCM_RW = 0;
LCM_EN = 0; //若晶振速度太高可以在这后加小的延时
LCM_EN = 0;
LCM_EN = 0;
LCM_EN = 0;
LCM_EN = 1;
}
//显示字符串================================================
void Display(unsigned char code *DData)
{
// ReadStatusLCM(); //检测忙
// WriteDataLCM( DData[0]);
unsigned char ListLength;
ListLength = 0;
while (DData[ListLength]>0x1F) //若到达字串尾则退出
{
ReadStatusLCM(); //检测忙
WriteDataLCM( DData[ListLength]); //显示单个字符
ListLength++;
}
}
//延时秒==============================
void Delay_S(unsigned char delay1)
{
unsigned int delay2=65530;
while(delay1--)
{
while(delay2--);
}
}
//延时0~65535=======================
void Delay(unsigned int delay)
{
while(delay--);
}
//===============END=====================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -