标题: 求帮助 单片机tlc5615+tlc549 线性电源源程序 Proteus仿真原理图 [打印本页]

作者: hhhhhhjjjjjjjjj    时间: 2020-11-23 19:20
标题: 求帮助 单片机tlc5615+tlc549 线性电源源程序 Proteus仿真原理图
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)

   采用tlc5615进行数模转换将按键的值送给数码管显示
  tlc549进行模数转换将输出的实际电压送给数码管显示

单片机源程序如下:
  1. #include "Tlc549.h"
  2. #include "kpad.h"
  3. #include "LCD1602Display.h"
  4. #include "TLC5615.h"
  5. #define smgport P0
  6. #define smgbit  P2

  7. #include<reg51.h>
  8. #include <intrins.h>
  9. #define uchar unsigned char
  10. #define uint  unsigned int
  11. uchar code smgdm[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};                                                  
  12. uchar code tab[]={"0123456789:"};
  13. uchar code tab1[]={"  Set_U=    mV  "};
  14. uchar code tab2[]={"  Rea_U=    mV  "};
  15. bit flag_10ms,flag_1ms;
  16. bit flag_Keyover,flag_swap;
  17. uchar T0cnt,dispcnt;

  18. void displcd(uint dd,uchar line);
  19. /****************************************************************************/
  20. void timer0(void) interrupt 1 using 1
  21. {
  22.    TH0=-1000/256;
  23.    TL0=-1000%256;
  24.    T0cnt++;
  25.    flag_1ms=1;
  26.    if(T0cnt==10)
  27.     {
  28.      flag_10ms=1;
  29.          T0cnt=0;
  30.     }
  31. }

  32. uint Setv=0;
  33. uint Trdata=5;
  34. /****************************************************************************/     

  35. void Key_Process_smg(uchar Kd,bit flag)
  36.   {float tp;
  37.    if(flag)
  38.           {if((Kd!=10)&&(Kd!=12)&&(Kd!=0xff)) Setv=10*Setv+Kd;
  39.            if(Kd==10) Setv=0;                  
  40.            
  41.            if(Kd==12)
  42.              {tp=19.456*Setv/1024.0;
  43.               Trdata=(uint)tp;
  44.                   flag_swap=0;
  45.                  }
  46.           }        
  47.   }

  48. /****************************************************************************/


  49. /****************************************************************************/

  50. void dispsmg(uint dd,bit flag_dp)
  51.         {
  52.          unsigned char dispdd[4];
  53.          dispdd[3]=smgdm[dd/1000];
  54.          dispdd[2]=smgdm[dd/100%10];
  55.          dispdd[1]=smgdm[dd/10%10];
  56.          dispdd[0]=smgdm[dd%10];
  57.          
  58.          if(flag_dp)
  59.            {smgport=0;
  60.             smgport=~dispdd[dispcnt];
  61.                 smgbit=0xe3&smgbit;
  62.             smgbit=smgbit^(dispcnt<<2);
  63.            }
  64.          dispcnt++;if(dispcnt==4)dispcnt=0;
  65.         }

  66.   uchar add[10],j;
  67. /****************************************************************************/

  68. void main(void)
  69. {
  70.   TMOD=0x01;
  71.   TH0=-1000/256;
  72.   TL0=-1000%256;
  73.   EA=ET0=TR0=1;


  74.   while(1)
  75.          { uchar Kval,k;
  76.            uint Rv,tmp;
  77.            float dfp;

  78.            Kval=Kscan(flag_10ms);         
  79.            flag_10ms=0;
  80.            Key_Process_smg(Kval,flag_Keyover);            
  81.            flag_Keyover=0;
  82.            dac_5615(Trdata);

  83.            if(flag_swap)  tmp=Setv;
  84.            else                   tmp=Rv;
  85.            dispsmg(tmp,flag_1ms);
  86.            flag_1ms=0;

  87.            tmp=0;
  88.             add[j]=TLC549();
  89.             j=++j%10;
  90.             for(k=0;k<10;k++)
  91.              {tmp=tmp+add[k];}
  92.             tmp=tmp/10;
  93.             dfp=2495.0*10.95*tmp/255;
  94.             Rv=(uint)dfp;
  95.                
  96.           }
  97. }
复制代码

程序有问题:
线性电源.zip (42.4 KB, 下载次数: 41)


作者: 51hei团团    时间: 2020-11-23 20:57
这个数码管显示好像不对啊
作者: 陈岁穗穗穗    时间: 2021-10-30 18:18
数码管的库文件好像有点问题
作者: heicad    时间: 2021-10-30 20:23
陈岁穗穗穗 发表于 2021-10-30 18:18
数码管的库文件好像有点问题

楼主这个程序有问题,你还是去研究这个吧,这个仿真是Proteus7.5版本的 我测试了 基本ok:http://www.51hei.com/bbs/dpj-97480-1.html




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1