1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > c语言ddv_max STC单片机自制贴片元件拆焊台MAX6675控温程序

c语言ddv_max STC单片机自制贴片元件拆焊台MAX6675控温程序

时间:2023-02-08 01:29:57

相关推荐

c语言ddv_max STC单片机自制贴片元件拆焊台MAX6675控温程序

#include#define uchar unsigned char//只有256

#define uint unsigned int//有16位但占内存。

#define ulongunsigned long

#include

sbit rs=P2^6;//

sbit rw=P2^5;//

sbit en=P2^7;//

sbit k1=P1^0;//按键+

sbit k2=P1^1;//按键-

uchar set=195;//初始化温度

sbit OUT=P1^2;//定义输出

void delay (int a)//毫秒级延时

{

int x,y;

for(x=a;x>0;x--)

for(y=110;y>0;y--);

}

//定义温度数据变量

float wdd = 0;//单精度浮点型变量眼3.4*10^38----(-3.4*10^38)占4个字节小数点后7-8位

//double wdd = 0;//双精度浮点型变量 小数点后15-16位

ulong x = 0;//长整数型温度

uintwd;//定义一个温度用于显示

sbitSO=P3^2;//P1.0口与SO相连

sbitCS=P3^3;//P1.1口与CS相连

sbitSCK=P3^4; //P1.2口与SCK相连

/*******************************延时函数**********************************************/

void Delay1Ms(uint t)

{

uchar i;

for (;t>0;t--)

{

for (i=0;i<138;i++)

{

_nop_();_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();_nop_();

}

}

}

void Delay1s(uchar t)

{

for (;t>0;t--)

{

Delay1Ms(250);

Delay1Ms(250);

Delay1Ms(250);

Delay1Ms(250);

}

}

void delayus()//us微秒延时

{

_nop_();

_nop_();

_nop_();

_nop_();

}

unsigned long Re_Convert() //热电偶数据--读取温度

{ uchar i;

unsigned long Temp_2;

Temp_2=0;

CS=1;

SCK=0;

Delay1Ms(120); //不低于(52机)100MS不然数据无法刷新

_nop_();_nop_();

CS=0;

for(i=0;i<16;i++)//16位数据读取

{

Temp_2<<=1;//向右移一位

_nop_();

SCK=1;//上升

if(SO==1)

{Temp_2=Temp_2|0x01;}

else

Temp_2=Temp_2|0x00;

_nop_();

SCK=0;

_nop_();

}

Temp_2=Temp_2<<1; //向左移一位,取0-14位

Temp_2=Temp_2>>3; //向右移4位,取3-14位

//Temp_2=1024.123456;//测试正常运行不要

return(Temp_2); //返回温度

}

void write_com(uchar com)//写命令

{

rs=0;//

rw=0;

en=0;

P0=com;

delay(2);

en=1;

delay(5);

en=0;

delay(2);

}

void write_dat(uchar dat)//写数据

{

rs=1;//

rw=0;

en=0;

P0=dat;

delay(2);

en=1;

delay(5);

en=0;

delay(2);

}

void write_zfc(uchar *p)//定义一个带指针的函数?(字符串)

{

while(*p!=0)//不能用";"

write_dat(*p++);

}

void init_1602()//1602初始化

{

write_com(0x38);//设置16X2显示

delay(1);

write_com(0x0C);//0e光标不闪//0c不显//0f闪烁显示

delay(1);

write_com(0x06);//光标移位加1

delay(1);

write_com(0x01);//清屏

delay(1);

write_com(0x80);

write_zfc("Set=");

}

void write_TH(uchar set)//高温显示

{

uchar qian,bai,shi,ge;

qian=set/1000;

bai=set%1000/100;

shi=set%100/10;

ge=set%10;

write_com(0x80+4);

// write_dat(0x30+qian);

write_dat(0x30+bai);

write_dat(0x30+shi);

write_dat(0x30+ge);

write_dat(0xdf);//显上0

write_dat('C');

}

void display(uint tvalue)//4位显示子函数

{

uchar qian,bai,shi,ge;

qian=tvalue/1000;

bai=tvalue%1000/100;

shi=tvalue%100/10;

ge=tvalue%10;

write_com(0xc0+3);

write_zfc("WD =");

//write_dat(0x30+qian);

write_dat(0x30+bai);

write_dat(0x30+shi);

write_dat(0x30+ge);

write_dat(0xdf);//显上0

write_dat('C');

}

void keyscan()

{

if(k1==0)

{

// delay(5);

//while(!k1);

set++;

if(set>250)set=250;

write_TH(set);

}

if(k2==0)

{

//delay(5);

//while(!k2);

set--;

if(set<30)set=30;

write_TH(set);

}

}

void main()

{

init_1602();

while(1)

{

keyscan();

write_TH(set);//设置温度

x=Re_Convert(); //读取温度//X=读到的值

wdd=25*x;//温度量化 X 0.25//取后两位就X25

wd =(uint)wdd;//浮点型变量转换成uint型变量16位

//wd=wd-48;//计算

wd=wd/200;//计算

display(wd);

if(wd>set)

{

OUT=1;

write_com(0x80+11);

write_zfc("");

}

else

{

if(wd+1<=set) //让这回到5C之下才又开始加温,防闪烁

{

OUT=0;//加热开始

write_com(0x80+11);

write_zfc("");

}

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。