找回密码
 注册

QQ登录

只需一步,快速开始

搜索

数控电源 STC12单片机+TL494 LED驱动源程序与原理图PCB文件

[复制链接]
coolfire 发表于 2021-4-17 01:42:01 | 显示全部楼层 |阅读模式
原理图和PCB文件: sch_pcb.zip (4.02 MB, 售价: 2 E币)
C语言代码: c代码.zip (65.17 KB, 售价: 1 E币)
STC12+TL494电路原理图如下:
223108syxasysyb96uub6w.png
Altium Designer画的原理图和PCB图如下:(附件中可下载工程文件)
223108rcdxedhdx3lxq8ls.png
单片机数控电源源程序如下:
  1. #include "STC12C5A60S2.h"
  2. #include "lcd.h"
  3. #include "ADC.h"
  4. #include "uart.h"
  5. #include "key.h"
  6. //--定义全局变量--//
  7. unsigned char PuZh[16];

  8. float Vout=0,Iout=0;
  9. /*******************************************************************************
  10. * 函 数 名         : main
  11. * 函数功能                   : 主函数
  12. * 输    入         : 无
  13. * 输    出         : 无
  14. *******************************************************************************/
  15. void main(void)
  16. {
  17.         unsigned int temp,i;
  18.         //初始化
  19.         InitADC();
  20.         LcdInit();
  21.         PWM_Init();
  22.         
  23.         while(1)
  24.         {
  25.                 Key_Scan();//按键扫描
  26.                 for(temp=0,i=0;i<100;i++)
  27.                 {
  28.                         temp+=GetADCResult(0);//测电压,取十次平均值
  29.                 }
  30.                 Vout=temp/1241.38;//计算实际电压
  31.                 for(temp=0,i=0;i<100;i++)
  32.                 {
  33.                         temp+=GetADCResult(1);//测电流,取十次平均值
  34.                 }
  35.                 Iout=temp/597.33;//计算实际电流
  36.                 sprintf(PuZh,"S:V:%.1f",(float)VSet/10);//显示电压设定值
  37.                 LcdShowStr(0,0,PuZh);
  38.                 sprintf(PuZh,"M:V:%.1f I:%.1f",Vout,Iout);//显示测量电压电流
  39.                 LcdShowStr(0,1,PuZh);
  40.                
  41.         }                                
  42. }
复制代码
  1. #include "key.h"
  2. #include "delay.h"
  3. unsigned char VSet=120;
  4. void Key_Scan(void)
  5. {
  6.         static unsigned char KEY_Flag=0;
  7.         if(LEFT==0)//左键
  8.         {
  9.                 if((KEY_Flag&LEFT_Flag)==0)
  10.                 {
  11.                         delay_ms(5);
  12.                         if(LEFT==0)
  13.                         {
  14.                                 KEY_Flag|=LEFT_Flag;
  15.                                 if(VSet>90)VSet--;
  16.                                 Set_PWM1((unsigned char)VSet*1.24138);
  17.                               
  18.                         }
  19.                 }
  20.         }
  21.         else
  22.         {
  23.                 KEY_Flag&=(~LEFT_Flag);
  24.         }
  25.         if(RIGHT==0)//右键
  26.         {
  27.                 if((KEY_Flag&RIGHT_Flag)==0)
  28.                 {
  29.                         KEY_Flag|=RIGHT_Flag;
  30.                         delay_ms(5);
  31.                         if(RIGHT==0)
  32.                         {
  33.                               
  34.                                 if(VSet<120)VSet++;
  35.                                 Set_PWM1((unsigned char)VSet*1.24138);
  36.                         }
  37.                 }
  38.         }
  39.         else
  40.         {
  41.                 KEY_Flag&=(~RIGHT_Flag);
  42.         }
  43. }
  44. void PWM_Init(void)
  45. {
  46. CCON|=0;   
  47. CL=0;      
  48. CH=0;   
  49. CMOD|=0x02;
  50. CCAP1H=0x80;  
  51. CCAP1L=0x80;  
  52. PCA_PWM1=0x00;
  53. CCAPM1=0x42;  
  54. CR=1;
  55. Set_PWM1((unsigned char)VSet*1.24138);  
  56. }
  57. void Set_PWM1(unsigned char duty)
  58. {
  59.         unsigned char temp;
  60.         if (duty == 0)                      //PWM固定输出低
  61.         {
  62.                 //-       -       -       -       -       -       EPCnH   EPCnL
  63.                 PCA_PWM1 = 0x03;            //PWM模式下,CCAPnL,CCAPnH第九位
  64.                 temp = 0xFF;
  65.         }
  66.         else if (duty == 100)             //PWM固定输出高
  67.         {
  68.                 //-       -       -       -       -       -       EPCnH   EPCnL
  69.                 PCA_PWM1 = 0x00;            //PWM模式下,CCAPnL,CCAPnH第九位
  70.                 temp = 0;
  71.         }

  72.         else
  73.         {
  74.                 PCA_PWM1 = 0x00;
  75.                 temp = 256 -duty;
  76.         }
  77.         CCAP1L = temp;
  78.         CCAP1H = temp;
  79. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-11-23 15:55

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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