长汀无线电厂交流论坛

 找回密码
 注册
查看: 4645|回复: 16
打印 上一主题 下一主题

我的白光控制器也完工了

  [复制链接]
跳转到指定楼层
楼主
发表于 2011-8-1 21:38:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      原本在any那里淘了一个成品T12白光控制器,用起来也不错。可是看见大家都自己动手,我也瞎折腾了一个采用STC单片机的
T12白光控制器,用了几天自我感觉良好。

回复

使用道具 举报

沙发
发表于 2011-8-1 21:43:08 | 只看该作者
再完善一下,弄个成品板出来就更好了
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2011-8-1 21:46:35 | 只看该作者
单片机是STC12C5A08S2,两个小按纽是调节温度的,大按纽用于启动和暂停。
3位数码管的左边一位显示温度档次,右边一位在暂停时显示,中间一位有待后续开发利用。
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2011-8-1 22:09:24 | 只看该作者
回复 ydm_ydm 的帖子

是的,这就是个实验品,自己练习着玩的。
回复 支持 反对

使用道具 举报

5#
发表于 2011-8-4 11:24:05 | 只看该作者
这个,不知能不能公开一下电路程序呢,这样子大伙都有得玩啦,独乐不如众乐嘛
回复 支持 反对

使用道具 举报

6#
发表于 2011-8-4 23:57:45 | 只看该作者
不懂咋用STC单片机的路过。。。。。。。。
回复 支持 反对

使用道具 举报

7#
 楼主| 发表于 2011-8-6 23:27:51 | 只看该作者
回复 Ly7 的帖子

电路也是参考论坛内看到的电路拼凑的,焊好后能工作。虽说电路能工作,但是准确温度不知道,只是凭实际焊接时的融锡情况大致定了几个温度等级。下面是控制板的电路图,请各位指点。

回复 支持 反对

使用道具 举报

8#
发表于 2011-8-7 12:13:20 | 只看该作者
支持折腾!
回复 支持 反对

使用道具 举报

9#
发表于 2011-8-14 13:49:19 | 只看该作者
这个程序是重点.源码不要.发个HEX可否?
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2011-8-17 20:36:08 | 只看该作者
回复 yoso 的帖子

程序比较粗糙简单,只是能运行而已,其中ADC部分的代码用的是芯片手册中的。由于图省事在电路和程序中都未考虑环境温度的影响,因此要根据环境温度调整设定的温度档次(好在用按纽调整非常方便)。
程序清单如下:

/* 白光烙铁控制程序 */
/* 3位共阴数码管,第一位显示温度;第二位暂不用;第三位在暂停时显示(与第一位显示的数字相同) */
/* 左侧升温键,右侧降温键,下方为暂停/开机键 */
#include "reg51.h"
#include "intrins.h"
typedef unsigned char BYTE;
typedef unsigned int WORD;
sfr ADC_CONTR   =   0xBC;                // ADC 控制寄存器
sfr ADC_RES     =   0xBD;                  // ADC 转换结果高8位寄存器
sfr ADC_RESL    =   0xBE;                  // ADC 转换结果低2位寄存器
sfr P1ASF       =   0x9D;                      // P1 各位第二功能控制寄存器
#define ADC_POWER   0x80              // ADC 开关
#define ADC_FLAG    0x10                 // ADC 转换完成标志
#define ADC_START   0x08               // ADC 检测开始
#define ADC_SPEEDLL 0x00             // ADC 转换周期(420 clocks)
sbit Out1 = P3^6;            // P3.6控制P-mos导通/截至
sbit LED  = P1^0;            // P1.0用作LED显示
void InitADC();
BYTE GetADCResult();
void delay(BYTE ms);
void ajjc(void);
void ajjp(void);
void ajjp2(void);
BYTE ch = 7;                                     // 当前ADC输入口为P1.7
BYTE Vin;                                           // 输入电压
BYTE smgc[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
             0x77,0x7c,0x58,0x5e,0x79,0x71,0x76};
