⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 108.lst

📁 PIC16F876单片机,有4到20MA电流输出,低功耗等特点,使用于工业仪表行业
💻 LST
📖 第 1 页 / 共 4 页
字号:
   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 + -