找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4332|回复: 4
打印 上一主题 下一主题
收起左侧

基于STC12C5604AD单片机的点焊机控制器程序

  [复制链接]
跳转到指定楼层
楼主
本帖最后由 bedz 于 2022-3-24 14:15 编辑

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

电路原理图如下:


单片机源程序如下:
  1. #include "reg51.h"      
  2. typedef unsigned int u16;//对数据类型进行声明定义
  3. typedef unsigned char u8;//对数据类型进行声明定义
  4. sbit P30=P3^1;                        //数码管第2位
  5. sbit P31=P3^0;                        //数码管第1位
  6. sbit k1=P3^4;        //将单片机的P3.4端口定义为时间加
  7. sbit k2=P3^5;        //将单片机的P3.5端口定义为时间减
  8. sbit k3=P3^7;        //将单片机的P3.7端口定义为启动

  9. sbit out=P3^3;       //驱动脉冲输出
  10. //数码管真值表//
  11. u8 code LED_CODE[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //共阳数码管显示0~F的段码

  12. u16 Cntms1=0,Cntms2=0,num1,num2;ke;

  13. u8 num;                //定时变量=毫秒

  14. void Delay(unsigned long int t)
  15. {
  16.         while(--t);
  17.          
  18. }

  19. /*****************************************************加按键检测*****************************************************/
  20. /*当此函数检测到有效按键时返回1,没有检测到有效值时返回0*/
  21. bit key0(void)
  22. {
  23.         static unsigned char a = 0;
  24.         if(k1 == 0)                                       
  25.         {
  26.                 if(a < 50)                                
  27.                         a++;                                
  28.         }
  29.         else                                                
  30.                 a = 0;
  31.         
  32.         if(a == 49)                                
  33.                 return 1;                                
  34.         else
  35.                 return 0;                                
  36. }
  37. /*****************************************************减按键检测*****************************************************/
  38. /*当此函数检测到有效按键时返回1,没有检测到有效值时返回0*/
  39. bit key1(void)
  40. {
  41.         static unsigned char i = 0;        
  42.         if(k2 == 0)                                       
  43.         {
  44.                 if(i < 50)                                
  45.                         i++;                                
  46.         }
  47.         else                                                
  48.                 i = 0;
  49.         
  50.         if(i == 49)                                
  51.                 return 1;                                
  52.         else
  53.                 return 0;                                
  54. }
  55. /*****************************************************启动按键检测*****************************************************/
  56. /*当此函数检测到有效按键时返回1,没有检测到有效值时返回0*/
  57. bit key2(void)
  58. {
  59.         static unsigned  int l = 0;        //定义静态变量,用来记录延时计数.
  60.         if(k3 == 0)                                // K3(按下-松开)当K3为低电平时记数变量开始自增.i计数达到99输出有效值1 未达到99时输出0
  61.         {
  62.                 if(l <1000)                                //如果按键计数值小于1000
  63.                         l++;                                //那么计数自增
  64.         }
  65.         else                                                //K3高电平i清0
  66.                 l = 0;
  67.         
  68.         if(l == 999)                                //如果变量i的值累加到999,
  69.                 return 1;                                //就返回1,说明已检测到的按键有效
  70.         else
  71.                 return 0;                                //返回0,说明检测到按键值无效
  72. }


  73. /**************************************************************************************************************
  74.                 数码管动态显示程序
  75. **************************************************************************************************************/
  76. void display()
  77. {
  78.         static u8 i=0;
  79.       
  80.                   
  81.          
  82.         if(i==0)
  83.         {
  84.                 P30=1;
  85.                 P31=0;
  86.                 P1=LED_CODE[num/10];
  87.                                 for(ke = 0;ke <100;ke++);        
  88.                             P31=1;
  89.                                 P1=0Xff;
  90.                                 
  91.                 i=1;
  92.                                 
  93.         }
  94.         else
  95.         {

  96.                 P30=0;
  97.                 P31=1;
  98.                 P1=LED_CODE[num%10];
  99.                                 for(ke = 0;ke <100;ke++);        
  100.                                 P30=1;
  101.                                 P1=0Xff;                 
  102.                                 
  103.                 i=0;
  104.                         
  105.         }
  106. }



  107. //****************************************************主函数****************************************************//
  108. void main()
  109. {      
  110.                   bit m = 0,m1 = 0,m2=0;                        //声明一个位变量.存储按键状态.
  111.          unsigned char i;
  112.         out=0; //初始化输出端口
  113.         num=30;//定时变量赋初值
  114.         
  115.             
  116.                 k1 = 1;                                                //加按键输入端口电平置高
  117.                 k2 = 1;                                                //减按键输入端口电平置高
  118.                 k3 = 1;               
  119.                                        
  120.                         while(1)                                        //主循环
  121.                         {
  122.                            
  123.                                 m  = key0();                        //采集加按键
  124.                                 m1 = key1();                        //采集减按键
  125.                             m2 = key2();                        //采集按键
  126.                                 if(m == 1)                                //如果采集到加按键值.
  127.                                 {
  128.                                  if(num < 99)
  129.                                         num++;                                //计数自增        
  130.                                 }
  131.                                 if(m1 == 1)                                //如果采集到减按键值.
  132.                                 {
  133.                                  if(num >1)        
  134.                                         num--;                                //计数自减
  135.                                   }
  136.                                  if(m2 == 1)
  137.                                          { for(i=0;i<2;i++)        //for循环大括号中的程序循环执行2次
  138.                                           {
  139.                                                 out=1;                        //将P3.3口赋值 1,对外输出高电平
  140.                                                 Delay(num*50);        //调用延时程序;更改延时数字可以更改延时长度;用于改变输出脉冲时间
  141.                                                 out=0;                        //将P3.3口赋值 0,对外输出低电平
  142.                                                 Delay(3000);
  143.                                            }
  144.                                          }                        
  145.                         display();//显示数值        
  146.                     }
  147. }
复制代码

3.JPG (88.35 KB, 下载次数: 101)

3.JPG

评分

参与人数 1黑币 +70 收起 理由
admin + 70 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏20 分享淘帖 顶6 踩
回复

使用道具 举报

沙发
ID:430492 发表于 2022-3-24 13:32 | 只看该作者
这个程序使用率很高啊!!
回复

使用道具 举报

板凳
ID:1045132 发表于 2022-9-18 22:07 | 只看该作者
怎么没人给楼主点赞
回复

使用道具 举报

地板
ID:993738 发表于 2023-2-5 17:25 | 只看该作者
点了,期待后续使用体验
回复

使用道具 举报

5#
ID:40134 发表于 2023-6-19 16:10 | 只看该作者
这个数码管段码不对吧?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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