sbit smg1 = P2^1;                   // P2.1用作第一位数码管阴极
sbit smg2 = P2^2;                 // P2.2用作第二位数码管阴极(未使用)
sbit smg3 = P2^3;  // P2.3用作第三位数码管阴极
sbit ajz = P2^5;  // P2.5用作升温键
sbit ajf = P2^6;  // P2.6用作降温键
sbit ajp = P2^4;  // P2.4用作暂停键
BYTE tmpv = 10;                     // 设定初始温度
BYTE i = 8;  // 与初始温度对应的显示数值
BYTE ys = 25;  // 按键消抖延时值
void main()
{
     Out1 = 1;  // P-mos管截止
     smg1 = 0;                 // 第1位数码管显示初始温度
     smg3 = 0;                 // 第3位数码管同时显示,说明程序为暂停状态
     P0 = smgc;                 // 显示的数值
     InitADC();                            // 初始化ADC
     ajjp2();  // 检测3个按键,开始工作或调温
     while(1)
     {
           ajjp();
           Vin = GetADCResult();  
           if(Vin <= tmpv)
           {
           LED = 0;            // 显示正在加热
                          Out1 = 0;           // 开始加热
           delay(20);         
           Out1 = 1;     // 停止加热
           LED = 1;
           delay(20);
           }  
     }
}
/*------------ 初始化 ADC -----------------------*/
void InitADC()
{
    P1ASF = 0x80;                      // 只将P1.7设置为ADC输入口
    ADC_RES = 0;                       // 清空ADC转换结果寄存器
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
    delay(20);                     
}
/*------------ ADC 转换 -------------------------*/
BYTE GetADCResult()
{
    ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
_nop_();
_nop_();
_nop_();
_nop_();
    while(!(ADC_CONTR & ADC_FLAG));     //等待转换完成
ADC_CONTR = 0;
    return ADC_RES;         
}
/*------------ 延时 -----------------------------*/
void delay(BYTE ms)
{
BYTE i, j;
while(ms--)
{
     for(j=0; j<100; j++)
     {
          for(i = 0; i < 100; i++);
     }   
}
}
/*------- 检测暂停键进入暂停 --------------------*/
void ajjp(void)
{
    ajp = 1;
    _nop_();
    _nop_();
   _nop_();
    if(ajp == 0)
    {
        delay(ys);                   // 按键消抖
        if(ajp == 0)                 // 检测到按暂停键
       {
smg3 = 0;   // 第3位数码管亮,显示暂停
delay(100);
ajjp2();
        }
    }
    ajjc();
}
/*------- 检测暂停键恢复正常工作状态 ------------*/
void ajjp2(void)
{
     while(1)                                  // 检测到再次按暂停键
    {
ajp = 1;
_nop_();
_nop_();
_nop_();
if(ajp == 0)
{
       delay(ys);                     // 按键消抖
       if(ajp == 0)                  // 检测到再次按暂停键
      {
  smg3 = 1;
  break;           // 程序正常运行
     }
}
ajjc();
     }
}
/*------- 检测控温键,修改温度值--------------*/
void ajjc(void)
{
/* 检测升温键 */
     ajz = 1;   
     _nop_();
     _nop_();
     _nop_();
     if(ajz == 0)
    {
         delay(ys);                         // 按键消抖
         if(ajz == 0)
         {
   if(tmpv < 16)  // 预设最高温度对应值“F”
   {
           i++;
                          P0 = smgc;
           tmpv = tmpv + 1;
   }
         }
    }
/* 检测降温键 */
      ajf = 1;
     _nop_();
     _nop_();
     _nop_();
     if(ajf == 0)
    {  
          delay(ys);              // 按键消抖
          if(ajf == 0)
         {
                if(i > 0)
{
                      i--;
       P0 = smgc;
       tmpv = tmpv - 1;
                 }
           }
      }
}







回复 支持 反对

使用道具 举报

11#
 楼主| 发表于 2011-8-17 20:40:25 | 只看该作者
HEX文件见附件。
t12ct.rar (674 Bytes, 下载次数: 7)
回复 支持 反对

使用道具 举报

12#
发表于 2011-8-20 15:06:29 | 只看该作者
电路很简洁,不过我没有这种单片机,如果用51系列的单片机就好了。
回复 支持 反对

使用道具 举报

13#
发表于 2011-8-20 16:32:47 | 只看该作者
非常感谢./
回复 支持 反对

使用道具 举报

14#
发表于 2011-8-20 18:34:34 | 只看该作者
不错,但是整板控制板太大了,加上一个电源就更大了,如果用2051,再改一下电路板,小一点就更好了。
回复 支持 反对

使用道具 举报

15#
 楼主| 发表于 2011-8-20 22:45:53 | 只看该作者
回复 panbangwen 的帖子

STC单片机就是兼容51系列的,而且有很大改进。我原来也就会用51,不想用其他类型单片机,但是又觉得传统51系列单片机的性能和功能似乎又比不上PIC和AVR等,所以很长一段时间就不玩单片机了。后来看到宏晶出的STC单片机几乎完全兼容传统51系列,而且增加和改进了很多功能,例如IO口的使用比以前灵活了;增加了ADC等功能、才对单片机又有了兴趣。
回复 支持 反对

使用道具 举报

16#
发表于 2011-8-22 10:26:14 | 只看该作者
问题是我手头既没有STC的芯片,也没有相应的编程器。恰好手头有很多51单片机,可以直接利用。
目前的难题是如果我买了STC芯片,还要搞一套编程器,这就麻烦了。
回复 支持 反对

使用道具 举报

17#
 楼主| 发表于 2011-8-22 22:40:20 | 只看该作者
回复 panbangwen 的帖子

需要4样东西就行了
1.  编译软件 Keil uVision3 ,网上很多。
2.  STC官方烧录工具-非安装版STC_ISP_V488.exe,从宏晶官网下载。
3.  STC下载器(最好是USB口的,支持WIN7的,同时支持5V和3V芯片),淘宝上有(20多元)。
4.  功能适用的STC芯片。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|长汀无线电厂交流论坛  

GMT+8, 2024-5-17 16:23 , Processed in 0.933458 second(s), 20 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表