|
#include <STC12C5630AD.H>
#include <intrins.h> //51基本運(yùn)算(包括_nop_空函數(shù))
#include<math.h> //絕對(duì)值
typedef unsigned char u8;
typedef unsigned int u16;
/* Declare SFR associated with the IAP */
sfr IAP_DATA = 0xE2; //Flash data register
sfr IAP_ADDRH = 0xE3; //Flash address HIGH
sfr IAP_ADDRL = 0xE4; //Flash address LOW
sfr IAP_CMD = 0xE5; //Flash command register
sfr IAP_TRIG = 0xE6; //Flash command trigger
sfr IAP_CONTR = 0xE7; //Flash control register
/*Define ISP/IAP/EEPROM command*/
#define CMD_IDLE 0 //Stand-By
#define CMD_READ 1 //Byte-Read
#define CMD_PROGRAM 2 //Byte-Program
#define CMD_ERASE 3 //Sector-Erase
/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/
//#define ENABLE_IAP 0x80 //if SYSCLK<30MHz
//#define ENABLE_IAP 0x81 //if SYSCLK<24MHz
//#define ENABLE_IAP 0x82 //if SYSCLK<20MHz
#define ENABLE_IAP 0x83 //if SYSCLK<12MHz
//#define ENABLE_IAP 0x84 //if SYSCLK<6MHz
//#define ENABLE_IAP 0x85 //if SYSCLK<3MHz
//#define ENABLE_IAP 0x86 //if SYSCLK<2MHz
//#define ENABLE_IAP 0x87 //if SYSCLK<1MHz
//Start address for STC12C5620AD series EEPROM
#define IAP_ADDRESS 0x0400
#define FOSC 11059200L
#define BAUD 9600
#define ADC_POWER 0x80 //定義ADC電源常量
#define ADC_FLAG 0x10 //定義ADC轉(zhuǎn)換結(jié)束標(biāo)志位
#define ADC_START 0x08 //定義ADC轉(zhuǎn)換開始控制位
#define ADC_SPEEDLL 0x00 //1080個(gè)時(shí)鐘轉(zhuǎn)換一次
#define ADC_SPEEDL 0x20 //810個(gè)時(shí)鐘轉(zhuǎn)換一次
#define ADC_SPEEDH 0x40 //540個(gè)時(shí)鐘轉(zhuǎn)換一次
#define ADC_SPEEDHH 0x60 //270個(gè)時(shí)鐘轉(zhuǎn)換一次
#define ENABLE_ISP 0x82
#define Error 1
#define Ok 0
#define WaitTime 0x01
/*sfr ISP_DATA = 0xE2;
sfr ISP_ADDRH = 0xE3;
sfr ISP_ADDRL = 0xE4;
sfr ISP_CMD = 0xE5;
sfr ISP_TRIG = 0xE6;
sfr ISP_CONTR = 0xE7;
*/
u16 shu6,shu7;
u8 i1,a;
u16 i2,i3,i4;
u8 ID0,D3,D4,D5;
u8 m1,m2,n,n1,n2,shu2,shu8;
u16 temp1,LPFdata,D6,D7;
char shu1,shu3,shu4,shu5;
sbit K0=P3^5; //選擇設(shè)置 獨(dú)立的
sbit K1=P1^4; //移位調(diào)整 &設(shè)置數(shù)碼管共9腳
sbit K2=P1^2; //加鍵 &設(shè)置數(shù)碼管共6腳
sbit Y1=P1^1; //繼電器輸出1
sbit COM1=P3^2;
sbit COM2=P1^6;
sbit COM3=P1^7;
sbit COM4=P1^3;
sbit COM6=P3^3;
sbit COM7=P3^7;
sbit COM8=P1^0;
sbit COM9=P3^4;
sbit CLK=P3^0;
sbit DAT=P3^1;
u8 up,down,up0,down0,up1,down1,up2,down2;
u8 code table[]={0xbb,0x82,0xad,0x8f,
0x96,0x1f,0x3f,0x8a,0xbf,0x9f,0x00,0x39,0xb6,0xbc,0x04
}; //共陰數(shù)碼管0-F顯示不帶小數(shù)碼 ,因?yàn)槭荌C直接驅(qū)動(dòng)的
//0x39,0xb6,0xbc,0x04為C,H,P,—
u8 code table1[]={ 0Xfb,0xc2,0Xed,0xCF,0xd6,0x5f,0x7f, 0xca,
0xFF,0xdf
}; //帶小數(shù)點(diǎn)顯示
u16 code Dad[161]={
995,993,990,988,986,984,981,978,975,972,969,966,963,959,955,
951,947,943,938,933,928,923,918,912,907,901,894,888,881,874,
867,860,852,845,837,828,820,811,802,793,784,775,765,755,745,
735,724,714,703,692,682,671,662,648,637,626,614,603,592,580,
569,557,546,535,523,512,501,490,479,470,457,446,436,425,415,
405,395,385,375,365,356,347,338,329,320,311,303,295,287,278,
271,264,256,249,242,236,229,222,216,210,204,198,193,187,182,
177,172,167,162,157,153,148,144,140,136,132,128,125,121,118,
114,111,108,105,102,99,96,94,91,88,86,84,81,79,77,75,73,71,69,
67,65,63,62,60,58,57,55,54,52,51,50,48,47,46,45,44,43,42,40,39,
38}; //10位AD轉(zhuǎn)換的數(shù)值表 float
float code tem[161]={ 40,39,38,37,36,35,34,33,32,31,
30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,
14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,1,2,3,4,
5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,
26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,
49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,
72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,
95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
112,113,114,115,116,117,118,119,120} ; //測(cè)試點(diǎn)的溫度
/**********************************************
函數(shù)名:毫秒級(jí)CPU延時(shí)函數(shù)
結(jié) 果:占用CPU方式延時(shí)與參數(shù)數(shù)值相同的毫秒時(shí)間
備 注:應(yīng)用于1T單片機(jī)時(shí)i<600,應(yīng)用于12T單片機(jī)時(shí)i<125
/******************************************************************/
void delay(u8 t)
{
u16 i;
for(;t>0;t--)
for(i=110;i>0;i--);
}
/*-----Disable ISP/IAP/EEPROM function
Make MCU in a safe state
----------------------------*/
void IapIdle()
{
IAP_CONTR = 0; //Close IAP function
IAP_CMD = 0; //Clear command to standby
IAP_TRIG = 0; //Clear trigger register
IAP_ADDRH = 0x80; //Data ptr point to non-EEPROM area
IAP_ADDRL = 0; //Clear IAP address to prevent misuse
}
/*-----Read one u8 from ISP/IAP/EEPROM area
Input: addr (ISP/IAP/EEPROM address)
Output: Flash data
----------------------*/
u8 byte_read(u16 addr)
{
u8 dat; //Data buffer
IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
IAP_CMD = CMD_READ; //Set ISP/IAP/EEPROM READ command
IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low
IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high
IAP_TRIG = 0x46; //Send trigger command1 (0x46)
IAP_TRIG = 0xb9; //Send trigger command2 (0xb9)
_nop_(); //MCU will hold here until ISP/IAP/EEPROM
//operation complete
dat = IAP_DATA; //Read ISP/IAP/EEPROM data
IapIdle(); //Close ISP/IAP/EEPROM function
return dat; //Return Flash data
}
/*-----Program one u8 to ISP/IAP/EEPROM area
Input: addr (ISP/IAP/EEPROM address)
dat (ISP/IAP/EEPROM data)
Output:
-----------------------------*/
void byte_write(u16 addr, u8 dat)
{
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_PROGRAM;
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_DATA = dat; //Write ISP/IAP/EEPROM data
IAP_TRIG = 0x46;
IAP_TRIG = 0xb9;
_nop_();
IapIdle();
}
/*-----Erase one sector area
Input: addr (ISP/IAP/EEPROM address)
Output:
-----------------------------*/
void SectorErase(u16 addr)
{
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_ERASE;
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_TRIG = 0x46;
IAP_TRIG = 0xb9;
_nop_();
IapIdle();
}
void init()
{
P1M0=0x20; //0010 0000設(shè)置P15口模式,用于A/D采集
P1M1=0x20; //1000 0000設(shè)置P17口模式,用于A/D采集
ADC_CONTR=0xe0; //1110 0000開啟A/D電源,設(shè)置最高轉(zhuǎn)換速度
delay(8); //延時(shí)使電源穩(wěn)定
}
u16 readad(u8 m) //m為通道值
{
u8 AD_finished=0;
u16 result;
ADC_DATA=0;
ADC_LOW2=0;
ADC_CONTR&=0xf8;
ADC_CONTR|=m; //選擇通道
ADC_CONTR|=0x08; //啟動(dòng)AD轉(zhuǎn)換
delay(1);
while(AD_finished==0) //等待AD轉(zhuǎn)換結(jié)束
{
AD_finished=(ADC_CONTR&0x10);
}
result=ADC_DATA*4+ADC_LOW2;
ADC_CONTR&=0xf7;
return(result);
}
/****************AD數(shù)據(jù)濾波動(dòng)函數(shù)*****************/
float Ad_d(u8 channel)// 采集電壓的平均值20次
{
u8 i;
for(i=5;i>0;i--)//數(shù)據(jù)采集存儲(chǔ)
{
LPFdata=readad( channel) ;
}
return (LPFdata);
}
/**********AD轉(zhuǎn)換值轉(zhuǎn)溫度值函數(shù)**************/
void Data_temperature()
{ float b;
u8 i;
Ad_d(5);
for(i=0;i<=161;i++)
{
if((LPFdata>=Dad[i])&(LPFdata<Dad[i-1]))
{
b=tem[i]+(LPFdata-Dad[i])*((tem[i]-tem[i+1])/(Dad[i]-Dad[i+1]));
break;
}
}
temp1=b*10+shu5;//強(qiáng)制轉(zhuǎn)化為整形
}
/***************************************/
void sendcode(u8 b)//傳送負(fù)顯示PX字節(jié)函數(shù)
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[13]; //十位 ,小數(shù)點(diǎn)位
for(c=0;c<8;c++) //依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1; COM2=0;COM1=1;
delay(3);
COM4=1; COM3=1; COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1; COM2=1;COM1=0;
delay(3);
COM4=1; COM3=1; COM2=1;COM1=1;
}
}
/***************************************/
void sendcode1( u16 b)//傳送溫度顯示字節(jié)函數(shù)
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[b/1000];//千位
COM4=0; COM3=1; COM2=1;COM1=1;
for(c=0;c<8;c++)//依次傳送8位
{
CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=0; COM3=1; COM2=1;COM1=1;
delay(5);
COM4=1; COM3=1; COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%1000/100];//百位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=0; COM2=1;COM1=1;
delay(5);
COM4=1; COM3=1; COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table1[b%100/10];//十位
for(c=0;c<8;c++)//依次傳送8位
{CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1; COM2=0;COM1=1;
delay(5);
COM4=1; COM3=1;COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1; COM2=1;COM1=0;
delay(5);
COM4=1; COM3=1; COM2=1;COM1=1;
}
}
/*************顯示設(shè)置碼**************/
void sendcode2(u8 b)//傳送設(shè)置編號(hào)1顯示字節(jié)函數(shù)
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
}
COM9=1; COM8=1; COM7=1;COM6=0;
delay(3);
COM9=1; COM8=1; COM7=1;COM6=1;
}
/***************************************/
void sendcode3(u8 b)//傳送負(fù)顯示3字節(jié)函數(shù)
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[b/100];//百位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=0;COM7=1;COM6=1;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table1[b%100/10]; //十位 ,小數(shù)點(diǎn)位
for(c=0;c<8;c++) //依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=0;COM6=1;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=1;COM6=0;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
}
/***************************************/
void sendcode4(u16 b)//傳送負(fù)號(hào)顯示字節(jié)函數(shù)0~-40顯示
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[14];//千位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=0;COM7=1;COM6=1;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%100/10];//十位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=0;COM6=1;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=1;COM6=0;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
}
/*********************************/
void sendcode5(u16 d)//傳送0~120度顯示節(jié)函數(shù)
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[d%1000/100];//百位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=0;COM7=1;COM6=1;
delay(5);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[d%100/10];//十位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1;COM7=0;COM6=1;
delay(5);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[d%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=1;COM6=0;
delay(5);
COM9=1; COM8=1;COM7=1;COM6=1;
}
}
/***************************************/
void sendcode6(u8 b)//傳送負(fù)號(hào)顯示字節(jié)函數(shù)-5顯示
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[14];//十位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=0; COM7=1;COM6=1;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table1[b%100/10];//位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=0;COM6=1;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=1;COM6=0;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
}
/***************************************/
void sendcode7(u8 b)//傳送負(fù)號(hào)顯示字節(jié)函數(shù)5顯示
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table1[b%100/10];//位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=0;COM6=1;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=1;COM6=0;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
}
/***************************************/
void sendcode8(u16 b)//傳送負(fù)顯示3字節(jié)函數(shù)
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[b/100];//百位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=0;COM7=1;COM6=1;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table1[b%100/10]; //十位 ,小數(shù)點(diǎn)位
for(c=0;c<8;c++) //依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=0;COM6=1;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=1;COM6=0;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
}
/***************************************/
void sendcode9(u8 b)//傳送負(fù)顯示2字節(jié)函數(shù)
{
u8 num,c;
for(i1=0;i1<=5;i1++)
{
num=table[b%100/10]; //十位 ,小數(shù)點(diǎn)位
for(c=0;c<8;c++) //依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=0;COM6=1;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=5;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=1;COM6=0;
delay(3);
COM9=1; COM8=1;COM7=1;COM6=1;
}
}
/***************************************/
void sendcode10(u16 b)//傳送斷路,短路,超量程顯示字節(jié)函數(shù)
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[14];//千位
COM4=0; COM3=1; COM2=1;COM1=1;
for(c=0;c<8;c++)//依次傳送8位
{
CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=0; COM3=1; COM2=1;COM1=1;
delay(5);
COM4=1; COM3=1; COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[14];//百位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=0; COM2=1;COM1=1;
delay(5);
COM4=1; COM3=1; COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[14];//十位
for(c=0;c<8;c++)//依次傳送8位
{CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1; COM2=0;COM1=1;
delay(5);
COM4=1; COM3=1;COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[14];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1; COM2=1;COM1=0;
delay(5);
COM4=1; COM3=1; COM2=1;COM1=1;
}
}
/***************************************/
void sendcode11(u16 b)//傳送PV區(qū)負(fù)號(hào)顯示字節(jié)函數(shù)0~-40顯示
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[14];//百位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=0; COM3=1;COM2=1;COM1=1;
delay(5);
COM4=1; COM3=1;COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b/100];//百位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=0;COM2=1;COM1=1;
delay(5);
COM4=1; COM3=1;COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table1[b%100/10];//十位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1;COM2=0;COM1=1;
delay(5);
COM4=1; COM3=1;COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1;COM2=1;COM1=0;
delay(5);
COM4=1; COM3=1;COM2=1;COM1=1;
}
}
/***************************************/
void sendcode12(u16 b)//傳送PV區(qū)負(fù)號(hào)顯示字節(jié)函數(shù)0~9.9顯示
{
u8 num,c;
for(i1=0;i1<=4;i1++)
{
num=table1[b%100/10];//十位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1;COM2=0;COM1=1;
delay(5);
COM4=1; COM3=1;COM2=1;COM1=1;
}
for(i1=0;i1<=4;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1;COM2=1;COM1=0;
delay(5);
COM4=1; COM3=1;COM2=1;COM1=1;
}
}
/***************************************/
void sendcode13(u16 b)//傳送PV區(qū)負(fù)號(hào)顯示字節(jié)函數(shù)10.0~99.9顯示
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[b/100];//位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=0;COM2=1;COM1=1;
delay(3);
COM4=1; COM3=1;COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table1[b%100/10];//十位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1;COM2=0;COM1=1;
delay(3);
COM4=1; COM3=1;COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1;COM2=1;COM1=0;
delay(3);
COM4=1; COM3=1;COM2=1;COM1=1;
}
}
/***************************************/
void sendcode14(u8 b)//傳送負(fù)號(hào)顯示字節(jié)函數(shù)-5.0顯示
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[14];//十位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=0;COM2=1;COM1=1;
delay(3);
COM4=1; COM3=1;COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table1[b%100/10];//位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1;COM2=0;COM1=1;
delay(3);
COM4=1; COM3=1;COM2=1;COM1=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[b%10];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM4=1; COM3=1;COM2=1;COM1=0;
delay(3);
COM4=1; COM3=1;COM2=1;COM1=1;
}
}
/*********************************/
void sendcode15(u16 b) //報(bào)錯(cuò)
{
u8 num,c;
for(i1=0;i1<=2;i1++)
{
num=table[13];//位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=0; COM8=1;COM7=1;COM6=1;
delay(5);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[13];//百位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=0;COM7=1;COM6=1;
delay(5);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[13];//十位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1;COM7=0;COM6=1;
delay(5);
COM9=1; COM8=1;COM7=1;COM6=1;
}
for(i1=0;i1<=2;i1++)
{
num=table[13];//個(gè)位
for(c=0;c<8;c++)//依次傳送8位
{ CLK=0;
DAT=num&0x01;
CLK=1;
num>>=1;
}
COM9=1; COM8=1; COM7=1;COM6=0;
delay(5);
COM9=1; COM8=1;COM7=1;COM6=1;
}
}
/*****************************/
char Adjustment1(char shu1) //加減函數(shù)參數(shù)設(shè)置
{
if(K1==0) //減鍵
{
delay(5);
if(K1==0)
down1=1;}
if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減
{
down1=0;up1=1;}
if(up1==1)
{ up1=0;
shu1--;
if(shu1<0)
shu1=2;
}
if(K2==0) //加鍵
{
delay(5);
if(K2==0)
down2=1;}
if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加
{
down2=0;up2=1;}
if(up2==1)
{ up2=0;
shu1++;
if(shu1>2)
shu1=0;
}
return(shu1);//返回
}
/*****************************/
u8 Adjustment2(u8 shu2 ) //加減函數(shù)參數(shù)設(shè)置
{
if(K1==0) //減鍵
{down1=1;
delay(5);
if(K1==0)
{ if(m1==0) //中速減少
{ a++;
delay(5);//停留時(shí)間5X10
if(a==20)
{ n1++;
if(n1==5)//減少快慢
m1=1;
a=0;
shu2--;
if(shu2==0)
shu2=150;
}
}
if(m1==1) //高速減少
{ a=0;
shu2--;
delay(20);
if(shu2==0)
shu2=150;
}
}
}
if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減
{ a=0; n1=0;m1=0;
down1=0;up1=1;}
if(up1==1)
{ up1=0; shu2--;
if(shu2==0)
shu2=150;
}
if(K2==0) //加鍵
{ down2=1;
delay(5);
if(K2==0)
{ if(m2==0) //中速增加
{ a++;
delay(5); //停留時(shí)間5X10
if(a==20)
{ n2++;
if(n2==5) //增加快慢
m2=1;
a=0;
shu2++;
if(shu2>150)
shu2=0;
}
}
if(m2==1) //高速增加
{ a=0;
shu2++;
delay(20);
if(shu2>150)
shu2=0;
}
}
}
if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加
{ a=0; n2=0;m2=0;
down2=0;up2=1;}
if(up2==1)
{ up2=0;
shu2++;
if(shu2>150)
shu2=0;
}
return(shu2);//返回
}
/*****************************/
char Adjustment3(char shu3 ) //加減函數(shù)參數(shù)設(shè)置
{
if(K1==0) //減鍵
{down1=1;
delay(5);
if(K1==0)
{ if(m1==0) //中速減少
{ a++;
delay(5);//停留時(shí)間5X10
if(a==10)
{ n1++;
if(n1==5)//減少快慢
m1=1;
a=0;
shu3--;
if(shu3<-40)
shu3=120;
}
}
if(m1==1) //高速減少
{ a=0;
shu3--;
delay(20);//加的速度
if(shu3<-40)
shu3=120;
}
}
}
if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減
{ a=0; n1=0;m1=0;
down1=0;up1=1;}
if(up1==1)
{ up1=0; shu3--;
if(shu3<-40)
shu3=120;
}
if(K2==0) //加鍵
{ down2=1;
delay(5);
if(K2==0)
{ if(m2==0) //中速增加
{ a++;
delay(5); //停留時(shí)間5X10
if(a==10)
{ n2++;
if(n2==5) //增加快慢
m2=1;
a=0;
shu3++;
if(shu3>120)
shu3=-40;
}
}
if(m2==1) //高速增加
{ a=0;
shu3++;
delay(20);
if(shu3>120)
shu3=-40;
}
}
}
if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加
{ a=0; n2=0;m2=0;
down2=0;up2=1;}
if(up2==1)
{ up2=0;
shu3++;
if(shu3>120)
shu3=-40;
}
return(shu3);
}
/*****************************/
char Adjustment4(char shu4 ) //加減函數(shù)參數(shù)設(shè)置
{
if(K1==0) //減鍵
{down1=1;
delay(5);
if(K1==0)
{ if(m1==0) //中速減少
{ a++;
delay(5);//停留時(shí)間5X10
if(a==10)
{ n1++;
if(n1==5)//減少快慢
m1=1;
a=0;
shu4--;
if(shu4<-40)
shu4=120;
}
}
if(m1==1) //高速減少
{ a=0;
shu4--;
delay(20);
if(shu4<-40)
shu4=120;
}
}
}
if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減
{ a=0; n1=0;m1=0;
down1=0;up1=1;}
if(up1==1)
{ up1=0; shu4--;
if(shu4<-40)
shu4=120;
}
if(K2==0) //加鍵
{ down2=1;
delay(5);
if(K2==0)
{ if(m2==0) //中速增加
{ a++;
delay(5); //停留時(shí)間5X10
if(a==10)
{ n2++;
if(n2==5) //增加快慢
m2=1;
a=0;
shu4++;
if(shu4>120)
shu4=-40;
}
}
if(m2==1) //高速增加
{ a=0;
shu4++;
delay(20);
if(shu4>120)
shu4=-40;
}
}
}
if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加
{ a=0; n2=0;m2=0;
down2=0;up2=1;}
if(up2==1)
{ up2=0;
shu4++;
if(shu4>120)
shu4=-40;
}
return(shu4);//返回
}
/*****************************/
char Adjustment5(char shu5 ) //加減函數(shù)參數(shù)設(shè)置
{
if(K1==0) //減鍵
{down1=1;TR0=0; i2=0;
delay(5);
if(K1==0)
{ if(m1==0) //中速減少
{ a++;
delay(5);//停留時(shí)間5X10
if(a==10)
{ n1++;
if(n1==5)//減少快慢
m1=1;
a=0;
shu5--;
if(shu5<-90)
shu5=90;
}
}
if(m1==1) //高速減少
{ a=0;
shu5--;
delay(20);
if(shu5<-90)
shu5=90;
}
}
}
if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減
{ a=0; n1=0;m1=0;
down1=0;up1=1;}
if(up1==1)
{ up1=0; shu5--;
if(shu5<-90)
shu5=90;
}
if(K2==0) //加鍵
{ down2=1;TR0=0; i2=0;
delay(5);
if(K2==0)
{ if(m2==0) //中速增加
{ a++;
delay(5); //停留時(shí)間5X10
if(a==10)
{ n2++;
if(n2==5) //增加快慢
m2=1;
a=0;
shu5++;
if(shu5>90)
shu5=-90;
}
}
if(m2==1) //高速增加
{ a=0;
shu5++;
delay(20);
if(shu5>90)
shu5=-90;
}
}
}
if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加
{ a=0; n2=0;m2=0;
down2=0;up2=1;}
if(up2==1)
{ up2=0;
shu5++;
if(shu5>90)
shu5=-90;
}
return(shu5);//返回
}
/*****************************/
u16 Adjustment6(u16 shu6 ) //加減函數(shù)參數(shù)設(shè)置
{
if(K1==0) //減鍵
{down1=1;
delay(5);
if(K1==0)
{ if(m1==0) //中速減少
{ a++;
delay(5);//停留時(shí)間5X10
if(a==10)
{ n1++;
if(n1==5)//減少快慢
m1=1;
a=0;
shu6--;
if(shu6==0)
shu6=999;
}
}
if(m1==1) //高速減少
{ a=0;
shu6--;
delay(20);
if(shu6==0)
shu6=999;
}
}
}
if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減
{ a=0; n1=0;m1=0;
down1=0;up1=1;}
if(up1==1)
{ up1=0; shu6--;
if(shu6==0)
shu6=999;
}
if(K2==0) //加鍵
{ down2=1;
delay(5);
if(K2==0)
{ if(m2==0) //中速增加
{ a++;
delay(5); //停留時(shí)間5X10
if(a==10)
{ n2++;
if(n2==5) //增加快慢
m2=1;
a=0;
shu6++;
if(shu6>999)
shu6=0;
}
}
if(m2==1) //高速增加
{ a=0;
shu6++;
delay(20);
if(shu6>999)
shu6=0;
}
}
}
if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加
{ a=0; n2=0;m2=0;
down2=0;up2=1;}
if(up2==1)
{ up2=0;
shu6++;
if(shu6>999)
shu6=0;
}
return(shu6);//返回
}
/*****************************/
u16 Adjustment7(u16 shu7 ) //加減函數(shù)參數(shù)設(shè)置
{
if(K1==0) //減鍵
{down1=1;
delay(5);
if(K1==0)
{ if(m1==0) //中速減少
{ a++;
delay(5);//停留時(shí)間5X10
if(a==10)
{ n1++;
if(n1==5)//減少快慢
m1=1;
a=0;
shu7--;
if(shu7==0)
shu7=240;
}
}
if(m1==1) //高速減少
{ a=0;
shu7--;
delay(20);
if(shu7==0)
shu7=240;
}
}
}
if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減
{ a=0; n1=0;m1=0;
down1=0;up1=1;}
if(up1==1)
{ up1=0; shu7--;
if(shu7==0)
shu7=240;
}
if(K2==0) //加鍵
{ down2=1;
delay(5);
if(K2==0)
{ if(m2==0) //中速增加
{ a++;
delay(5); //停留時(shí)間5X10
if(a==10)
{ n2++;
if(n2==5) //增加快慢
m2=1;
a=0;
shu7++;
if(shu7>=240)
shu7=0;
}
}
if(m2==1) //高速增加
{ a=0;
shu7++;
delay(20);
if(shu7>=240)
shu7=0;
}
}
}
if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加
{ a=0; n2=0;m2=0;
down2=0;up2=1;}
if(up2==1)
{ up2=0;
shu7++;
if(shu7>=240)
shu7=0;
}
return(shu7);//返回
}
/*****************************/
char Adjustment8(char shu8 ) //加減函數(shù)參數(shù)設(shè)置
{
if(K1==0) //減鍵
{
delay(5);
if(K1==0)
down1=1;}
if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減
{
down1=0;up1=1;}
if(up1==1)
{ up1=0;
shu8-=10;
if(shu8<0)
shu8=40;
}
if(K2==0) //加鍵
{
delay(5);
if(K2==0)
down2=1;}
if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加
{
down2=0;up2=1;}
if(up2==1)
{ up2=0;
shu8+=10;
if(shu8>40)
shu8=0;
}
return(shu8);//返回
}
/********************************/
void clock_T0(void) interrupt 1
{
TH0=(65536-50000)/256; //10ms定時(shí)器
TL0=(65536-50000)%256;
i2++; i3++;i4++;
}
/****************************/
void timer1() interrupt 3
{
TH1=(65536-1000)/256;//60MS附值
TL1=(65536-1000)%256;
}
void main (void)
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
ET0=1;
EA=1;
TR1=1;
init();
Ad_d(5);
shu1=Adjustment1(shu1);
shu2=Adjustment2(shu2);
shu3=Adjustment3(shu3);
shu4=Adjustment4(shu4);
shu5=Adjustment5(shu5);
shu6=Adjustment6(shu6);
shu7=Adjustment7(shu7);
shu8=Adjustment8(shu8);
D3=abs(shu3);
D4=abs(shu4);
D6=abs(shu3)*10;
D7=abs(shu4)*10;
shu1= byte_read(0x2001);
shu2= byte_read(0x2002);
shu3= byte_read(0x2003);
shu4= byte_read(0x2004);
shu5= byte_read(0x2005);
shu6= byte_read(0x2006);
shu7= byte_read(0x2007);
shu8= byte_read(0x2008);
while(1)
{
if(K0==0) //單位
{
delay(5);
if(K0==0)
{
a++;
delay(2);
if(a==5)
{down0=1;a=0;}
}
}
if((K0==1)&&(down0==1))
{down0=0;up0=1; }
if(up0==1)
{up0=0;
ID0++;
if(ID0>8)
ID0=0;
}
switch(ID0)
{
case 0:
D4=abs(shu4);
D6=abs(shu3)*10;
D7=abs(shu4)*10;
TR0=0;
i4=0; i3=0; i2=0;
Data_temperature();
switch(shu1)
{
case 0: //制冷
for(n=0;n<15;n++)
{
if((LPFdata<38)|| (LPFdata>995)) //超量程顯示 或短路,斷路
{
sendcode10(temp1);
}
else if((LPFdata>784)&(LPFdata<867))// 顯示負(fù)號(hào)-10以下量程區(qū)域
{
sendcode14(temp1);
}
else if(LPFdata>=867)// 顯示負(fù)號(hào)-10以上量程區(qū)域
{
sendcode11(temp1);
}
else if ((LPFdata>682)&(LPFdata<784)) //百位不顯示
{
sendcode12(temp1);
}
else if ((LPFdata<=682) &(LPFdata>65)) //千位不顯示
{
sendcode13(temp1);
}
else
{
sendcode1(temp1);
}
if(shu3>shu4)//開始>停止溫度
{ if(shu4>=0)
{
sendcode5(D4);}
else {
sendcode4(D4);}
if(temp1>=D6)
Y1=0;
else if(temp1<=D7)
Y1=1;
}
else
{Y1=1; sendcode15(13); }
}
break;
case 1:
D4=abs(shu4);
D6=abs(shu3)*10;
D7=abs(shu4)*10;
for(n=0;n<12;n++)
{
if((LPFdata<38)|| (LPFdata>995)) //超量程顯示 或短路,斷路
{
sendcode10(temp1);
}
else if((LPFdata>784)&(LPFdata<867))// 顯示負(fù)號(hào)-10以下量程區(qū)域
{
sendcode14(temp1);
}
else if(LPFdata>=867)// 顯示負(fù)號(hào)-10以上量程區(qū)域
{
sendcode11(temp1);
}
else if ((LPFdata>682)&(LPFdata<784)) //百位不顯示
{
sendcode12(temp1);
}
else if ((LPFdata<=682) &(LPFdata>=67)) //千位不顯示
{
sendcode13(temp1);
}
else
{
sendcode1(temp1);
}
if(shu3<shu4)//開始<停止溫度
{ if(shu4>=0)
sendcode5(D4);
else
sendcode4(D4);
if(temp1<=D6)
Y1=0;
else if(temp1>=D7)
Y1=1;
}
else
{Y1=1; sendcode15(13); }
}
break;
case 2:
D4=abs(shu4);
for(n=0;n<15;n++)
{
if((LPFdata<38)|| (LPFdata>995)) //超量程顯示 或短路,斷路
{
sendcode10(14);
}
else if((LPFdata>784)&(LPFdata<867))// 顯示負(fù)號(hào)-10以下量程區(qū)域
{
sendcode14(temp1);
}
else if(LPFdata>=867)// 顯示負(fù)號(hào)-10以上量程區(qū)域
{
sendcode11(temp1);
}
else if ((LPFdata>682)&(LPFdata<784)) //百位不顯示
{
sendcode12(temp1);
}
else if ((LPFdata<=682) &(LPFdata>65)) //千位不顯示
{
sendcode13(temp1);
}
else
{
sendcode1(temp1);
}
if(shu3=shu4)//開始>停止溫度
{ if(shu4>=0)
sendcode5(D4);
else
sendcode4(D4);
Y1=1;
}
}
break;
}
break;
case 1: TR0=1;
i3++; i4=0;
if(i3==4000)
{i3=0; ID0=0; }
sendcode(ID0);//PV區(qū)顯示P1
if(shu8==30)
{shu1=Adjustment1(shu1);//PS區(qū)顯示D1的值
sendcode2(shu1);}
else sendcode2(shu1);
break;
case 2: TR0=1;
i4++; i3=0;
if(i4==4000)
{i3=0;i4=0; ID0=0; }
sendcode(ID0);
if(shu8==30)
{shu2=Adjustment2(shu2);
sendcode3(shu2);}
else sendcode3(shu2);
break;
case 3:
TR0=1;
i3++; i4=0;
if(i3==4000)
{i3=0;i4=0;ID0=0; }
sendcode(ID0);//PV區(qū)顯示P1
if(shu8==30)
{ shu3=Adjustment3(shu3);
D3=abs(shu3); //求絕對(duì)值
if(shu3>=0)
sendcode5(D3);
else
sendcode4(D3);}
else
{ D3=abs(shu3); //求絕對(duì)值
if(shu3>=0)
sendcode5(D3);
else
sendcode4(D3);}
break;
case 4: TR0=1;
i4++; i3=0;
if(i4==4000)
{i3=0;i4=0;ID0=0; }
sendcode(ID0);
if(shu8==30)
{shu4=Adjustment4(shu4);
D4=abs(shu4);
if(shu4>=0)
sendcode5(D4);
else
sendcode4(D4);}
else {D4=abs(shu4);
if(shu4>=0)
sendcode5(D4);
else
sendcode4(D4);}
break;
case 5: TR0=1;
i3++; i4=0;
if(i3==4000)
{i3=0;i4=0;ID0=0; }
sendcode(ID0);
if(shu8==30)
{
shu5=Adjustment5(shu5);
D5=abs(shu5);
if(shu5>=0)
sendcode7(D5);
else
sendcode6(D5);}
else {D5=abs(shu5);
if(shu5>=0)
sendcode7(D5);
else
sendcode6(D5);}
break;
case 6: TR0=1;
i4++; i3=0;
if(i4==4000)
{i3=0;i4=0;ID0=0; }
sendcode(ID0);
if(shu8==30)
{
shu6=Adjustment6(shu6);
if(shu6<=99)
sendcode7(shu6);
else
sendcode8(shu6);}
else
{ if(shu6<=99)
sendcode7(shu6);
else
sendcode8(shu6);}
break;
case 7:
TR0=1;
i3++; i4=0;
if(i3==4000)
{i3=0;i4=0;ID0=0; }
sendcode(ID0);
if(shu8==30)
{
shu7=Adjustment7(shu7);
if(shu7<=99)
sendcode7(shu7);
else
sendcode8(shu7);}
else
{ if(shu7<=99)
sendcode7(shu7);
else
sendcode8(shu7);}
break;
case 8:
TR0=1; i2++; i4++; i3=0;
shu8=Adjustment8(shu8);
for(n=0;n<50;n++)
{ sendcode(ID0);
delay(2);
shu8=Adjustment8(shu8);
sendcode9(shu8);
delay(2);
if(K0==0) //單位
{
delay(5);
if(K0==0)
{
a++;
delay(2);
if(a==5)
{down0=1;a=0;}
}
}
if((K0==1)&&(down0==1))
{down0=0;up0=1; }
if(up0==1)
{up0=0;
ID0++;
if(ID0>8)
ID0=0;
}
}
if(i4==2000)
{i3=0;i4=0;ID0=0; i2=0;}
SectorErase(0x2000);
SectorErase(0x2001);
SectorErase(0x2002);
#include <STC12C5630AD.H>#include <intrins.h> //51基本運(yùn)算(包括_nop_空函數(shù))#include<math.h> //絕對(duì)值typedef unsigned char u8;typedef unsigned int u16;/* Declare SFR associated with the IAP */sfr IAP_DATA = 0xE2; //Flash data registersfr IAP_ADDRH = 0xE3; //Flash address HIGHsfr IAP_ADDRL = 0xE4; //Flash address LOWsfr IAP_CMD = 0xE5; //Flash command registersfr IAP_TRIG = 0xE6; //Flash command triggersfr IAP_CONTR = 0xE7; //Flash control register/*Define ISP/IAP/EEPROM command*/#define CMD_IDLE 0 //Stand-By#define CMD_READ 1 //Byte-Read#define CMD_PROGRAM 2 //Byte-Program#define CMD_ERASE 3 //Sector-Erase/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*///#define ENABLE_IAP 0x80 //if SYSCLK<30MHz//#define ENABLE_IAP 0x81 //if SYSCLK<24MHz//#define ENABLE_IAP 0x82 //if SYSCLK<20MHz#define ENABLE_IAP 0x83 //if SYSCLK<12MHz//#define ENABLE_IAP 0x84 //if SYSCLK<6MHz//#define ENABLE_IAP 0x85 //if SYSCLK<3MHz//#define ENABLE_IAP 0x86 //if SYSCLK<2MHz//#define ENABLE_IAP 0x87 //if SYSCLK<1MHz//Start address for STC12C5620AD series EEPROM#define IAP_ADDRESS 0x0400#define FOSC 11059200L#define BAUD 9600#define ADC_POWER 0x80 //定義ADC電源常量#define ADC_FLAG 0x10 //定義ADC轉(zhuǎn)換結(jié)束標(biāo)志位#define ADC_START 0x08 //定義ADC轉(zhuǎn)換開始控制位#define ADC_SPEEDLL 0x00 //1080個(gè)時(shí)鐘轉(zhuǎn)換一次#define ADC_SPEEDL 0x20 //810個(gè)時(shí)鐘轉(zhuǎn)換一次#define ADC_SPEEDH 0x40 //540個(gè)時(shí)鐘轉(zhuǎn)換一次#define ADC_SPEEDHH 0x60 //270個(gè)時(shí)鐘轉(zhuǎn)換一次 #define ENABLE_ISP 0x82#define Error 1#define Ok 0#define WaitTime 0x01/*sfr ISP_DATA = 0xE2;sfr ISP_ADDRH = 0xE3;sfr ISP_ADDRL = 0xE4;sfr ISP_CMD = 0xE5;sfr ISP_TRIG = 0xE6;sfr ISP_CONTR = 0xE7;*/u16 shu6,shu7;u8 i1,a;u16 i2,i3,i4; u8 ID0,D3,D4,D5;u8 m1,m2,n,n1,n2,shu2,shu8;u16 temp1,LPFdata,D6,D7;char shu1,shu3,shu4,shu5;sbit K0=P3^5; //選擇設(shè)置 獨(dú)立的sbit K1=P1^4; //移位調(diào)整 &設(shè)置數(shù)碼管共9腳sbit K2=P1^2; //加鍵 &設(shè)置數(shù)碼管共6腳sbit Y1=P1^1; //繼電器輸出1sbit COM1=P3^2;sbit COM2=P1^6;sbit COM3=P1^7;sbit COM4=P1^3;sbit COM6=P3^3;sbit COM7=P3^7;sbit COM8=P1^0;sbit COM9=P3^4;sbit CLK=P3^0;sbit DAT=P3^1;u8 up,down,up0,down0,up1,down1,up2,down2;u8 code table[]={0xbb,0x82,0xad,0x8f,0x96,0x1f,0x3f,0x8a,0xbf,0x9f,0x00,0x39,0xb6,0xbc,0x04}; //共陰數(shù)碼管0-F顯示不帶小數(shù)碼 ,因?yàn)槭荌C直接驅(qū)動(dòng)的 //0x39,0xb6,0xbc,0x04為C,H,P,—u8 code table1[]={ 0Xfb,0xc2,0Xed,0xCF,0xd6,0x5f,0x7f, 0xca,0xFF,0xdf}; //帶小數(shù)點(diǎn)顯示 u16 code Dad[161]={ 995,993,990,988,986,984,981,978,975,972,969,966,963,959,955,951,947,943,938,933,928,923,918,912,907,901,894,888,881,874,867,860,852,845,837,828,820,811,802,793,784,775,765,755,745,735,724,714,703,692,682,671,662,648,637,626,614,603,592,580,569,557,546,535,523,512,501,490,479,470,457,446,436,425,415,405,395,385,375,365,356,347,338,329,320,311,303,295,287,278,271,264,256,249,242,236,229,222,216,210,204,198,193,187,182,177,172,167,162,157,153,148,144,140,136,132,128,125,121,118,114,111,108,105,102,99,96,94,91,88,86,84,81,79,77,75,73,71,69,67,65,63,62,60,58,57,55,54,52,51,50,48,47,46,45,44,43,42,40,39,38}; //10位AD轉(zhuǎn)換的數(shù)值表 floatfloat code tem[161]={ 40,39,38,37,36,35,34,33,32,31, 30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15, 14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,1,2,3,4, 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120} ; //測(cè)試點(diǎn)的溫度/**********************************************函數(shù)名:毫秒級(jí)CPU延時(shí)函數(shù)結(jié) 果:占用CPU方式延時(shí)與參數(shù)數(shù)值相同的毫秒時(shí)間備 注:應(yīng)用于1T單片機(jī)時(shí)i<600,應(yīng)用于12T單片機(jī)時(shí)i<125/******************************************************************/void delay(u8 t){u16 i; for(;t>0;t--) for(i=110;i>0;i--); } /*-----Disable ISP/IAP/EEPROM function Make MCU in a safe state----------------------------*/void IapIdle(){ IAP_CONTR = 0; //Close IAP function IAP_CMD = 0; //Clear command to standby IAP_TRIG = 0; //Clear trigger register IAP_ADDRH = 0x80; //Data ptr point to non-EEPROM area IAP_ADDRL = 0; //Clear IAP address to prevent misuse}/*-----Read one u8 from ISP/IAP/EEPROM area Input: addr (ISP/IAP/EEPROM address) Output: Flash data----------------------*/u8 byte_read(u16 addr){ u8 dat; //Data buffer IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time IAP_CMD = CMD_READ; //Set ISP/IAP/EEPROM READ command IAP_ADDRL = addr; //Set ISP/IAP/EEPROM address low IAP_ADDRH = addr >> 8; //Set ISP/IAP/EEPROM address high IAP_TRIG = 0x46; //Send trigger command1 (0x46) IAP_TRIG = 0xb9; //Send trigger command2 (0xb9) _nop_(); //MCU will hold here until ISP/IAP/EEPROM //operation complete dat = IAP_DATA; //Read ISP/IAP/EEPROM data IapIdle(); //Close ISP/IAP/EEPROM function return dat; //Return Flash data}/*-----Program one u8 to ISP/IAP/EEPROM area Input: addr (ISP/IAP/EEPROM address) dat (ISP/IAP/EEPROM data) Output:-----------------------------*/void byte_write(u16 addr, u8 dat){ IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_PROGRAM; IAP_ADDRL = addr; IAP_ADDRH = addr >> 8; IAP_DATA = dat; //Write ISP/IAP/EEPROM data IAP_TRIG = 0x46; IAP_TRIG = 0xb9; _nop_(); IapIdle();}/*-----Erase one sector area Input: addr (ISP/IAP/EEPROM address) Output:-----------------------------*/void SectorErase(u16 addr){ IAP_CONTR = ENABLE_IAP; IAP_CMD = CMD_ERASE; IAP_ADDRL = addr; IAP_ADDRH = addr >> 8; IAP_TRIG = 0x46; IAP_TRIG = 0xb9; _nop_(); IapIdle();}void init(){ P1M0=0x20; //0010 0000設(shè)置P15口模式,用于A/D采集 P1M1=0x20; //1000 0000設(shè)置P17口模式,用于A/D采集 ADC_CONTR=0xe0; //1110 0000開啟A/D電源,設(shè)置最高轉(zhuǎn)換速度delay(8); //延時(shí)使電源穩(wěn)定}u16 readad(u8 m) //m為通道值{ u8 AD_finished=0; u16 result; ADC_DATA=0; ADC_LOW2=0; ADC_CONTR&=0xf8; ADC_CONTR|=m; //選擇通道 ADC_CONTR|=0x08; //啟動(dòng)AD轉(zhuǎn)換 delay(1); while(AD_finished==0) //等待AD轉(zhuǎn)換結(jié)束 { AD_finished=(ADC_CONTR&0x10); } result=ADC_DATA*4+ADC_LOW2; ADC_CONTR&=0xf7; return(result);} /****************AD數(shù)據(jù)濾波動(dòng)函數(shù)*****************/float Ad_d(u8 channel)// 采集電壓的平均值20次{ u8 i; for(i=5;i>0;i--)//數(shù)據(jù)采集存儲(chǔ) { LPFdata=readad( channel) ; } return (LPFdata);} /**********AD轉(zhuǎn)換值轉(zhuǎn)溫度值函數(shù)**************/void Data_temperature(){ float b; u8 i; Ad_d(5); for(i=0;i<=161;i++) { if((LPFdata>=Dad[i])&(LPFdata<Dad[i-1])) {b=tem[i]+(LPFdata-Dad[i])*((tem[i]-tem[i+1])/(Dad[i]-Dad[i+1])); break; } } temp1=b*10+shu5;//強(qiáng)制轉(zhuǎn)化為整形} /***************************************/ void sendcode(u8 b)//傳送負(fù)顯示PX字節(jié)函數(shù){u8 num,c; for(i1=0;i1<=2;i1++) { num=table[13]; //十位 ,小數(shù)點(diǎn)位 for(c=0;c<8;c++) //依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1; COM2=0;COM1=1; delay(3); COM4=1; COM3=1; COM2=1;COM1=1; } for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1; COM2=1;COM1=0; delay(3); COM4=1; COM3=1; COM2=1;COM1=1; }}/***************************************/ void sendcode1( u16 b)//傳送溫度顯示字節(jié)函數(shù){u8 num,c; for(i1=0;i1<=2;i1++) { num=table[b/1000];//千位 COM4=0; COM3=1; COM2=1;COM1=1; for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=0; COM3=1; COM2=1;COM1=1; delay(5); COM4=1; COM3=1; COM2=1;COM1=1; }for(i1=0;i1<=2;i1++) { num=table[b%1000/100];//百位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=0; COM2=1;COM1=1; delay(5); COM4=1; COM3=1; COM2=1;COM1=1;} for(i1=0;i1<=2;i1++) { num=table1[b%100/10];//十位 for(c=0;c<8;c++)//依次傳送8位 {CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1; COM2=0;COM1=1; delay(5); COM4=1; COM3=1;COM2=1;COM1=1; } for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1; COM2=1;COM1=0; delay(5); COM4=1; COM3=1; COM2=1;COM1=1; }} /*************顯示設(shè)置碼**************/void sendcode2(u8 b)//傳送設(shè)置編號(hào)1顯示字節(jié)函數(shù){u8 num,c; for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } }COM9=1; COM8=1; COM7=1;COM6=0;delay(3);COM9=1; COM8=1; COM7=1;COM6=1;} /***************************************/ void sendcode3(u8 b)//傳送負(fù)顯示3字節(jié)函數(shù){u8 num,c;for(i1=0;i1<=2;i1++) { num=table[b/100];//百位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=0;COM7=1;COM6=1; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; } for(i1=0;i1<=2;i1++) { num=table1[b%100/10]; //十位 ,小數(shù)點(diǎn)位 for(c=0;c<8;c++) //依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=0;COM6=1; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; } for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=1;COM6=0; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; }}/***************************************/ void sendcode4(u16 b)//傳送負(fù)號(hào)顯示字節(jié)函數(shù)0~-40顯示{u8 num,c;for(i1=0;i1<=2;i1++) { num=table[14];//千位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=0;COM7=1;COM6=1; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; } for(i1=0;i1<=2;i1++) { num=table[b%100/10];//十位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=0;COM6=1; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; } for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=1;COM6=0; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; }}/*********************************/ void sendcode5(u16 d)//傳送0~120度顯示節(jié)函數(shù){ u8 num,c; for(i1=0;i1<=2;i1++) { num=table[d%1000/100];//百位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=0;COM7=1;COM6=1; delay(5); COM9=1; COM8=1;COM7=1;COM6=1; } for(i1=0;i1<=2;i1++){ num=table[d%100/10];//十位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1;COM7=0;COM6=1; delay(5); COM9=1; COM8=1;COM7=1;COM6=1;} for(i1=0;i1<=2;i1++) { num=table[d%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=1;COM6=0; delay(5); COM9=1; COM8=1;COM7=1;COM6=1; }} /***************************************/ void sendcode6(u8 b)//傳送負(fù)號(hào)顯示字節(jié)函數(shù)-5顯示{u8 num,c; for(i1=0;i1<=2;i1++) { num=table[14];//十位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=0; COM7=1;COM6=1; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; } for(i1=0;i1<=2;i1++) { num=table1[b%100/10];//位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=0;COM6=1; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; }for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=1;COM6=0; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; }} /***************************************/ void sendcode7(u8 b)//傳送負(fù)號(hào)顯示字節(jié)函數(shù)5顯示{u8 num,c; for(i1=0;i1<=2;i1++) { num=table1[b%100/10];//位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=0;COM6=1; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; }for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=1;COM6=0; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; }} /***************************************/ void sendcode8(u16 b)//傳送負(fù)顯示3字節(jié)函數(shù){u8 num,c;for(i1=0;i1<=2;i1++) { num=table[b/100];//百位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=0;COM7=1;COM6=1; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; } for(i1=0;i1<=2;i1++) { num=table1[b%100/10]; //十位 ,小數(shù)點(diǎn)位 for(c=0;c<8;c++) //依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=0;COM6=1; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; } for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=1;COM6=0; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; }} /***************************************/ void sendcode9(u8 b)//傳送負(fù)顯示2字節(jié)函數(shù){u8 num,c; for(i1=0;i1<=5;i1++) { num=table[b%100/10]; //十位 ,小數(shù)點(diǎn)位 for(c=0;c<8;c++) //依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=0;COM6=1; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; } for(i1=0;i1<=5;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=1;COM6=0; delay(3); COM9=1; COM8=1;COM7=1;COM6=1; }} /***************************************/ void sendcode10(u16 b)//傳送斷路,短路,超量程顯示字節(jié)函數(shù){u8 num,c; for(i1=0;i1<=2;i1++) { num=table[14];//千位 COM4=0; COM3=1; COM2=1;COM1=1; for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=0; COM3=1; COM2=1;COM1=1; delay(5); COM4=1; COM3=1; COM2=1;COM1=1; }for(i1=0;i1<=2;i1++) { num=table[14];//百位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=0; COM2=1;COM1=1; delay(5); COM4=1; COM3=1; COM2=1;COM1=1;} for(i1=0;i1<=2;i1++) { num=table[14];//十位 for(c=0;c<8;c++)//依次傳送8位 {CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1; COM2=0;COM1=1; delay(5); COM4=1; COM3=1;COM2=1;COM1=1; } for(i1=0;i1<=2;i1++) { num=table[14];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1; COM2=1;COM1=0; delay(5); COM4=1; COM3=1; COM2=1;COM1=1; }}/***************************************/ void sendcode11(u16 b)//傳送PV區(qū)負(fù)號(hào)顯示字節(jié)函數(shù)0~-40顯示{u8 num,c;for(i1=0;i1<=2;i1++) { num=table[14];//百位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=0; COM3=1;COM2=1;COM1=1; delay(5); COM4=1; COM3=1;COM2=1;COM1=1; }for(i1=0;i1<=2;i1++) { num=table[b/100];//百位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=0;COM2=1;COM1=1; delay(5); COM4=1; COM3=1;COM2=1;COM1=1; } for(i1=0;i1<=2;i1++) { num=table1[b%100/10];//十位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1;COM2=0;COM1=1; delay(5); COM4=1; COM3=1;COM2=1;COM1=1; } for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1;COM2=1;COM1=0; delay(5); COM4=1; COM3=1;COM2=1;COM1=1; }} /***************************************/ void sendcode12(u16 b)//傳送PV區(qū)負(fù)號(hào)顯示字節(jié)函數(shù)0~9.9顯示{u8 num,c; for(i1=0;i1<=4;i1++) { num=table1[b%100/10];//十位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1;COM2=0;COM1=1; delay(5); COM4=1; COM3=1;COM2=1;COM1=1; } for(i1=0;i1<=4;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1;COM2=1;COM1=0; delay(5); COM4=1; COM3=1;COM2=1;COM1=1; }}/***************************************/ void sendcode13(u16 b)//傳送PV區(qū)負(fù)號(hào)顯示字節(jié)函數(shù)10.0~99.9顯示{u8 num,c;for(i1=0;i1<=2;i1++) { num=table[b/100];//位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=0;COM2=1;COM1=1; delay(3); COM4=1; COM3=1;COM2=1;COM1=1; } for(i1=0;i1<=2;i1++) { num=table1[b%100/10];//十位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1;COM2=0;COM1=1; delay(3); COM4=1; COM3=1;COM2=1;COM1=1; } for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1;COM2=1;COM1=0; delay(3); COM4=1; COM3=1;COM2=1;COM1=1; }} /***************************************/ void sendcode14(u8 b)//傳送負(fù)號(hào)顯示字節(jié)函數(shù)-5.0顯示{u8 num,c; for(i1=0;i1<=2;i1++) { num=table[14];//十位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=0;COM2=1;COM1=1; delay(3); COM4=1; COM3=1;COM2=1;COM1=1; } for(i1=0;i1<=2;i1++) { num=table1[b%100/10];//位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1;COM2=0;COM1=1; delay(3); COM4=1; COM3=1;COM2=1;COM1=1; }for(i1=0;i1<=2;i1++) { num=table[b%10];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM4=1; COM3=1;COM2=1;COM1=0; delay(3); COM4=1; COM3=1;COM2=1;COM1=1; }}/*********************************/ void sendcode15(u16 b) //報(bào)錯(cuò){ u8 num,c; for(i1=0;i1<=2;i1++) { num=table[13];//位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=0; COM8=1;COM7=1;COM6=1; delay(5); COM9=1; COM8=1;COM7=1;COM6=1; }for(i1=0;i1<=2;i1++) { num=table[13];//百位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=0;COM7=1;COM6=1; delay(5); COM9=1; COM8=1;COM7=1;COM6=1; } for(i1=0;i1<=2;i1++){ num=table[13];//十位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1;COM7=0;COM6=1; delay(5); COM9=1; COM8=1;COM7=1;COM6=1;} for(i1=0;i1<=2;i1++) { num=table[13];//個(gè)位 for(c=0;c<8;c++)//依次傳送8位 { CLK=0; DAT=num&0x01; CLK=1; num>>=1; } COM9=1; COM8=1; COM7=1;COM6=0; delay(5); COM9=1; COM8=1;COM7=1;COM6=1; }} /*****************************/char Adjustment1(char shu1) //加減函數(shù)參數(shù)設(shè)置{ if(K1==0) //減鍵 { delay(5); if(K1==0) down1=1;} if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減 { down1=0;up1=1;} if(up1==1) { up1=0; shu1--; if(shu1<0) shu1=2; } if(K2==0) //加鍵 { delay(5); if(K2==0) down2=1;} if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加 { down2=0;up2=1;} if(up2==1) { up2=0; shu1++; if(shu1>2) shu1=0; } return(shu1);//返回}/*****************************/u8 Adjustment2(u8 shu2 ) //加減函數(shù)參數(shù)設(shè)置{ if(K1==0) //減鍵 {down1=1; delay(5); if(K1==0) { if(m1==0) //中速減少 { a++; delay(5);//停留時(shí)間5X10 if(a==20) { n1++; if(n1==5)//減少快慢 m1=1; a=0; shu2--; if(shu2==0) shu2=150; } } if(m1==1) //高速減少 { a=0; shu2--; delay(20); if(shu2==0) shu2=150; } } } if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減 { a=0; n1=0;m1=0; down1=0;up1=1;} if(up1==1) { up1=0; shu2--; if(shu2==0) shu2=150; } if(K2==0) //加鍵 { down2=1; delay(5); if(K2==0) { if(m2==0) //中速增加 { a++; delay(5); //停留時(shí)間5X10 if(a==20) { n2++; if(n2==5) //增加快慢 m2=1; a=0; shu2++; if(shu2>150) shu2=0; } } if(m2==1) //高速增加 { a=0; shu2++; delay(20); if(shu2>150) shu2=0; } } } if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加 { a=0; n2=0;m2=0; down2=0;up2=1;} if(up2==1) { up2=0; shu2++; if(shu2>150) shu2=0; } return(shu2);//返回}/*****************************/char Adjustment3(char shu3 ) //加減函數(shù)參數(shù)設(shè)置{ if(K1==0) //減鍵 {down1=1; delay(5); if(K1==0) { if(m1==0) //中速減少 { a++; delay(5);//停留時(shí)間5X10 if(a==10) { n1++; if(n1==5)//減少快慢 m1=1; a=0; shu3--; if(shu3<-40) shu3=120; } } if(m1==1) //高速減少 { a=0; shu3--; delay(20);//加的速度 if(shu3<-40) shu3=120; } } } if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減 { a=0; n1=0;m1=0; down1=0;up1=1;} if(up1==1) { up1=0; shu3--; if(shu3<-40) shu3=120; } if(K2==0) //加鍵 { down2=1; delay(5); if(K2==0) { if(m2==0) //中速增加 { a++; delay(5); //停留時(shí)間5X10 if(a==10) { n2++; if(n2==5) //增加快慢 m2=1; a=0; shu3++; if(shu3>120) shu3=-40; } } if(m2==1) //高速增加 { a=0; shu3++; delay(20); if(shu3>120) shu3=-40; } } } if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加 { a=0; n2=0;m2=0; down2=0;up2=1;} if(up2==1) { up2=0; shu3++; if(shu3>120) shu3=-40; } return(shu3);}/*****************************/char Adjustment4(char shu4 ) //加減函數(shù)參數(shù)設(shè)置{ if(K1==0) //減鍵 {down1=1; delay(5); if(K1==0) { if(m1==0) //中速減少 { a++; delay(5);//停留時(shí)間5X10 if(a==10) { n1++; if(n1==5)//減少快慢 m1=1; a=0; shu4--; if(shu4<-40) shu4=120; } } if(m1==1) //高速減少 { a=0; shu4--; delay(20); if(shu4<-40) shu4=120; } } } if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減 { a=0; n1=0;m1=0; down1=0;up1=1;} if(up1==1) { up1=0; shu4--; if(shu4<-40) shu4=120; } if(K2==0) //加鍵 { down2=1; delay(5); if(K2==0) { if(m2==0) //中速增加 { a++; delay(5); //停留時(shí)間5X10 if(a==10) { n2++; if(n2==5) //增加快慢 m2=1; a=0; shu4++; if(shu4>120) shu4=-40; } } if(m2==1) //高速增加 { a=0; shu4++; delay(20); if(shu4>120) shu4=-40; } } } if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加 { a=0; n2=0;m2=0; down2=0;up2=1;} if(up2==1) { up2=0; shu4++; if(shu4>120) shu4=-40; } return(shu4);//返回}/*****************************/char Adjustment5(char shu5 ) //加減函數(shù)參數(shù)設(shè)置{ if(K1==0) //減鍵 {down1=1;TR0=0; i2=0; delay(5); if(K1==0) { if(m1==0) //中速減少 { a++; delay(5);//停留時(shí)間5X10 if(a==10) { n1++; if(n1==5)//減少快慢 m1=1; a=0; shu5--; if(shu5<-90) shu5=90; } } if(m1==1) //高速減少 { a=0; shu5--; delay(20); if(shu5<-90) shu5=90; } } } if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減 { a=0; n1=0;m1=0; down1=0;up1=1;} if(up1==1) { up1=0; shu5--; if(shu5<-90) shu5=90; } if(K2==0) //加鍵 { down2=1;TR0=0; i2=0; delay(5); if(K2==0) { if(m2==0) //中速增加 { a++; delay(5); //停留時(shí)間5X10 if(a==10) { n2++; if(n2==5) //增加快慢 m2=1; a=0; shu5++; if(shu5>90) shu5=-90; } } if(m2==1) //高速增加 { a=0; shu5++; delay(20); if(shu5>90) shu5=-90; } } } if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加 { a=0; n2=0;m2=0; down2=0;up2=1;} if(up2==1) { up2=0; shu5++; if(shu5>90) shu5=-90; } return(shu5);//返回}/*****************************/u16 Adjustment6(u16 shu6 ) //加減函數(shù)參數(shù)設(shè)置{ if(K1==0) //減鍵 {down1=1; delay(5); if(K1==0) { if(m1==0) //中速減少 { a++; delay(5);//停留時(shí)間5X10 if(a==10) { n1++; if(n1==5)//減少快慢 m1=1; a=0; shu6--; if(shu6==0) shu6=999; } } if(m1==1) //高速減少 { a=0; shu6--; delay(20); if(shu6==0) shu6=999; } } } if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減 { a=0; n1=0;m1=0; down1=0;up1=1;} if(up1==1) { up1=0; shu6--; if(shu6==0) shu6=999; } if(K2==0) //加鍵 { down2=1; delay(5); if(K2==0) { if(m2==0) //中速增加 { a++; delay(5); //停留時(shí)間5X10 if(a==10) { n2++; if(n2==5) //增加快慢 m2=1; a=0; shu6++; if(shu6>999) shu6=0; } } if(m2==1) //高速增加 { a=0; shu6++; delay(20); if(shu6>999) shu6=0; } } } if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加 { a=0; n2=0;m2=0; down2=0;up2=1;} if(up2==1) { up2=0; shu6++; if(shu6>999) shu6=0; } return(shu6);//返回}/*****************************/u16 Adjustment7(u16 shu7 ) //加減函數(shù)參數(shù)設(shè)置{ if(K1==0) //減鍵 {down1=1; delay(5); if(K1==0) { if(m1==0) //中速減少 { a++; delay(5);//停留時(shí)間5X10 if(a==10) { n1++; if(n1==5)//減少快慢 m1=1; a=0; shu7--; if(shu7==0) shu7=240; } } if(m1==1) //高速減少 { a=0; shu7--; delay(20); if(shu7==0) shu7=240; } } } if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減 { a=0; n1=0;m1=0; down1=0;up1=1;} if(up1==1) { up1=0; shu7--; if(shu7==0) shu7=240; } if(K2==0) //加鍵 { down2=1; delay(5); if(K2==0) { if(m2==0) //中速增加 { a++; delay(5); //停留時(shí)間5X10 if(a==10) { n2++; if(n2==5) //增加快慢 m2=1; a=0; shu7++; if(shu7>=240) shu7=0; } } if(m2==1) //高速增加 { a=0; shu7++; delay(20); if(shu7>=240) shu7=0; } } } if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加 { a=0; n2=0;m2=0; down2=0;up2=1;} if(up2==1) { up2=0; shu7++; if(shu7>=240) shu7=0; } return(shu7);//返回} /*****************************/char Adjustment8(char shu8 ) //加減函數(shù)參數(shù)設(shè)置{ if(K1==0) //減鍵 { delay(5); if(K1==0) down1=1;} if((K1==1)&(down1==1))//按鍵彈起點(diǎn)動(dòng)減減 { down1=0;up1=1;} if(up1==1) { up1=0; shu8-=10; if(shu8<0) shu8=40; } if(K2==0) //加鍵 { delay(5); if(K2==0) down2=1;} if((K2==1)&(down2==1)) //按鍵彈起點(diǎn)動(dòng)加加 { down2=0;up2=1;} if(up2==1) { up2=0; shu8+=10; if(shu8>40) shu8=0; } return(shu8);//返回} /********************************/void clock_T0(void) interrupt 1 { TH0=(65536-50000)/256; //10ms定時(shí)器TL0=(65536-50000)%256;i2++; i3++;i4++;}/****************************/ void timer1() interrupt 3{ TH1=(65536-1000)/256;//60MS附值 TL1=(65536-1000)%256; }void main (void){ TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-1000)/256; TL1=(65536-1000)%256; ET0=1; EA=1; TR1=1; init(); Ad_d(5); shu1=Adjustment1(shu1); shu2=Adjustment2(shu2); shu3=Adjustment3(shu3); shu4=Adjustment4(shu4); shu5=Adjustment5(shu5); shu6=Adjustment6(shu6); shu7=Adjustment7(shu7); shu8=Adjustment8(shu8); D3=abs(shu3); D4=abs(shu4); D6=abs(shu3)*10; D7=abs(shu4)*10; shu1= byte_read(0x2001); shu2= byte_read(0x2002); shu3= byte_read(0x2003); shu4= byte_read(0x2004); shu5= byte_read(0x2005); shu6= byte_read(0x2006); shu7= byte_read(0x2007); shu8= byte_read(0x2008); while(1){ if(K0==0) //單位{ delay(5); if(K0==0) { a++; delay(2); if(a==5) {down0=1;a=0;} } } if((K0==1)&&(down0==1)) {down0=0;up0=1; } if(up0==1) {up0=0; ID0++; if(ID0>8) ID0=0; } switch(ID0) { case 0: D4=abs(shu4); D6=abs(shu3)*10; D7=abs(shu4)*10; TR0=0; i4=0; i3=0; i2=0; Data_temperature(); switch(shu1) { case 0: //制冷 for(n=0;n<15;n++){ if((LPFdata<38)|| (LPFdata>995)) //超量程顯示 或短路,斷路 { sendcode10(temp1); }else if((LPFdata>784)&(LPFdata<867))// 顯示負(fù)號(hào)-10以下量程區(qū)域 { sendcode14(temp1); }else if(LPFdata>=867)// 顯示負(fù)號(hào)-10以上量程區(qū)域 { sendcode11(temp1); }else if ((LPFdata>682)&(LPFdata<784)) //百位不顯示 { sendcode12(temp1); }else if ((LPFdata<=682) &(LPFdata>65)) //千位不顯示 { sendcode13(temp1); }else { sendcode1(temp1); } if(shu3>shu4)//開始>停止溫度 { if(shu4>=0) { sendcode5(D4);} else { sendcode4(D4);} if(temp1>=D6) Y1=0; else if(temp1<=D7) Y1=1; } else {Y1=1; sendcode15(13); }} break; case 1: D4=abs(shu4); D6=abs(shu3)*10; D7=abs(shu4)*10; for(n=0;n<12;n++){ if((LPFdata<38)|| (LPFdata>995)) //超量程顯示 或短路,斷路 { sendcode10(temp1); }else if((LPFdata>784)&(LPFdata<867))// 顯示負(fù)號(hào)-10以下量程區(qū)域 { sendcode14(temp1); }else if(LPFdata>=867)// 顯示負(fù)號(hào)-10以上量程區(qū)域 { sendcode11(temp1); }else if ((LPFdata>682)&(LPFdata<784)) //百位不顯示 { sendcode12(temp1); }else if ((LPFdata<=682) &(LPFdata>=67)) //千位不顯示 { sendcode13(temp1); }else { sendcode1(temp1); } if(shu3<shu4)//開始<停止溫度 { if(shu4>=0) sendcode5(D4); else sendcode4(D4); if(temp1<=D6) Y1=0; else if(temp1>=D7) Y1=1; } else {Y1=1; sendcode15(13); }} break; case 2: D4=abs(shu4); for(n=0;n<15;n++){ if((LPFdata<38)|| (LPFdata>995)) //超量程顯示 或短路,斷路 { sendcode10(14); }else if((LPFdata>784)&(LPFdata<867))// 顯示負(fù)號(hào)-10以下量程區(qū)域 { sendcode14(temp1); }else if(LPFdata>=867)// 顯示負(fù)號(hào)-10以上量程區(qū)域 { sendcode11(temp1); }else if ((LPFdata>682)&(LPFdata<784)) //百位不顯示 { sendcode12(temp1); }else if ((LPFdata<=682) &(LPFdata>65)) //千位不顯示 { sendcode13(temp1); }else { sendcode1(temp1); } if(shu3=shu4)//開始>停止溫度 { if(shu4>=0) sendcode5(D4); else sendcode4(D4); Y1=1; } } break;} break; case 1: TR0=1; i3++; i4=0; if(i3==4000) {i3=0; ID0=0; } sendcode(ID0);//PV區(qū)顯示P1 if(shu8==30) {shu1=Adjustment1(shu1);//PS區(qū)顯示D1的值 sendcode2(shu1);} else sendcode2(shu1); break; case 2: TR0=1; i4++; i3=0; if(i4==4000) {i3=0;i4=0; ID0=0; } sendcode(ID0); if(shu8==30) {shu2=Adjustment2(shu2); sendcode3(shu2);} else sendcode3(shu2); break; case 3: TR0=1; i3++; i4=0; if(i3==4000) {i3=0;i4=0;ID0=0; } sendcode(ID0);//PV區(qū)顯示P1 if(shu8==30) { shu3=Adjustment3(shu3); D3=abs(shu3); //求絕對(duì)值 if(shu3>=0) sendcode5(D3); else sendcode4(D3);} else { D3=abs(shu3); //求絕對(duì)值 if(shu3>=0) sendcode5(D3); else sendcode4(D3);} break; case 4: TR0=1; i4++; i3=0; if(i4==4000) {i3=0;i4=0;ID0=0; } sendcode(ID0); if(shu8==30) {shu4=Adjustment4(shu4); D4=abs(shu4); if(shu4>=0) sendcode5(D4); else sendcode4(D4);} else {D4=abs(shu4); if(shu4>=0) sendcode5(D4); else sendcode4(D4);} break; case 5: TR0=1; i3++; i4=0; if(i3==4000) {i3=0;i4=0;ID0=0; } sendcode(ID0); if(shu8==30) { shu5=Adjustment5(shu5); D5=abs(shu5); if(shu5>=0) sendcode7(D5); else sendcode6(D5);} else {D5=abs(shu5); if(shu5>=0) sendcode7(D5); else sendcode6(D5);} break; case 6: TR0=1; i4++; i3=0; if(i4==4000) {i3=0;i4=0;ID0=0; } sendcode(ID0); if(shu8==30) { shu6=Adjustment6(shu6); if(shu6<=99) sendcode7(shu6); else sendcode8(shu6);} else { if(shu6<=99) sendcode7(shu6); else sendcode8(shu6);} break; case 7: TR0=1; i3++; i4=0; if(i3==4000) {i3=0;i4=0;ID0=0; } sendcode(ID0); if(shu8==30) { shu7=Adjustment7(shu7); if(shu7<=99) sendcode7(shu7); else sendcode8(shu7);} else { if(shu7<=99) sendcode7(shu7); else sendcode8(shu7);} break; case 8: TR0=1; i2++; i4++; i3=0; shu8=Adjustment8(shu8); for(n=0;n<50;n++) { sendcode(ID0); delay(2); shu8=Adjustment8(shu8); sendcode9(shu8); delay(2); if(K0==0) //單位 { delay(5); if(K0==0) { a++; delay(2); if(a==5) {down0=1;a=0;} } } if((K0==1)&&(down0==1)) {down0=0;up0=1; } if(up0==1) {up0=0; ID0++; if(ID0>8) ID0=0; } } if(i4==2000) {i3=0;i4=0;ID0=0; i2=0;} SectorErase(0x2000); SectorErase(0x2001); SectorErase(0x2002); SectorErase(0x2003); SectorErase(0x2004); SectorErase(0x2005); SectorErase(0x2006); SectorErase(0x2007); SectorErase(0x2008); byte_write(0x2001,shu1); byte_write(0x2002,shu2); byte_write(0x2003,shu3); byte_write(0x2004,shu4); byte_write(0x2005,shu5); byte_write(0x2006,shu6); byte_write(0x2007,shu7); byte_write(0x2008,shu8); break; }}} SectorErase(0x2003);
SectorErase(0x2004);
SectorErase(0x2005);
SectorErase(0x2006);
SectorErase(0x2007);
SectorErase(0x2008);
byte_write(0x2001,shu1);
byte_write(0x2002,shu2);
byte_write(0x2003,shu3);
byte_write(0x2004,shu4);
byte_write(0x2005,shu5);
byte_write(0x2006,shu6);
byte_write(0x2007,shu7);
byte_write(0x2008,shu8);
break;
}
}
}
|
|