电路原理图如下:
制作出来的实物图如下:
元件型号 元件名称 元件标号
TL431 稳压 1
10uF 电解电容 C1
20pf 瓷片电容 C2, C3
220UF 电解电容 C5, C8
104 瓷片电容 C6, C9
发光二极管 发光二极管 D1
SMG04_1 数码管 DS1
ADJ 接线柱 J1
电源输入 电源 P1
9012 三极管 Q1, Q2, Q3, Q4
1K 电阻 R1, R2, R3, R4, R8, R10, R11, R12,R13
0.1 大电阻 R7
10K 电阻 R5,R9
103 可调电阻 RT1
SW-PB 按键 S1, S2, S3, S4, S5
电源开关 电源开关 SW1
STC89C52 单片机 U1
TLC5615 DA转换芯片 U2
9Z24N 场效应管 U3
LM358 运放芯片 U4
ADC0832 AD采集芯片 U5
7805 稳压芯片 VR1
12M 晶振 Y1
单片机源程序如下:
代码:
- #include "reg52.h"
- //宏定义
- #define uchar unsigned char
- #define uint unsigned int
- //按键定义
- sbit KEY1= P3^7;
- sbit KEY2= P3^6;
- sbit KEY3= P3^5;
- sbit KEY4= P3^4;
- //数码管定义
- sbit W1= P2^6;
- sbit W2= P2^4;
- sbit W3= P2^2;
- sbit W4= P2^0;
- //DAC定义
- sbit CS_5615=P1^5;
- sbit CLK_5615=P1^6;
- sbit DAT_5615=P1^7;
- //ADC定义
- sbit CS=P1^2;
- sbit CLK=P1^1;
- sbit DIO=P1^0;
-
- uint U;
- uchar GETU=0;
- bit flag=0;
- uint a=0;
-
- uchar code table[]=
- {
- 0x5F,0x44,0x9D,0xD5,0xC6,0xD3,0xDB,0x47,0xDF,0xD7
- }; //共阳数码管段码表 没有小数点 0~9
- uchar code table1[]=
- {
- 0x7F,0x64,0xBD,0xF5,0xE6,0xF3,0xFB,0x67,0xFF,0xF7,0x5e
- };//带小数点的编码 0~9
- void delay_ms(uint z) //延时函数
- {
- uint a,b;
- for(a=z;a>0;a--)
- for(b=5;b>0;b--);
- }
- void shuma(uint buf)
- {
- uchar a,b,c,d;
- a=buf/1000;
- b=buf%1000/100;
- c=buf%100/10;
- d=buf%10;
- W1=0;W2=1;W3=1;W4=1;
- P0=~table[a];
- delay_ms(60);
- W1=1;W2=0;W3=1;W4=1;
- P0=~table1[b];
- delay_ms(60);
- W1=1;W2=1;W3=0;W4=1;
- P0=~table[c];
- delay_ms(60);
- W1=1;W2=1;W3=1;W4=0;
- P0=~table1[10];
- delay_ms(60);
- }
- void tlc_5615(uint buf)
- {
- uint a,c;
- c=buf;
- CS_5615=0;
- for(a=16;a>0;a--)
- {
- DAT_5615=c>>15;
- c=c<<1;
- CLK_5615=1;
- CLK_5615=0;
- }
- CLK_5615=1;
- CLK_5615=0;
- CLK_5615=1;
- CLK_5615=0;
- CS_5615=1;
- }
- unsigned int A_D()
- {
- unsigned char i,dat;
- CS=1; //一个转换周期开始
- CLK=0; //为第一个脉冲作准备
- CS=0; //CS置0,片选有效
-
- DIO=1; //DIO置1,规定的起始信号
- CLK=1; //第一个脉冲
- CLK=0; //第一个脉冲的下降沿,此前DIO必须是高电平
- DIO=1; //DIO置1, 通道选择信号
- CLK=1; //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0
- CLK=0; //第二个脉冲下降沿
- DIO=0; //DI置0,选择通道0
- CLK=1; //第三个脉冲
- CLK=0; //第三个脉冲下降沿
- DIO=1; //第三个脉冲下沉之后,输入端DIO失去作用,应置1
- CLK=1; //第四个脉冲
- for(i=0;i<8;i++) //高位在前
- {
- CLK=1; //第四个脉冲
- CLK=0;
- dat<<=1; //将下面储存的低位数据向右移
- dat|=(unsigned char)DIO; //将输出数据DIO通过或运算储存在dat最低位
- }
- CS=1; //片选无效
- return dat; //将读出的数据返回
- }
- //主函数
- void main(void)
- {
- U=0;
- while(1)
- {
- tlc_5615(U);
- shuma(U/8*10);
- if(flag==0)
- {
- if(KEY1==0)
- {
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- if(KEY1==0)
- {
- if(U<960) //1V对应的是80 10位ad
- U=U+8;
- }
- }
- if(KEY2==0)
- {
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- if(KEY2==0)
- {
- if(U>=8)
- U=U-8;
- }
- }
- if(KEY3==0)
- {
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- if(KEY3==0)
- {
- U=400;
- }
- }
- if(KEY4==0)
- {
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- shuma(U/8*10);
- if(KEY4==0)
- {
- U=0;
- }
- }
- }
- GETU=A_D();
- if(GETU>=12) //0.0196V
- {
- U=0;
- a=0;
- flag=1;
- }
- }
- }
-
单片机是通用的无论51还是52、无论stc还是at都一样,引脚功能都一样,原理图和程序也是一样的。
原理图中的. sch等格式是要用protel99se打开的,没有软件的不要紧,我已帮您转换成word格式和pdf格式的了。
程序中的.c文件可以用记事本打开,就是程序了。其他的是写程序是自动生成的,没什么用的。
程序原理图下载:
资料.7z
(2.22 MB)
(下载次数: 90, 2021-11-13 04:37 上传)
下载积分: 黑币 -5