- 积分
- 341
- 在线时间
- 1314 小时
- 最后登录
- 2025-6-16
- 阅读权限
- 50
- 精华
- 0

- UID
- 30960
- 帖子
- 240
- 精华
- 0
- 经验
- 341 点
- 金钱
- 267 ¥
- 注册时间
- 2007-11-23
|
本帖最后由 jl48q-5 于 2013-9-3 21:37 编辑
做了一套恒温烙铁电路
#include<stc12c5620ad.h>
#define uchar unsigned char
#define uint unsigned int
sbit k_z=P2^5; //定义控制端口
#define tw 1 //调温基准电压检测口P1.1
#define ad 0 //温度电压检测口P1.0
void delay(uint z); //声明延时
void init_PWM(); //pwm初始化
void init_Timer1();//定时器1初始化
void Jian_zhe(); //检测温度
uchar AD(uchar n);
uint time;
bit flg;
void main()
{
P1M0=0x03; //0000 0011 设置P1.0 P1.1为A/D口
P1M1=0x00; //0000 0000
init_PWM(); //pwm初始化
init_Timer1(); //定时器1初始化
k_z=0;
while(1)
{
Jian_zhe(); //检测温度
}
}
void Jian_zhe() //检测温度
{
flg=0;
time=0;
while(k_z==0) //当控制端为 0
{
flg=1; //开始计数
if(time==100)//到100毫秒
{
flg=0; //停止计数
time=0; //时间清零
if(AD(ad)>AD(tw)) //采集电压值大于设定基准电压值
{
k_z=1;//控制端为 1
}
else
k_z=0;
}
}
while(k_z) //当控制端为 1
{
flg=1; //开始计数
if(time==2000) //计到2000毫秒(2秒)
{
flg=0; //停止计数
time=0; //时间清零
k_z=0; //控制端置 0
}
}
}
uchar AD(uchar n)
{
ADC_CONTR=0xe8+n; //设p1为电压采集口
delay(20);
while((ADC_CONTR&0x10)!=0x10);//等待A/D转换结束
delay(20);
return ADC_DATA; //把A/D转换结果寄存器附给AD()
}
void init_Timer1() //定时器1初始化
{
TH1=(65536-1000)/256; //定时1毫秒
TL1=(65536-1000)%256;
TR1=1;
ET1=1;
EA=1;
}
void Timer1() interrupt 3 //定时器1中断模式3 1mS
{
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
TR1=1;
if(flg==1)
time++; //计数值加一
}
void init_PWM() //pwm初始化
{
AUXR=0x80;
//AUXR1=0x00; //默认
TMOD=0x12; //设定时器1为16位模式定时器0为8位自动重装模式
CMOD=0x04; //设定时器0工作在1T模式
TH0=0xff; //定时器0=256-(12*1000000/(256*1000HZ))就溢出
TR0=1; //启动定时器0
CCAP0H=0x80; //设PWM1端口输出50%脉宽的方波
CH=0;
CL=0;
CR=1; //PCA定时器启动运行
CCAPM0=0x42; //设CCAPM0寄存器为8位PWM模式
P3M0=0;
P3M1=0x80; //设P3.5,P3.7口位pwm输出
}
void delay(uint z)
{
int x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
|
-
-
|