简单的一个数控电源,使用51作为主芯片,DA芯片用的是八位的DAC0832.误差不超过0.01V,三个按键控制加减电压和功能设定,很简单且实用。控制方便,精准度适合平时自己使用。下面是仿真图和程序。
单片机源程序如下:
- #include<reg52.h>
- #include<math.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code table[]={
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e};
- sbit key1=P3^4; //加
- sbit key2=P3^5; //减
- sbit key3=P3^6; //模式设置
- uint flag; //标志位
- uchar num1,z,x; //x显示整数位,z显示小数位
- float num;
- //num1每次+17,即加1v,num每次加1.7,即加0.1v ,num1和nm都是给DA赋值的
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void shuzhi()
- {
- if(num>=17)
- {
- num=0;
- num1=num1+17;
- }
- if(num1>=255)
- {
- num1=0;
- }
- if(num<=0)
- {
- num=0;
- }
- }
- void KEY1()
- {
- if(key1==0)
- {
- delayms(10);
- if(key1==0)
- {
-
- num=num+1.7;
- while(!key1);
- }
- }
- }
- void KEY2()
- {
- if(key1==0)
- {
- delayms(10);
- if(key1==0)
- {
- num1=num1+17;
- while(!key1);
- }
- }
- }
- void KEY3()
- {
- if(key2==0)
- {
- delayms(10);
- if(key2==0)
- {
- num=num-1.7;
- while(!key2);
- }
- }
- }
- void KEY4()
- {
- if(key2==0)
- {
- delayms(10);
- if(key2==0)
- {
- num1=num1-17;
- while(!key2);
- }
- }
-
- }
- void set_v()
- {
- P1=num1+num;//赋值给P1口
- if(flag==1)
- {
- KEY2();
- KEY4();
- }
- if(flag==2)
- {
- KEY1();
- KEY3();
- }
- }
- void display() //显示
- {
- x=num1/17;
- z=num/1.7;
- P0=table[x];
- P2=0X40;
- delayms(10);
- P0=0x7f;
- P2=0X40;
- delayms(10);
-
- P0=table[z];
- P2=0X80;
- delayms(10);
- }
- void main()
- {
- while(1){
- display();
- shuzhi();
- set_v();
-
- if(key3==0)
- {
- delayms(10);
- if(key3==0)
- {
- flag++;
- if(flag>2){flag=0;}
- }
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
数控电源.zip
(79.29 KB, 下载次数: 149)
|