📄 lcd 带字库编程.txt
字号:
caozuogongnengbiaozhi=7; //清操作功能选择标志
anjianbianliang&=0xFb;
}
if(anjianbianliang&0x08) //取消键按下操作页面
{
caozuoyemian=1;
caozuogongnengbiaozhi=7; //清操作功能选择标志
chucijinruyemian=1; //将初次进入页面标志置,以便下个页面使用
anjianbianliang&=0xF7;
}
switch(dianliuxuanzebianliang) //在电流选择变量应的地方闪烁
{
case 0: Char_Set_XY (1, 1, "5A "); break;
case 1: Char_Set_XY (5, 1, "1A "); break;
case 2: Char_Set_XY (8, 0, " 100mA"); break;
case 3: Char_Set_XY (12, 0, "10mA"); break;
default: break;
}
}
}
//////////////////////////////////显示内存数据函数//////////////////////////////////////////////
void xianshineicunshuju() // 显示内存数据函数
{
}
void baiweishujuxianshihanshu(uint x,uchar y,uint z) //变量百位在液晶屏上的显示函数
{
switch(z/100)
{
case 0: Char_Set_XY (x, y, "0"); break;
case 1: Char_Set_XY (x, y, "1"); break;
case 2: Char_Set_XY (x, y, "2"); break;
case 3: Char_Set_XY (x, y, "3"); break;
case 4: Char_Set_XY (x, y, "4"); break;
case 5: Char_Set_XY (x, y, "5"); break;
case 6: Char_Set_XY (x, y, "6"); break;
case 7: Char_Set_XY (x, y, "7"); break;
case 8: Char_Set_XY (x, y, "8"); break;
case 9: Char_Set_XY (x, y, "9"); break;
default: break;
}
}
void shiweishujuxianshihanshu(uint x,uchar y,uint z) //变量十位数据在液晶屏上的显示函数
{
switch((z%100)/10)
{
case 0: Char_Set_XY (x, y, "0"); break;
case 1: Char_Set_XY (x, y, "1"); break;
case 2: Char_Set_XY (x, y, "2"); break;
case 3: Char_Set_XY (x, y, "3"); break;
case 4: Char_Set_XY (x, y, "4"); break;
case 5: Char_Set_XY (x, y, "5"); break;
case 6: Char_Set_XY (x, y, "6"); break;
case 7: Char_Set_XY (x, y, "7"); break;
case 8: Char_Set_XY (x, y, "8"); break;
case 9: Char_Set_XY (x, y, "9"); break;
default: break;
}
}
void geweishujuxianshihanshu(uint x,uchar y,uint z) //变量个位数据在液晶屏上的显示函数
{
switch(z%10)
{
case 0: Char_Set_XY (x, y, "0"); break;
case 1: Char_Set_XY (x, y, "1"); break;
case 2: Char_Set_XY (x, y, "2"); break;
case 3: Char_Set_XY (x, y, "3"); break;
case 4: Char_Set_XY (x, y, "4"); break;
case 5: Char_Set_XY (x, y, "5"); break;
case 6: Char_Set_XY (x, y, "6"); break;
case 7: Char_Set_XY (x, y, "7"); break;
case 8: Char_Set_XY (x, y, "8"); break;
case 9: Char_Set_XY (x, y, "9"); break;
default: break;
}
}
///////////////////////////////////时钟调整函数/////////////////////////////////////////////
void shizhongtiaozheng() //时钟调整函数
{
}
///////////////////////////////////打印机函数/////////////////////////////////////////////
void dayinji() //打印机函数
{
}
////////////////////////////////测试函数(所有数据均在没有校准的情况下)////////////////////////////////////////
//////////////////100mA的继电器处于常闭的状态,要测试其它的电流应该先打开对应档位再去关掉100mA档位/////////////
void ceshi() //测试函数
{
if(caozuogongnengbiaozhi==0) //如果开始测试被选择进入函数
{
if(zhidongceshibiaozhi==1) zidongceshihanshu(); //如果选择自动测试则进入自动测试函数
else shoudongceshihanshu(); //没有选择自动测试则进入手动测试函数
caozuogongnengbiaozhi=7;
}
}
void zidongceshihanshu() //如果选择自动测试则进入自动测试函数
{
zidongceshidianliubiaozhi=3; //自动测试电流标志赋初值
chaofanweibiaozhi=0; //超范围标志复位
yiceliangbiaozhi=0; //已测量标志
WriteCom(0x01); //清除液晶屏
Char_Set_XY (1, 0, "正在自动测试"); //发送正在自动测试中字符
Char_Set_XY (1, 1, "请等待。。。 "); //发送 请等待。。。 字符
ceshidianzu10mA(); //测试电阻10mA函数,在10mA的电流下测试电阻
if(yiceliangbiaozhi==0)
ceshidianzu100mA(); //测试电阻100mA函数,在100mA的电流下测试电阻
if(yiceliangbiaozhi==0)
ceshidianzu1A(); //测试电阻1A函数,在1A的电流下测试电阻
if(yiceliangbiaozhi==0)
ceshidianzu5A(); //测试电阻10A函数,在10A的电流下测试电阻
//if(chaofanweibiaozhi==0) celiangbiaozhundianzu(); //如果没有超出范围进行标准电阻测量,并显示结果
zhidongceshibiaozhi=0; //清自动测试标志
}
void ceshidianzu5A() //测试电阻5A函数
{
if(zidongceshidianliubiaozhi==0)
{
beishubiaozhi=7; //倍数标志置7
bcdzdy1=1000; //暂时测量数1赋初值
bzdzdy2=2; //暂时测量数2赋初值 为了使这两个数组的初值不相等
P4OUT|=BIT3; //打开5A电流开关
P4OUT|=BIT0; //关闭10mA电流
P4OUT|=BIT7;
P5OUT|=BIT3; //使w1 b1接入网络,被侧电阻接入放大器
//P4OUT|=BIT6; //打开6倍
msec(10000);
while(((bcdzdy-bcdzdy1)>0x3c)||((bcdzdy1-bcdzdy)>0x3c))
{
msec(1000);
bcdzdy1=bcdzdy;
}
P4OUT&=~BIT6; //关闭6倍
if(bcdzdy1<0x08) //小于1mΩ
chaofanweihanshu(); //超范围函数,超出范围如何处理
if(bcdzdy1>=0x08&&bcdzdy1<=0x10) //1mΩ~2mΩ
{
//P1OUT|=BIT4; //打开200倍
// beishubiaozhi=0; //倍数标志置0
celiangbiaozhundianzu();
}
else P1OUT&=~BIT4; //关闭200倍
if(bcdzdy1>0x10&&bcdzdy1<=0x21) //2mΩ~4mΩ
{
//P1OUT|=BIT5; //打开100倍
//beishubiaozhi=1; //倍数标志置1
celiangbiaozhundianzu();
}
else P1OUT&=~BIT5; //关闭100倍
if(bcdzdy1>0x21&&bcdzdy1<=0x42) //4mΩ~8mΩ
{
//P3OUT|=BIT0; //打开50倍
//beishubiaozhi=2; //倍数标志置2
celiangbiaozhundianzu();
}
else P3OUT&=~BIT0; //关闭50倍
if(bcdzdy1>0x42&&bcdzdy1<=0x83) //8mΩ~16mΩ
{
//P4OUT|=BIT4; //打开25倍
//beishubiaozhi=3; //倍数标志置3
celiangbiaozhundianzu();
}
else P4OUT&=~BIT4; //关闭25倍
if(bcdzdy1>0x83&&bcdzdy1<=0x106) //16mΩ~32mΩ
{
//P4OUT|=BIT5; //打开12.5倍
// beishubiaozhi=4; //倍数标志置4
celiangbiaozhundianzu();
}
else P4OUT&=~BIT5; //关闭12.5倍
if(bcdzdy1>0x106&&bcdzdy1<=0x189) //32mΩ~48mΩ
{
//P4OUT|=BIT6; //打开6倍
//beishubiaozhi=5; //倍数标志置5
celiangbiaozhundianzu();
}
else P4OUT&=~BIT6; //关闭6倍
//if(bcdzdy1>0xc50) //大于48mΩ
// zidongceshidianliubiaozhi=1;
P4OUT&=~BIT0; //打开10mA电流开关
P4OUT&=~BIT3; //关闭5A电流开关
}
}
void ceshidianzu1A() //测试电阻1A函数,在10A的电流下测试电阻
{
if(zidongceshidianliubiaozhi==1)
{
beishubiaozhi=7; //倍数标志置7
bcdzdy1=1000; //暂时测量数1赋初值
bzdzdy2=2; ////暂时测量数2赋初值 为了使这两个数组的初值不相等
P4OUT|=BIT2; //1A电流开关
P4OUT|=BIT0; //关闭10mA电流开关
P4OUT|=BIT7;
P5OUT|=BIT3; //使w1 b1接入网络,被侧电阻接入放大器
//P1OUT&=~BIT4;
//P1OUT&=~BIT5;
//P3OUT&=~BIT0;
//P4OUT&=~BIT4;
//P4OUT&=~BIT5;
//P4OUT&=~BIT6; //关闭所有电阻,放大一倍
msec(10000);
while(((bcdzdy-bcdzdy1)>0x3c)||((bcdzdy1-bcdzdy)>0x3c))
{
msec(1000);
bcdzdy1=bcdzdy;
}
if(bcdzdy1>=0x69&&bcdzdy1<=0x127) //64mΩ~180mΩ
{
// P4OUT|=BIT5; //打开12.5倍
// beishubiaozhi=4; //倍数标志置4
celiangbiaozhundianzu();
}
else P4OUT&=~BIT5; //关闭12.5倍
if(bcdzdy1>0x127&&bcdzdy1<=0x28f) //180mΩ~400mΩ
{
//P4OUT|=BIT6; //打开6倍
//beishubiaozhi=5; //倍数标志置5
celiangbiaozhundianzu();
}
else P4OUT&=~BIT6; //关闭6倍
if(bcdzdy1>0x28f&&bcdzdy1<=0xf5c) //400mΩ~2.4Ω
{
celiangbiaozhundianzu();
}
if(bcdzdy1<0x69) //大于2.4Ω
zidongceshidianliubiaozhi=0;
P4OUT&=~BIT0; //打开10mA电流开关
P4OUT&=~BIT2; //关闭1A电流开关
}
}
void ceshidianzu100mA() //测试电阻100mA函数,在100mA的电流下测试电阻
{
if(zidongceshidianliubiaozhi==2)
{
beishubiaozhi=7; //倍数标志置7
bcdzdy1=1000; //暂时测量数1赋初值
bzdzdy2=2; ////暂时测量数2赋初值 为了使这两个数组的初值不相等
P4OUT|=BIT1; //打开100mA电流开关
P4OUT|=BIT0; //关闭10mA电流开关
P4OUT|=BIT7;
P5OUT|=BIT3; //使w1 b1接入网络,被侧电阻接入放大器
msec(10000);
while(((bcdzdy-bcdzdy1)>0x3c)||((bcdzdy1-bcdzdy)>0x3c))
{
msec(1000);
bcdzdy1=bcdzdy;
}
if(bcdzdy1>0x189&&bcdzdy1<=0x28f) //2.4Ω~4Ω
{
// P4OUT|=BIT6; //打开6倍
//beishubiaozhi=5; //倍数标志置5
celiangbiaozhundianzu();
}
else P4OUT&=~BIT6; //关闭6倍
if(bcdzdy1>0x28f&&bcdzdy1<=0xf5c) //4Ω~24Ω
{
celiangbiaozhundianzu();
}
if(bcdzdy1<0x189) //大于2.4Ω
zidongceshidianliubiaozhi=1;
P4OUT&=~BIT0; //打开10mA电流开关
P4OUT&=~BIT1; //关闭100mA电流开关
}
}
void ceshidianzu10mA() //测试电阻10mA函数,在10mA的电流下测试电阻
{
if(zidongceshidianliubiaozhi==3)
{
beishubiaozhi=7; //倍数标志置7
bcdzdy1=1000; //暂时测量数1赋初值
bzdzdy2=2; ////暂时测量数2赋初值 为了使这两个数组的初值不相等
//P4OUT|=BIT0; //关闭10mA电流开关
P4OUT|=BIT7;
P5OUT|=BIT3; //使w1 b1接入网络,被侧电阻接入放大器
msec(10000);
while(((bcdzdy-bcdzdy1)>0x3c)||((bcdzdy1-bcdzdy)>0x3c))
{
msec(1000);
bcdzdy1=bcdzdy;
}
if(bcdzdy1<0x189) //大于2.4Ω
zidongceshidianliubiaozhi=2;
if(bcdzdy1>0x189&&bcdzdy1<=0x28f) //2.4Ω~4Ω
{
//P4OUT|=BIT6; //打开6倍
// beishubiaozhi=5; //倍数标志置5
celiangbiaozhundianzu();
}
else P4OUT&=~BIT6; //关闭6倍
if(bcdzdy1>0x28f&&bcdzdy1<=0xd28) //4Ω~24Ω
{
celiangbiaozhundianzu();
}
if(bcdzdy1>0xd28) //大于2.4Ω
chaofanweihanshu();
//P4OUT&=~BIT0; //打开10mA电流开关
}
}
void chaofanweihanshu() //超范围函数,超出范围如何处理
{
WriteCom(0x01); //清除液晶屏
Char_Set_XY (2, 0, "对不起!"); //显示字符
if(zidongceshidianliubiaozhi==0)
Char_Set_XY (9, 0, "被测电阻过小"); //如果在10A的电流下测量显示过小字符
else Char_Set_XY (9, 0, "被测电阻过大"); //如果在100mA的电流下测量显示过大字符
Char_Set_XY (9, 1, "按确认键返回 "); //显示字符
chaofanweibiaozhi=1; //超范围标志置位
yiceliangbiaozhi=1; //已测量标志置1
while((P5IN&BIT6)!=0); //确认键没有按下
while((P5IN&BIT6)==0); //确认键没有释放
caozuoyemian=1; //返回操作页面
chucijinruyemian=1; //将初次进入页面标志置1
caozuogongnengbiaozhi=7; //清操作功能选择标志
}
void celiangbiaozhundianzu() //测量标准电阻函数
{/*
P4OUT&=~BIT7;
P5OUT&=~BIT3; //使标准电阻接入放大器,被测电阻断开
if(zidongceshidianliubiaozhi==0) //5A时,标准电阻电压放大2倍
{
P1OUT&=~BIT4;
P1OUT&=~BIT5;
P3OUT&=~BIT0;
P4OUT&=~BIT4;
P4OUT&=~BIT5;
P4OUT&=~BIT6; //关闭所有电阻,放大一倍
while(((bzdzdy-bzdzdy2)>0x20)||((bzdzdy2-bzdzdy)>0x20))
{
bzdzdy2=bzdzdy;
}
}
if(zidongceshidianliubiaozhi==1) //1A时,标准电阻电压放大32倍
{
P1OUT&=~BIT4;
P1OUT&=~BIT5;
P3OUT&=~BIT0;
P4OUT&=~BIT4;
P4OUT&=~BIT5;
P4OUT&=~BIT6; //关闭其它电阻,放大6倍
while(((bzdzdy-bzdzdy2)>0x20)||((bzdzdy2-bzdzdy)>0x20))
{
bzdzdy2=bzdzdy;
}
}
if(zidongceshidianliubiaozhi==2) //100mA时,标准电阻电压放大320倍
{
P1OUT&=~BIT4;
P1OUT&=~BIT5;
P3OUT&=~BIT0;
P4OUT|=BIT4;
P4OUT&=~BIT5;
P4OUT&=~BIT6; //关闭其它电阻,放大50倍
while(((bzdzdy-bzdzdy2)>0x20)||((bzdzdy2-bzdzdy)>0x20))
{
bzdzdy2=bzdzdy;
}
bzdzdy2=(bzdzdy2/25);
P4OUT&=~BIT4;
}
if(zidongceshidianliubiaozhi==3) //10mA时,标准电阻电压放大440倍
{
P1OUT|=BIT4;
P1OUT&=~BIT5;
P3OUT&=~BIT0;
P4OUT&=~BIT4;
P4OUT&=~BIT5;
P4OUT&=~BIT6; //关闭其它电阻,放大6倍
while(((bzdzdy-bzdzdy2)>0x20)||((bzdzdy2-bzdzdy)>0x20))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -