?? max6675tc.c
字號(hào):
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define nop2() _nop_();_nop_();
#define CnSet 10;
uchar code tab1[]="Tu:";
uchar code tab2[]="Tm:";
sbit lcden=P2^7;
sbit lcdrs=P2^1;
sbit lcdrw=P2^0;
sbit CS1=P2^5;
sbit SCK=P2^2;
sbit SO=P2^3;
sbit ALARM=P1^2;
sbit SSR1=P1^3;
bit col;
bit bt;
uchar Cn,status;
uchar curpos[]={0xc4,0xca,0xcf,0xc9,0xc6,0xc3} ; //光標(biāo)位置
uint RealTemp,LastTemp,SetTemp=200;//
uchar count;
uchar kp,ki,kd;
void increase();
void decrease();
void RunPID();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;
lcdrw=0;
P0=com;
delay(1);
lcden=0;
lcden=1;
delay(1);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
lcdrw=0;
P0=date;
delay(1);
lcden=0;
lcden=1;
delay(1);
lcden=0;
}
uint measure(void)
{
uint i,value;
SCK=0;
nop2();
CS1=0;
value=0;
for(i=0;i<16;i++)
{
nop2();
SCK=1;
value=value+value;
nop2();
if(SO)
{
value=value+1;
}
SCK=0;
}
CS1=1;
value=value>>3;
return value;
}
void Display(void)
{
uint tmp;
uchar wan,qian,bai,shi,ge,num;
tmp=RealTemp*25;
write_com(0x80);
for(num=0;num<3;num++)
{
write_data(tab1[num]);
}
wan=tmp/10000;
qian=tmp/1000%10;
bai=tmp/100%10;
shi=tmp/10%10;
ge=tmp%10;
if(wan==0)
{write_data(0x20);}
else
write_data(0x30+wan);
write_data(0x30+qian);
write_data(0x30+bai);
write_data(0x2E);
write_data(0x30+shi);
write_data(0x30+ge);
tmp=SetTemp*25;
write_com(0x80+0x40);
for(num=0;num<3;num++)
{
write_data(tab2[num]);
}
wan=tmp/10000;
qian=tmp/1000%10;
bai=tmp/100%10;
shi=tmp/10%10;
ge=tmp%10;
if(wan==0)
{write_data(0x20);}
else
write_data(0x30+wan);
write_data(0x30+qian);
write_data(0x30+bai);
write_data(0x2E);
write_data(0x30+shi);
write_data(0x30+ge);
if (status!=0) //若在調(diào)整狀態(tài),則置相應(yīng)的光標(biāo)閃爍
{
write_com(curpos[status-1]);
write_com(0x0f);
}
// else
// {
// write_com(0x0c); //光標(biāo)不閃爍
// }
}
void init()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80+2);
TMOD=0x01;
TH0=(65535-10000)/256;
TL0=(65535-10000)%256;
EA=1;
ET0=1;
TR0=1;
bt=0;
Cn=CnSet;
ALARM=0;
}
//鍵盤處理
void ScanKey()
{ uint Key,Key0;
P3|=0xf0;
Key=P3;
Key0=Key&0xf0;
if (Key0==0xf0) return;
Key=Key0;
delay(100);
do{
P3|=0xf0;
Key0=P3;
Key0=Key0&0xf0;
} while (Key==Key0);
switch(Key&0xf0)
{case 0xe0: if (status <1)
{
status++;
}
else
{
status=0;
}
break;
case 0xd0: increase();
break;
case 0xb0: decrease();
break;
case 7: status=0;
RunPID();
break;
default:break;
}
}
void increase()
{
switch(status)
{
case 1: SetTemp+=4;
break;
case 2: kp++;
break;
case 3: ki++;
break;
case 4: kd++;
break;
default:break;
}
}
void decrease()
{
switch(status)
{
case 1: SetTemp-=4;
break;
case 2: kp--;
break;
case 3: ki--;
break;
case 4: kd--;
break;
default:break;
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if((--Cn)==0)
{
col=1;
Cn=CnSet;
if(col)
{
col=0;
RealTemp=measure();
}
}
Display();
}
void RunPID()
{
;
}
void main()
{ delay(100);
init();
delay(100);
while(1)
{
ScanKey();
if(RealTemp>SetTemp)
SSR1=0;
else
SSR1=1;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -