久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
比較適合初學者自己動手仿制的電壓表
[打印本頁]
作者:
dzdiy
時間:
2015-4-11 19:39
標題:
比較適合初學者自己動手仿制的電壓表
這是一個用STC12C2052AD單片機制作的電壓表,由電子樂屋收集整理,來源于網絡。A/D轉換單元用的是單片機的自己帶的,比較適合初學者自己動手仿制。單片機采用的是STC12C2052AD,4位共陽極數碼管,TL431作為電壓基準。電路板采用的感光藍油制作,使用環保刻蝕劑刻蝕。整個電壓表制作容易,非常容易成功。
程序源碼:
/**********************************************************************
基于STC12C4052AD單片機的0-99V數字電壓表程序
P1.6口為0-5V模擬量輸入端,P1.5口連接TL431l輸出的2.5V基準電源,4位串行LED數碼管顯示
**********************************************************************/
#include <STC/STC12C2052AD.H> //單片機頭文件
#include <intrins.h> //51基本運算(包括_nop_空函數)
#define uchar unsigned char
#define uint unsigned int
#define LEDBus P3
//a3.0-b3.1-c3.2-d3.3-e3.4-f3.5-g3.7-dp1.0
sbit ge=P1^4; //個位位選
sbit shi=P1^3; //十位位選
sbit bai=P1^2; //百位位選
sbit qian=P1^1; //千位位選
sbit db=P1^0;
char d[5];
uint R,M,N;//若定義成uchar型就只能顯示2.5V以下的數值
uchar code LEDTab[]={0xc0,0xf9,0x64,0x70,0x59,0x52,0x42,0xf8,0x40,0x50};//應為沒有P3.6,所以這里管腳定義和普通的有點區別
unsigned char port[4]={0xfe,0xfd,0xfb,0xf7};
/*****************************************************************
函數名:毫秒級CPU延時函數
調 用:delay (?);
參 數:1~65535(參數不可為0)
返回值:無
結 果:占用CPU方式延時與參數數值相同的毫秒時間
備 注:應用于1T單片機時i<600,應用于12T單片機時i<125
/******************************************************************/
void delay(uint t)
{
uint i; //定義變量
for(;t>0;t--) //如果t大于0,t減1(外層循環)
for(i=600;i>0;i--); //i等于124,如果i大于0,i減1
}
/*******************************************************************
函數名:ADC初始化及8位A/D轉換函數
返回值:8位的ADC數據
結 果:讀出指定ADC接口的A/D轉換值,并返回數值
備 注:適用于STC12C2052AD系列單片機(必須使用STC12C2052AD.h頭文件)
*******************************************************************/
uchar Read (uchar CHA){
uchar AD_FIN=0; //存儲A/D轉換標志;若在函數外定義此變量則不能得到連續變化的模擬量的顯示
/******以下為ADC初始化程序****************************/
CHA &= 0x07; //選擇ADC的8個接口中的一個(0000 0111 清0高5位)
ADC_CONTR = 0x60; //ADC轉換的速度(0XX0 0000 其中XX控制速度,請根據數據手冊設置)
_nop_();
ADC_CONTR |= CHA; //選擇A/D當前通道
_nop_();
ADC_CONTR |= 0x80; //啟動A/D電源
delay(1); //使輸入電壓達到穩定(1ms即可?
/******以下為ADC執行程序****************************/
ADC_CONTR |= 0x08; //啟動A/D轉換(0000 1000 令ADCS = 1)
_nop_();
_nop_();
_nop_();
_nop_();
while (AD_FIN ==0){ //等待A/D轉換結束
AD_FIN = (ADC_CONTR & 0x10); //0001 0000測試A/D轉換結束否
}
ADC_CONTR &= 0xE7; //1111 0111 清ADC_FLAG位, 關閉A/D轉換,
return (ADC_DATA); //返回A/D轉換結果(8位)
}
/******************************************************************
顯示函數轉換函數:
M=模擬量采樣值,N=基準電壓源采樣值(本例為2.5V),R=模擬量輸入值(待顯示值)
N=256*2.5/Vcc;變形后得Vcc=256*2.5/N; 代入M=256*R/Vcc;得到M=R*N/2.5;變形后得R=M*2.5/N
1為輸入端分壓比。
******************************************************************/
void transfer(void){
M=Read(6);//P1.6口模擬量轉換
N=Read(5);//P1.5口2.5V基準電壓源采樣(轉換)
R=((M*2.5)/N)*9.31*1000;//輸入模擬量換算并放大1000倍;
/***以下為3位顯示轉換***/
d[3]=R/1000;
R=R%1000;
d[2]=R/100;
R=R%100;
d[1]=R/10;
d[0]=R%10;
}
/******************************************************************
函數功能:顯示子程序
********************************************************************/
void xian_shi (void)
{
P1=0xfe; //P1.3引腳輸出低電平
P3=LEDTab[d[0]]; //顯示個位
delay(1);
P1=0xfd; //P1.2引腳輸出低電平
P3=LEDTab[d[1]]; //顯示十位
delay(1);
db=0;
P1=0xfb; //P1.1引腳輸出低電平
P3=LEDTab[d[2]]; //顯示百位
delay(1);
if (LEDTab[3]!=0)
P1=0xf7; //P1.0引腳輸出低電平
P3=LEDTab[d[3]]; //顯示千位
db=0;
delay(1);
P1=0xff; //關閉所有數碼管
}
/******************************************************************
函數名:主函數
調 用:無
參 數:無
返回值:無
結 果:程序開始處,無限循環
備 注:
******************************************************************/
void main (void)
{
P1M0 = 0x60; //P1.0/P1.1:0000 0011(高阻)//注意:更改ADC通道時須同時將對應的IO接口修改為高阻輸入。
P1M1 = 0x00; //P1.0/P1.1:0000 0000
while(1){
uchar i;
delay(1);
i++;
if (i==30)
{
transfer();
i=0;
}
xian_shi();
//delay(10);
}
}
復制代碼
作者:
1300811688
時間:
2016-3-24 15:46
很好,我最近想在開關電源的輸出端添加一個單片機顯示電壓電流的功能,學習了。
作者:
越快樂越墮落
時間:
2016-6-18 22:21
為什么我做了好幾次,都是只顯示最后一位0???而且無法測量,我把75K改成了30K的,75K貌似不合理。
作者:
XDDZ1013
時間:
2017-5-12 22:29
數碼管用共陰極的,怎么改
作者:
15895149620
時間:
2017-5-13 10:28
樓主,求發源文件,仿真
作者:
尹德文
時間:
2017-11-30 19:54
我做的只能顯示三位數,不知什么原因
作者:
bhjyqjs
時間:
2018-2-7 15:20
準確度如何?穩定性怎樣?總覺得實用性欠佳
作者:
nklug
時間:
2018-3-5 10:16
無分壓電阻,只能測到5V以下(單片機工作電壓以下)。大約百分之二的誤差。
作者:
ltp
時間:
2018-3-16 13:22
謝謝分享!
作者:
干就得了
時間:
2018-3-19 14:32
樓主能不能測負壓
作者:
ty417502873
時間:
2018-11-24 05:01
學習一下。
作者:
zpz181818
時間:
2019-2-9 11:27
贊,非常好!
作者:
太陽黑子1
時間:
2020-2-1 08:18
很好呀!學習學習!
作者:
blackstar
時間:
2020-2-2 18:50
XDDZ1013 發表于 2017-5-12 22:29
數碼管用共陰極的,怎么改
程序里改下就好,段碼前加個“~”取反就行了
作者:
195470880
時間:
2020-5-14 19:07
謝謝樓主分享!
作者:
13566101057
時間:
2020-9-8 22:48
blackstar 發表于 2020-2-2 18:50
程序里改下就好,段碼前加個“~”取反就行了
我一直都是慢慢比劃著改......
作者:
dj3365191
時間:
2020-9-10 13:34
樓主你好,這個程序如果要以百分比的形式顯示電量應該怎樣修改?謝謝
作者:
bsqpcb
時間:
2020-9-15 23:37
為什么你可以用INT可以計算小數, 我得用浮點計算呢
作者:
lhpm641
時間:
2021-5-15 21:53
請教下9.31是怎么計算出來的,還有為什么要乘以1000?謝謝
作者:
fmdpj
時間:
2022-6-16 15:14
樓主你好!
Keli編譯出錯是什么原因?
Build target 'Target 1'
compiling 單片機電壓表.c...
單片機電壓表.c(10): warning C318: can't open file 'STC12C2052AD.H'
單片機電壓表.C(21): error C202: 'P3': undefined identifier
單片機電壓表.C(23): error C202: 'P3': undefined identifier
單片機電壓表.C(25): error C202: 'P3': undefined identifier
單片機電壓表.C(27): error C202: 'P3': undefined identifier
單片機電壓表.C(29): error C202: 'P3': undefined identifier
單片機電壓表.C(87): error C202: 'ADC_CONTR': undefined identifier
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日本免费中文字幕
|
日本视频免费观看
|
欧美日韩激情
|
www一区二区
|
超碰福利在线
|
国产午夜视频在线观看
|
欧美黄色片在线观看
|
人人澡人人干
|
亚洲精品少妇
|
成人激情视频网
|
伊人久久影院
|
成人免费看片视频
|
成人毛片在线播放
|
国产一区二区三区四区
|
怡红院久久
|
综合伊人久久
|
狠狠干狠狠插
|
亚洲激情欧美
|
成人a毛片
|
免费黄色av
|
日韩精品视频在线免费观看
|
日本免费在线观看
|
精品日韩av
|
亚洲一区二区av
|
中文字幕www
|
亚洲综合自拍
|
18视频在线观看男男
|
日本丰满少妇做爰爽爽
|
日韩av手机在线
|
日韩免费成人
|
精产国产伦理一二三区
|
欧美在线日韩
|
免费看黄色小视频
|
成人av免费看
|
岛国av噜噜噜久久久狠狠av
|
亚洲最新视频
|
黄色一级片网站
|
色综合久久久久
|
俺去俺来也在线www色官网
|
不卡的av
|
在线国产小视频
|