标题: 求高手指导 数控稳压电源要怎么画?proteus仿真 [打印本页]
作者: 2666dsds 时间: 2021-1-15 01:11
标题: 求高手指导 数控稳压电源要怎么画?proteus仿真
想通过下面的小项目来学习单片机,求大神指学习方法
设计一个基于单片机的数控稳压电源,输入采用键盘方式,输出电压采用数字显示, 具体要求 (1) 输入电压范围为(85%-110%)Ue,输出电压为2-10V;(2) 输出误差<=0.1V;(2) 额定电流500mA。要求选择和搭配硬件系统,设计控制算法,编写软件程序,并通过软件仿真或实际单片机控制电路验证其正确性。
作者: 2666dsds 时间: 2021-1-15 10:33
- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define DATA_LED P0
- #define DATA_TLC5615 P1
- sbit LED1=P2^1;
- sbit LED2=P2^0;
- sbit JIA1=P2^4;
- sbit JIAN1=P2^5;
- sbit SENT=P2^6;
- sbit OK=P2^7;
- sbit dian=P0^7;
- void mdleay(uint Delaytime);
- uchar a=0,b=1,c=2,n=0,flag;
- float VCC=1.2;
- void mdleay(uint Delaytime)//延时5ms子程序
- {
- uint j=0;
- for(j=0;Delaytime>0;Delaytime--)
- {
- for(j=0;j<130;j++)
- {;}
- }
- }
- void innt0() interrupt 0 using 1
- {
- uchar key;
- mdleay(5);
- key=P2&0xf0;
- switch(key)
- {case(0xe0):if(n==1)
- {if(a==9)
- a=9;
- else
- a++;
- }
- if(n==2)
- {if(b==9)
- b=9;
- else
- b++;
- }
- if(n==3)
- {if(c==9)
- c=9;
- else
- c++;
- }
- break;
- case(0xd0):if(n==1)
- {if(a==0)
- a=0;
- else
- a--;
- }
- if(n==2)
- {if(b==0)
- b=0;
- else
- b--;
- }
- if(n==3)
- {if(c==0)
- c=0;
- else
- c--;
- }
- break;
- case(0xb0):if(n==4)
- n=1;
- else
- n++;
- if(flag==1)
- {
- flag=0;
- a=0;
- b=1;
- c=2;
- DATA_TLC5615=0x00;
- n++;
- }
- break;
- case(0x70):n=0;
- flag=1;
- VCC=a*10+b+0.1*c;
- if(VCC>10)
- {VCC=10;
- a=1;
- b=0;
- c=0;
- }
- if(VCC<12)
- {
- VCC=1.2;
- a=0;
- b=1;
- c=2;
- }
- VCC=(VCC-1.2)/0.04;
- DATA_TLC5615=(int)VCC;
- break;
- default:break;
- }
- }
- main()
- {
- uchar Tab[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xA1,0x86,0x8E};
- DATA_TLC5615=0;
- DATA_LED=0xff;
- EA=1;
- EX0=1;
- IT0=1;
- n=0;
- flag=0;
- while(1)
- {
- LED1=1;
- LED2=0;
- DATA_LED=Tab[a];
- mdleay(1);
- DATA_LED=Tab[b]&0x7f;
- LED1=0;
- LED2=1;
- mdleay(1);
- LED2=0;
- }
- }
复制代码
作者: 梁廷明 时间: 2021-1-18 15:48
键盘使用说明:
1:按下 MODE 键,在键盘和旋钮之间切换
键盘模式
1:按下 SET 键
2:按下 0--9.99之间的电压值
3:按下 ENTER 键
旋钮模式
1:调节可调电阻,电压随之改变
C:\Users\cpyf230\Desktop
作者: 梁廷明 时间: 2021-1-18 15:50
- #include <reg52.h>
- #include <string.h>
- #include <intrins.h>
- #include "global.h"
- #include "adcdac.h"
- sbit DACSCLK = P2^3;
- sbit DACCS = P2^4;
- sbit DACDIN = P2^5;
- sbit CS = P3^2;
- sbit CLK = P3^3;
- sbit DIO = P3^4;
- uchar Get_AD_Result(uchar ch)
- {
- uchar i,dat1=0,dat2=0;
- CS = 0;
- CLK = 0;
- DIO = 1; _nop_(); _nop_();
- CLK = 1; _nop_(); _nop_();
- CLK = 0;
- DIO = 1; _nop_(); _nop_();
- CLK = 1; _nop_(); _nop_();
- CLK = 0;
- if(ch)
- DIO = 1;
- else
- DIO = 0;
- _nop_(); _nop_();
- CLK = 1; _nop_(); _nop_();
- CLK = 0;
- DIO = 1; _nop_(); _nop_();
- for(i=0;i<8;i++)
- {
- CLK = 1; _nop_(); _nop_();
- CLK = 0; _nop_(); _nop_();
- if(DIO) dat1 |=0x80>>i;
- }
- for(i=0;i<8;i++)
- {
- if(DIO) dat2 |=0x01<<i;
- CLK = 1; _nop_(); _nop_();
- CLK = 0; _nop_(); _nop_();
- }
- CS = 1;
- if (dat1 == dat2)
- return dat1;
- else
- return 0x00;
- }
- void Set_DAC(uint dacvalue)
- {
- uchar i;
- uint dat;
- dat = dacvalue;
- dat &= 0x03ff;
- DACCS = 0;
- DACSCLK = 0;
- for(i=0;i<12;i++)
- {
- if(dat & 0x0200)
- DACDIN = 1;
- else
- DACDIN = 0;
- DACSCLK = 1;
- dat <<= 1;
- DACSCLK = 0;
- }
- DACCS = 1;
- }
复制代码
作者: 梁廷明 时间: 2021-1-18 15:57
这应该符合你
作者: 梁廷明 时间: 2021-1-19 13:39
http://www.51hei.com/bbs/dpj-201735-1.html
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |