電路原理圖如下:
截圖格式 雙擊可以打開.png (93.6 KB, 下載次數: 50)
下載附件
2021-11-7 20:56 上傳
制作出來的實物圖如下:
照片 (2).JPG (347.57 KB, 下載次數: 49)
下載附件
2021-11-13 04:33 上傳
照片 (1).JPG (411.95 KB, 下載次數: 48)
下載附件
2021-11-13 04:33 上傳
元件型號 元件名稱 元件標號
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
|