基于STC12C5604AD点焊机控制器
代码开源!PCB布线简单,就不发上来献丑!

电路原理图如下:
image.png
单片机源程序如下:
#include "reg51.h"      
  • typedef unsigned int u16;//对数据类型进行声明定义
  • typedef unsigned char u8;//对数据类型进行声明定义
  • sbit P30=P3^1;                        //数码管第2位
  • sbit P31=P3^0;                        //数码管第1位
  • sbit k1=P3^4;        //将单片机的P3.4端口定义为时间加
  • sbit k2=P3^5;        //将单片机的P3.5端口定义为时间减
  • sbit k3=P3^7;        //将单片机的P3.7端口定义为启动
  • sbit out=P3^3;       //驱动脉冲输出
  • //数码管真值表//
  • u8 code LED_CODE[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //共阳数码管显示0~F的段码
  • u16 Cntms1=0,Cntms2=0,num1,num2;ke;
  • u8 num;                //定时变量=毫秒
  • void Delay(unsigned long int t)
  • {
  •         while(--t);
  •          
  • }
  • /*****************************************************加按键检测*****************************************************/
  • /*当此函数检测到有效按键时返回1,没有检测到有效值时返回0*/
  • bit key0(void)
  • {
  •         static unsigned char a = 0;
  •         if(k1 == 0)                                       
  •         {
  •                 if(a < 50)                                
  •                         a++;                                
  •         }
  •         else                                                
  •                 a = 0;
  •         
  •         if(a == 49)                                
  •                 return 1;                                
  •         else
  •                 return 0;                                
  • }
  • /*****************************************************减按键检测*****************************************************/
  • /*当此函数检测到有效按键时返回1,没有检测到有效值时返回0*/
  • bit key1(void)
  • {
  •         static unsigned char i = 0;        
  •         if(k2 == 0)                                       
  •         {
  •                 if(i < 50)                                
  •                         i++;                                
  •         }
  •         else                                                
  •                 i = 0;
  •         
  •         if(i == 49)                                
  •                 return 1;                                
  •         else
  •                 return 0;                                
  • }
  • /*****************************************************启动按键检测*****************************************************/
  • /*当此函数检测到有效按键时返回1,没有检测到有效值时返回0*/
  • bit key2(void)
  • {
  •         static unsigned  int l = 0;        //定义静态变量,用来记录延时计数.
  •         if(k3 == 0)                                // K3(按下-松开)当K3为低电平时记数变量开始自增.i计数达到99输出有效值1 未达到99时输出0
  •         {
  •                 if(l <1000)                                //如果按键计数值小于1000
  •                         l++;                                //那么计数自增
  •         }
  •         else                                                //K3高电平i清0
  •                 l = 0;
  •         
  •         if(l == 999)                                //如果变量i的值累加到999,
  •                 return 1;                                //就返回1,说明已检测到的按键有效
  •         else
  •                 return 0;                                //返回0,说明检测到按键值无效
  • }
  • /**************************************************************************************************************
  •                 数码管动态显示程序
  • **************************************************************************************************************/
  • void display()
  • {
  •         static u8 i=0;
  •       
  •                   
  •          
  •         if(i==0)
  •         {
  •                 P30=1;
  •                 P31=0;
  •                 P1=LED_CODE[num/10];
  •                                 for(ke = 0;ke <100;ke++);        
  •                             P31=1;
  •                                 P1=0Xff;
  •                                 
  •                 i=1;
  •                                 
  •         }
  •         else
  •         {
  •                 P30=0;
  •                 P31=1;
  •                 P1=LED_CODE[num%10];
  •                                 for(ke = 0;ke <100;ke++);        
  •                                 P30=1;
  •                                 P1=0Xff;                 
  •                                 
  •                 i=0;
  •                         
  •         }
  • }
  • //****************************************************主函数****************************************************//
  • void main()
  • {      
  •                   bit m = 0,m1 = 0,m2=0;                        //声明一个位变量.存储按键状态.
  •          unsigned char i;
  •         out=0; //初始化输出端口
  •         num=30;//定时变量赋初值
  •         
  •             
  •                 k1 = 1;                                                //加按键输入端口电平置高
  •                 k2 = 1;                                                //减按键输入端口电平置高
  •                 k3 = 1;               
  •                                        
  •                         while(1)                                        //主循环
  •                         {
  •                            
  •                                 m  = key0();                        //采集加按键
  •                                 m1 = key1();                        //采集减按键
  •                             m2 = key2();                        //采集按键
  •                                 if(m == 1)                                //如果采集到加按键值.
  •                                 {
  •                                  if(num < 99)
  •                                         num++;                                //计数自增        
  •                                 }
  •                                 if(m1 == 1)                                //如果采集到减按键值.
  •                                 {
  •                                  if(num >1)        
  •                                         num--;                                //计数自减
  •                                   }
  •                                  if(m2 == 1)
  •                                          { for(i=0;i<2;i++)        //for循环大括号中的程序循环执行2次
  •                                           {
  •                                                 out=1;                        //将P3.3口赋值 1,对外输出高电平
  •                                                 Delay(num*50);        //调用延时程序;更改延时数字可以更改延时长度;用于改变输出脉冲时间
  •                                                 out=0;                        //将P3.3口赋值 0,对外输出低电平
  •                                                 Delay(3000);
  •                                            }
  •                                          }                        
  •                         display();//显示数值        
  •                     }
  • }
  • 复制代码
    image.png