📄 108.lst
字号:
952: save_adr=0x01;
953: Q3INT=0;
954: Q3DEC=0;
955: Q3=0;
956: eeprom_write(save_adr,0);clrwdt();
957: eeprom_write(save_adr+1,0);clrwdt();
958: eeprom_write(save_adr+2,0);clrwdt();
959: }
960: else
961: {
962: y[0]=eeprom_read(save_adr); clrwdt();
963: y[1]=eeprom_read(1+save_adr);
964: y[2]=eeprom_read(2+save_adr); clrwdt();
965: p2=(float *)y;
966: Q3=*p2;
967: Q3INT=(ulong)Q3;
968: Q3DEC=Q3-Q3INT;
969: clrwdt();
970: }
971: }
972:
973: void Lcd_Dispay() //液晶显示器显示
974: { uchar i;
975: if(flag_set==1)
976: {Lcd_Write_Data_Q_or_P(0x00); clrwdt();}
977: else
978: {Lcd_Write_Data_Q_or_P(disp_buf[12]); clrwdt();} //显示Q1,或P
979: for(i=0;i<4;i++)
980: {Lcd_Write_Data_Contin_u(Ladr[i],disp_buf[i]); clrwdt();}
981:
982: for(i=0;i<8;i++)
983: {Lcd_Write_Data_Contin_n(Ladr[4+i],disp_buf[4+i]); clrwdt();}
984: }
985:
986: void Cumulation_to_EEPROM() //存累计流量Q3
987: {
988: p1=(uchar *)&Q3;
989: x[0]=*p1;clrwdt();
990: p1++;
991: x[1]=*p1;clrwdt();
992: p1++;
993: x[2]=*p1;clrwdt();
994:
995: if(flag_set==0)
996: {pass_time+=1;
997:
998: if(pass_time>10)
999: {
1000: pass_time=0;
1001: save_time+=1;
1002: if(save_time>57) //存57次后移一位EEPROM地址
1003: {
1004: save_time=0;
1005: save_adr+=3;
1006: if(save_adr>169)
1007: {
1008: save_adr=1;
1009: clrwdt();}
1010: eeprom_write(0,save_adr);clrwdt();
1011: }
1012: eeprom_write(save_adr,x[0]);clrwdt();
1013: eeprom_write(1+save_adr,x[1]); clrwdt();
1014: eeprom_write(2+save_adr,x[2]); clrwdt();
1015: }
1016: }
1017: }
1018:
1019: void Sum_Q_Clear() //累计流量清0
1020: {
1021: if(key_add)
1022: {flag_mid=0;
1023: Q3INT=0;
1024: Q3DEC=0;
1025: }
1026: if(Q3>=999999.99) //累计值超过10000000时清0,从头开始计数
1027: {Q3INT=0;
1028: Q3DEC=0;
1029: //Q3=0;
1030: }
1031: }
1032:
1033:
1034: void Parameter_Set() //设置仪表系数模块
1035: {uchar i;
1036:
1037: if(key_f)
1038: {n2=m2^key_f;
1039: if(n2)
1040: {
1041: no_f++;
1042: if(set2==1)
1043: {
1044: if(no_f==set1+1)
1045: {time_sr=6;}
1046: else
1047: {time_sr=0;}
1048: if(no_f>set1+1)
1049: {
1050: no_f=1;
1051: }
1052: }
1053: else
1054: {time_sr=0;
1055: if(no_f>set1)
1056: {no_f=1;}
1057: }
1058: }
1059: }
1060:
1061: m2=key_f;
1062: switch(no_f) //确定并读出某一点系数
1063: {
1064: case 1: eeadr=255;
1065: break;
1066: case 2: eeadr=243;
1067: break;
1068: case 3: eeadr=231;
1069: break;
1070: case 4: eeadr=219;
1071: break;
1072: case 5: eeadr=207;
1073: break;
1074: case 6: eeadr=195;
1075: break;
1076: case 7: eeadr=183;
1077: break;
1078: default:
1079: break;
1080: }
1081:
1082: if(no_f==set1+1)
1083: {clrwdt(); nop();
1084: for(i=0;i<6;i++)
1085: {disp_buf[i]=20; clrwdt();}
1086: for(i=0;i<6;i++)
1087: {disp_buf[6+i]=eeprom_read(183-i); clrwdt();}
1088: }
1089: else
1090: {
1091: for(i=0;i<12;i++)
1092: {disp_buf[i]=eeprom_read(eeadr-i); clrwdt();}
1093: disp_buf[9]=eeprom_read(eeadr-9)+10;nop();clrwdt();
1094: }
1095:
1096:
1097: Lcd_Write_Data_Contin_u(Ladr[12],no_f);nop();clrwdt();//表明点数
1098:
1099: if(key_sr)
1100: {n3=m3^key_sr;
1101: if(n3)
1102: {
1103: time_sr+=1; nop();clrwdt();
1104: if(time_sr>11)
1105: {
1106: if(no_f==set1+1)
1107: {time_sr=6;}
1108: else
1109: {time_sr=0;}
1110: }
1111:
1112: }
1113: }
1114: m3=key_sr;
1115: disp=disp_buf[time_sr];
1116: if(key_add)
1117: {n4=m4^key_add;
1118: if(n4)
1119: {
1120: disp_buf[time_sr]+=1; nop();clrwdt();
1121: if(no_f<set1+1)
1122: {
1123: if(time_sr==9)
1124: {if(disp_buf[time_sr]>19)
1125: disp_buf[time_sr]=10;
1126: }
1127: else
1128: {if(disp_buf[time_sr]>9)
1129: {
1130: disp_buf[time_sr]=0;//带不带小数点,可归纳为该同一表达式
1131: }
1132: }
1133: }
1134: else
1135: {if(disp_buf[time_sr]>9)
1136: {
1137: disp_buf[time_sr]=0;//带不带小数点,可归纳为该同一表达式
1138: }
1139: }
1140: }
1141: }
1142:
1143: m4=key_add;
1144:
1145:
1146:
1147: if(disp!=disp_buf[time_sr])
1148: {if(no_f<set1+1)
1149: {eeprom_write(eeadr-time_sr,disp_buf[time_sr]);nop();clrwdt();
1150:
1151: eeprom_write(eeadr-9,disp_buf[9]-10);nop();clrwdt();}
1152: else
1153: {eeprom_write(183-time_sr+6,disp_buf[time_sr]);nop();clrwdt();}
1154: }
1155:
1156: if(flag_turn) //闪烁
1157: {
1158: disp_buf[time_sr]=20;
1159: // flag_tmr1=0;
1160: }
1161: }
1162:
1163:
1164: void Eeprom_Initia()
1165: { uchar i;
1166: i=0;
1167: jc=eeprom_read(255);
1168: jm=eeprom_read(178);
1169: if(jc==0xFF)
1170: {
1171: do
1172: {
1173: eeprom_write(255-i,0);nop();clrwdt();
1174: i++;
1175: }while(jm==0xFF);
1176: }
1177: }
1178:
1179: void ccp2_out()
1180: { if(Q2>=Qfull)
1181: {gao=1023;}
1182: else
1183: { //默认值自己设定
1184: gao=1024*Q2/Qfull; clrwdt();
1185: }
1186: ff=gao;
1187: ff<<=4;
1188: cp=ff&0x30;
1189: CCP2CON=0x0C|cp;
1190:
1191: gao>>=2;
1192: CCPR2L=gao;
1193: PR2=0xFF;
1194: TRISC=0x01;
1195: T2CON=0x04;
1196: }
1197:
1198: void main(void)
1199: {
1200: TRISB=0xf0;
1201: TRISC=0x01;
1202: Eeprom_Initia();
1203: nop();
1204: Lcd_Init();
1205: Timer_Init();
1206: loop: nop();
1207: Read_Sum_flux();
1208: Read_Fre_K();
1209: nop();
1210:
1211: pass_time=0;
1212: flag_mid=0;
1213:
1214: while(1){
1215: ccp2_out();
1216: Caculate_pre();
1217:
1218: if(key_f_sr)
1219: {n1=m1^key_f_sr;
1220: if(n1)
1221: {time_f_sr+=1;
1222: flag_set^=key_f_sr;
1223: }
1224: }
1225:
1226: m1=key_f_sr;
1227: if(flag_set==1)
1228: {Parameter_Set();//设置仪表系数
1229: Lcd_Dispay();
1230: }
1231: if(time_f_sr>1)
1232: {
1233: time_f_sr=0;
1234:
1235: Lcd_Black();//黑平刷新一下
1236: goto loop;}//flag_set=0;//退出仪表系数设置有效退出
1237: // flag_tmr1=0;
1238:
1239:
1240: if(flag_tmr0)
1241: {
1242: flag_tmr0=0;
1243: ti++;
1244: Caculate();
1245: nop();
1246: nop();
1247: nop();
1248: // Q3INT=K;
1249: // Q3DEC=0;
1250: Dis_Buf();
1251: nop();
1252: Caculate_Q3();
1253:
1254: Sum_Q_Clear();
1255:
1256: Cumulation_to_EEPROM();
1257: if(flag_set==0)
1258: {
1259: nop();
1260: Lcd_Dispay();
1261: }
1262: }
1263: }
1264: }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -