📄 lcd 带字库编程.txt
字号:
bzdzdy2=bzdzdy;
}
bzdzdy2=(bzdzdy2/200);
P1OUT&=~BIT4;
}
P4OUT|=BIT7;
P5OUT|=BIT3; //使被测电阻接入放大器,标准电阻断开*/
jisuangxianshihanshu(); //计算显示函数
yiceliangbiaozhi=1;
}
void jisuangxianshihanshu() //计算显示函数
{
//long n=0,m=0,b=0;
/*将被测电阻的电压值从16进制转化成10进制*/
//dianzuzhizhuanhuan(bcdzdy,beicedianzuzhi_10);
/*将标准电阻的电压值从16进制转化成10进制*/
//dianzuzhizhuanhuan(bzdzdy,biaozhundianzu_10);
switch(beishubiaozhi)
{
case 0: P1OUT|=BIT4;
case 1: P1OUT|=BIT5;
case 2: P3OUT|=BIT0;
case 3: P4OUT|=BIT4;
case 4: P4OUT|=BIT5;
case 5: P4OUT|=BIT6;
default:break;
}
WriteCom(0x01); //清除液晶屏
Char_Set_XY (2, 0, "测试结果"); //发送字符到夜晶屏
Char_Set_XY (1, 1, "测试电流"); //发送字符到夜晶屏
shicedianliuxianshihanshu(); //实测电流显示函数,将对应的选择电流值显示在液晶屏上
Char_Set_XY (10, 0, "电阻值: "); //发送字符到夜晶屏
while((P5IN&BIT6)!=0) //确认键没有按下
{
msec(1000);
//if(bcdzdy!=bcdzdy1)
// {
// bcdzdy1=bcdzdy;
//shicebeicedianzuzhi=(bcdzdy1/(bzdzdy2*4)); //实测被测电阻值的计算 0.05*被测电阻电压/标准电阻电压
shicebeicedianzuzhi=(((bcdzdy/4095)*5)/2);
switch(zidongceshidianliubiaozhi) //判断自动测试电流变量的值
{
case 0: shicebeicedianzuzhi=(shicebeicedianzuzhi/5); break;
case 1: shicebeicedianzuzhi=((shicebeicedianzuzhi*132)/100); break;
case 2: shicebeicedianzuzhi=((shicebeicedianzuzhi*132)/10); break;
case 3: shicebeicedianzuzhi=(shicebeicedianzuzhi*116.3); break;
default: break;
}
switch(beishubiaozhi)
{
case 0: shicebeicedianzuzhi=(shicebeicedianzuzhi/200); break;
case 1: shicebeicedianzuzhi=(shicebeicedianzuzhi/100); break;
case 2: shicebeicedianzuzhi=(shicebeicedianzuzhi/50); break;
case 3: shicebeicedianzuzhi=(shicebeicedianzuzhi/25); break;
case 4: shicebeicedianzuzhi=((shicebeicedianzuzhi/25)*2); break;
case 5: shicebeicedianzuzhi=(shicebeicedianzuzhi/6); break;
default:break;
}
shicedianzuzhengshu=shicebeicedianzuzhi; //取实测被测电阻值的整数部分
shicedianzuxiaoshu=(shicebeicedianzuzhi-shicedianzuzhengshu)*1000; //取实测被测电阻值的小数部分 保留三位小数
baiweishujuxianshihanshu(8,1,shicedianzuzhengshu);//将实测电阻值的整数部分百位显示在液晶屏上对应的位置上
shiweishujuxianshihanshu(9,1,shicedianzuzhengshu);//将实测电阻值的整数部分十位显示在液晶屏上对应的位置上
geweishujuxianshihanshu(10,1,shicedianzuzhengshu); //将实测电阻值的整数部分个位显示在液晶屏上对应的位置上
Char_Set_XY (11, 1, "."); //显示字符
baiweishujuxianshihanshu(12,1,shicedianzuxiaoshu); //将实测电阻值的小数部分第1位显示在液晶屏上对应的位置上
shiweishujuxianshihanshu(13,1,shicedianzuxiaoshu);//将实测电阻值的小数部分第2位显示在液晶屏上对应的位置上
geweishujuxianshihanshu(14,1,shicedianzuxiaoshu); //将实测电阻值的小数部分第3位显示在液晶屏上对应的位置上
Char_Set_XY (15, 1, "Ω");
// }
}
while((P5IN&BIT6)==0); //确认键没有释放
caozuoyemian=1; //返回操作页面
chucijinruyemian=1; //将初次进入页面标志置1
caozuogongnengbiaozhi=7; //清操作功能选择标志
switch(beishubiaozhi)
{
case 0: P1OUT&=~BIT4;
case 1: P1OUT&=~BIT5;
case 2: P3OUT&=~BIT0;
case 3: P4OUT&=~BIT4;
case 4: P4OUT&=~BIT5;
case 5: P4OUT&=~BIT6;
default:break;
}
}
void shicedianliuxianshihanshu() //实测电流显示显示函数,将对应的选择电流值显示在液晶屏上
{
switch(zidongceshidianliubiaozhi) //判断自动测试电流变量的值
{
case 0: Char_Set_XY (5, 1, ":5A "); break;
case 1: Char_Set_XY (5, 1, ":1A "); break;
case 2: Char_Set_XY (5, 1, ":100mA"); break;
case 3: Char_Set_XY (5, 1, ":10mA "); break;
default: break;
}
}
/*
uint dianzuzhizhuanhuan(uint x,uint z) //电阻值转换函数,把电阻值从16进制转换成10进制
{
uint i;
switch(x>>8) //先转换高四位
{
case 0x0000: i=0 ;break;
case 0x0001: i=1; break;
case 0x0002: i=2; break;
case 0x0003: i=3; break;
case 0x0004: i=4; break;
case 0x0005: i=5; break;
case 0x0006: i=6; break;
case 0x0007: i=7; break;
case 0x0008: i=8; break;
case 0x0009: i=9; break;
case 0x000A: i=10;break;
case 0x000B: i=11;break;
case 0x000C: i=12;break;
case 0x000D: i=13;break;
case 0x000E: i=14;break;
case 0x000F: i=15;break;
default: break;
}
z=i*256;
switch((x&0x00f0)>>4) //转换中四位
{
case 0x0000: i=0 ;break;
case 0x0001: i=1; break;
case 0x0002: i=2; break;
case 0x0003: i=3; break;
case 0x0004: i=4; break;
case 0x0005: i=5; break;
case 0x0006: i=6; break;
case 0x0007: i=7; break;
case 0x0008: i=8; break;
case 0x0009: i=9; break;
case 0x000A: i=10;break;
case 0x000B: i=11;break;
case 0x000C: i=12;break;
case 0x000D: i=13;break;
case 0x000E: i=14;break;
case 0x000F: i=15;break;
default: break;
}
z=z+i*16;
switch(x&0x000f) //转换低四位
{
case 0x0000: i=0 ;break;
case 0x0001: i=1; break;
case 0x0002: i=2; break;
case 0x0003: i=3; break;
case 0x0004: i=4; break;
case 0x0005: i=5; break;
case 0x0006: i=6; break;
case 0x0007: i=7; break;
case 0x0008: i=8; break;
case 0x0009: i=9; break;
case 0x000A: i=10;break;
case 0x000B: i=11;break;
case 0x000C: i=12;break;
case 0x000D: i=13;break;
case 0x000E: i=14;break;
case 0x000F: i=15;break;
default: break;
}
z=z+i; //转换单个元素的10进制的值
return z;
}
*/
void shoudongceshihanshu() // 手动测试函数
{
WriteCom(0x01); //清除液晶屏
Char_Set_XY (1, 0, "正在手动测试"); //发送正在自动测试中字符
Char_Set_XY (1, 1, "测试电流"); //发送字符到夜晶屏
switch(dianliuxuanzebiaozhi) //判断电流选择标志的值
{
case 0: Char_Set_XY (5, 1, ":5A "); break;
case 1: Char_Set_XY (5, 1, ":1A "); break;
case 2: Char_Set_XY (5, 1, ":100mA"); break;
case 3: Char_Set_XY (5, 1, ":10mA"); break;
default: break;
}
Char_Set_XY (9, 1, "请等待。。。 "); //发送 请等待。。。 字符
switch(dianliuxuanzebiaozhi) //判断电流选择标志的值
{
case 0: shoudong_5A(); break;
case 1: shoudong_1A(); break;
case 2: shoudong_100mA(); break;
case 3: shoudong_10mA(); break;
default: break;
}
//zidongceshidianliubiaozhi=dianliuxuanzebiaozhi;//电流选择标志赋于自动测试电流标志,以便存入EEPROM
}
void shoudong_5A() //手动5A测试函数
{
beishubiaozhi=7; //倍数标志置7
bcdzdy1=1000; //暂时测量数1赋初值
bzdzdy2=2; ////暂时测量数2赋初值 为了使这两个数组的初值不相等
P4OUT|=BIT3; //打开10A电流开关
P4OUT|=BIT0; //关闭10mA电流开关
zidongceshidianliubiaozhi=0; //为在能显示对应的电流值
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_1(); //超范围
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>0x189) //大于48mΩ
chaofanweihanshu_1(); //超范围
P4OUT&=~BIT0; //打开10mA电流开关
P4OUT&=~BIT3; //关闭5A电流开关
}
void shoudong_1A() //手动1A测试函数
{
beishubiaozhi=7; //倍数标志置7
bcdzdy1=1000; //暂时测量数1赋初值
bzdzdy2=2; ////暂时测量数2赋初值 为了使这两个数组的初值不相等
P4OUT|=BIT2; //打开1A电流开关
P4OUT|=BIT0; //关闭10mA电流开关
zidongceshidianliubiaozhi=1; //为在能显示对应的电流值
P4OUT|=BIT7;
P5OUT|=BIT3; //使w1 b1接入网络,被侧电阻接入放大器
msec(10000);
while(((bcdzdy-bcdzdy1)>0x3c)||((bcdzdy1-bcdzdy)>0x3c))
{
msec(1000);
bcdzdy1=bcdzdy;
}
if(bcdzdy1<0x69)
chaofanweihanshu_1(); //超范围
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>0xf5c) //大于2.4Ω
chaofanweihanshu_1(); //超范围
P4OUT&=~BIT0; //打开10mA电流开关
P4OUT&=~BIT2; //关闭1A电流开关
}
void shoudong_100mA() //手动100mA测试函数
{
beishubiaozhi=7; //倍数标志置7
bcdzdy1=1000; //暂时测量数1赋初值
bzdzdy2=2; ////暂时测量数2赋初值 为了使这两个数组的初值不相等
P4OUT|=BIT1; //打开100mA电流开关
P4OUT|=BIT0; //关闭10mA电流开关
zidongceshidianliubiaozhi=2; //为在能显示对应的电流值
P4OUT|=BIT7;
P5OUT|=BIT3; //使w1 b1接入网络,被侧电阻接入放大器
msec(10000);
while(((bcdzdy-bcdzdy1)>0x20)||((bcdzdy1-bcdzdy)>0x20))
{
msec(1000);
bcdzdy1=bcdzdy;
}
if(bcdzdy1<0x189)
chaofanweihanshu_1(); //超范围
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>0xf5c) //大于2.4Ω
chaofanweihanshu_1(); //超范围
P4OUT&=~BIT0; //打开10mA电流开关
P4OUT&=~BIT1; //关闭1A电流开关
}
void shoudong_10mA() //手动10mA测试函数
{
beishubiaozhi=7; //倍数标志置7
bcdzdy1=1000; //暂时测量数1赋初值
bzdzdy2=2; ////暂时测量数2赋初值 为了使这两个数组的初值不相等
//P4OUT|=BIT0; //关闭1A电流开关
zidongceshidianliubiaozhi=3; //为在能显示对应的电流值
P4OUT|=BIT7;
P5OUT|=BIT3; //使w1 b1接入网络,被侧电阻接入放大器
msec(10000);
while(((bcdzdy-bcdzdy1)>0x20)||((bcdzdy1-bcdzdy)>0x20))
{
msec(1000);
bcdzdy1=bcdzdy;
}
if(bcdzdy1<0x189)
chaofanweihanshu_1(); //超范围
if(bcdzdy1>0x189&&bcdzdy1<=0x28f) //24Ω~40Ω
{
//P4OUT|=BIT6; //打开6倍
// beishubiaozhi=5; //倍数标志置5
celiangbiaozhundianzu();
}
else P4OUT&=~BIT6; //关闭6倍
if(bcdzdy1>0x28f&&bcdzdy1<=0xd28) //40Ω~200Ω
{
celiangbiaozhundianzu();
}
if(bcdzdy1>0xd28) //大于2.4Ω
chaofanweihanshu_1(); //超范围
//P4OUT&=~BIT0; //打开10mA电流开关
}
void chaofanweihanshu_1() //手动超范围函数
{
WriteCom(0x01); //清除液晶屏
Char_Set_XY (2, 0, "对不起!"); //显示字符
Char_Set_XY (8, 0, "电阻不在测量量程"); //显示字符
Char_Set_XY (9, 1, "按确认键返回 "); //显示字符
while((P5IN&BIT6)!=0); //确认键没有按下
while((P5IN&BIT6)==0); //确认键没有释放
caozuoyemian=1; //返回操作页面
chucijinruyemian=1; //将初次进入页面标志置1
caozuogongnengbiaozhi=7; //清操作功能选择标志
}
///////////////////////////////////时钟函数/////////////////////////////////////////////
void shizhong() //时钟函数
{
}
///////////////////////////////////EEPROM存储函数/////////////////////////////////////////////
void epromcunchu() //EEPROM存储函数 数据只存放在双数页地址中,可存储256组数据
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -