簡易電壓表仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (23.54 KB, 下載次數: 29)
下載附件
2018-12-10 16:02 上傳
0.png (17.75 KB, 下載次數: 24)
下載附件
2018-12-10 16:02 上傳
0.png (45.34 KB, 下載次數: 16)
下載附件
2018-12-10 16:02 上傳
使用方法:
打開電路圖并運行
按鍵值1,可進入一倍分壓模式
按鍵值2,可進入2.5倍分壓模式
按鍵值3,可進入10倍分壓模式
按鍵值4,可進入25倍分壓模式
(注:最終1602顯示的結果是分壓后的電壓再乘以倍數,也即1602會顯示真實的電壓值)
單片機源程序如下:
- #include <reg52.H>
- #include "iic_driver.h"
- #include "lcd1602_middle_layer.h"
- #include "keypad_driver.h"
- #include "tim_1680.h"
- #include "main.h"
- #include <string.h>
- #include "pfc8591.h"
- #include <stdio.h>
- void P_Vinit()
- {
- P_1 = 1;
- P_2_5 = 1;
- P_10 =1;
- P_25 = 1;
- P_250 = 1;
- P_500 = 1;
- P_1000 = 1;
- }
- void ChangeV(float *ucData)
- {
- if(P_1 == 0 )
- {
- *ucData = *ucData;
- }
- else if(P_2_5 == 0)
- {
- *ucData = (*ucData) * 2.5;
- }
- else if(P_10 == 0)
- {
- *ucData = (*ucData) * 10;
- }
- else if(P_25 == 0)
- {
- *ucData = (*ucData) * 25;
- }
- else if(P_250 == 0)
- {
- *ucData = (*ucData) * 250;
- }
- else if(P_500 == 0)
- {
- *ucData = (*ucData) * 500;
- }
- else if(P_1000 == 0)
- {
- *ucData = (*ucData) * 1000;
- }
- else
- {
-
- }
-
- }
- void main()
- {
- unsigned char i;
- float Vt;
- float ucData;
- char Str[20];
- vTim_Initialization();
- vLCD1602_Initialization();
- P_Vinit();
- P_1 = 0;
- while(1)
- {
- if(ucKeyData_main <= '9' && ucKeyData_main >= '0')
- {
- switch(ucKeyData_main)
- {
- case '1': P_Vinit();P_1 = 0; break;
- case '2': P_Vinit();P_2_5 = 0;break;
- case '3': P_Vinit();P_10 = 0;break;
- case '4': P_Vinit();P_25 = 0;break;
- case '5': P_Vinit();P_250 = 0;break;
- case '6': P_Vinit();P_500 = 0;break;
- case '7': P_Vinit();P_1000 =0;break;
- default:break;
- }
- while(ucKeyData_main != NOKEYDATA);
- }
-
- ucData = ucReadADC(CHL);
- ChangeV(&ucData);
- Vt = ((float)ucData/255)*5;
- sprintf(Str,"% 16d",(int)ucData);
- vLCD1602_write_string(0,0,Str);
- sprintf(Str,"% 15gV",Vt);
- vLCD1602_write_string(0,1,Str);
-
- }
- }
復制代碼
所有資料51hei提供下載:
簡易電壓表設計.rar
(165.55 KB, 下載次數: 36)
2018-12-10 09:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|