標(biāo)題:
單片機(jī)自帶AD 4位電壓表AD000.0-500.0源程序
[打印本頁(yè)]
作者:
wu_expect
時(shí)間:
2020-3-26 10:38
標(biāo)題:
單片機(jī)自帶AD 4位電壓表AD000.0-500.0源程序
STC15W401AS自帶AD 4位電壓表AD000.0-500.0。單片機(jī)直接驅(qū)動(dòng)4位共陰數(shù)碼管!采用定時(shí)中斷調(diào)AD!附件有很清楚的注釋?zhuān)?br />
單片機(jī)源程序如下:
#include "STC15W401AS.h"
#include "intrins.h"
sbit GND1=P1^4;
sbit GND2=P1^3;
sbit GND3=P1^2;
sbit GND4=P1^1;
sbit LEDa=P1^5;
sbit LEDb=P1^6;
sbit LEDc=P3^3;
sbit LEDd=P3^1;
sbit LEDe=P3^0;
sbit LEDf=P1^7;
sbit LEDg=P3^2;
sbit LEDp=P3^4;
unsigned char count;
unsigned char PWM=9;
float dianya; // 電壓
int dianya1; // 電壓 1
unsigned char code numtab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//unsigned char code numtab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/*-------------------------------------延時(shí)函數(shù)-------------------------------------*/
void delay (unsigned int a)
{
unsigned int i;
while( --a != 0)
{
for (i = 0; i < 12; i++);
}
}
/*-------------------------------------數(shù)碼管消隱-------------------------------------*/
void displayoff (void)
{
GND1=1;
GND2=1;
GND3=1;
GND4=1;
LEDa=0;
LEDb=0;
LEDc=0;
LEDd=0;
LEDe=0;
LEDf=0;
LEDg=0;
LEDp=0;
delay(10-PWM);
}
/*-------------------------------------個(gè)位碼顯-------------------------------------*/
void bit1 (unsigned char d)
{
unsigned char i;
i=d&0x01;
if (i==0x01){
GND1=0;LEDa=1;}delay(PWM);displayoff();
i=d&0x02;
if (i==0x02){
GND1=0;LEDb=1;}delay(PWM);displayoff();
i=d&0x04;
if (i==0x04){
GND1=0;LEDc=1;}delay(PWM);displayoff();
i=d&0x08;
if (i==0x08){
GND1=0;LEDd=1;}delay(PWM);displayoff();
i=d&0x10;
if (i==0x10){
GND1=0;LEDe=1;}delay(PWM);displayoff();
i=d&0x20;
if (i==0x20){
GND1=0;LEDf=1;}delay(PWM);displayoff();
i=d&0x40;
if (i==0x40){
GND1=0;LEDg=1;}delay(PWM);displayoff();
i=d&0x80;
if (i==0x80){
GND1=0;LEDp=1;}delay(PWM);displayoff();
}
/*-------------------------------------十位碼顯-------------------------------------*/
void bit2 (unsigned char d)
{
unsigned char i;
i=d&0x01;
if (i==0x01){
GND2=0;LEDa=1;}delay(PWM);displayoff();
i=d&0x02;
if (i==0x02){
GND2=0;LEDb=1;}delay(PWM);displayoff();
i=d&0x04;
if (i==0x04){
GND2=0;LEDc=1;}delay(PWM);displayoff();
i=d&0x08;
if (i==0x08){
GND2=0;LEDd=1;}delay(PWM);displayoff();
i=d&0x10;
if (i==0x10){
GND2=0;LEDe=1;}delay(PWM);displayoff();
i=d&0x20;
if (i==0x20){
GND2=0;LEDf=1;}delay(PWM);displayoff();
i=d&0x40;
if (i==0x40){
GND2=0;LEDg=1;}delay(PWM);displayoff();
i=d&0x80;
if (i==0x80){
GND2=0;LEDp=1;}delay(PWM);displayoff();
}
/*-------------------------------------百位碼顯-------------------------------------*/
void bit3 (unsigned char d)
{
unsigned char i;
i=d&0x01;
if (i==0x01){
GND3=0;LEDa=1;}delay(PWM);displayoff();
i=d&0x02;
if (i==0x02){
GND3=0;LEDb=1;}delay(PWM);displayoff();
i=d&0x04;
if (i==0x04){
GND3=0;LEDc=1;}delay(PWM);displayoff();
i=d&0x08;
if (i==0x08){
GND3=0;LEDd=1;}delay(PWM);displayoff();
i=d&0x10;
if (i==0x10){
GND3=0;LEDe=1;}delay(PWM);displayoff();
i=d&0x20;
if (i==0x20){
GND3=0;LEDf=1;}delay(PWM);displayoff();
i=d&0x40;
if (i==0x40){
GND3=0;LEDg=1;}delay(PWM);displayoff();
i=d&0x80;
if (i==0x80){
GND3=0;LEDp=1;}delay(PWM);displayoff();
}
/*-------------------------------------百位碼顯-------------------------------------*/
void bit4 (unsigned char d)
{
unsigned char i;
i=d&0x01;
if (i==0x01){
GND4=0;LEDa=1;}delay(PWM);displayoff();
i=d&0x02;
if (i==0x02){
GND4=0;LEDb=1;}delay(PWM);displayoff();
i=d&0x04;
if (i==0x04){
GND4=0;LEDc=1;}delay(PWM);displayoff();
i=d&0x08;
if (i==0x08){
GND4=0;LEDd=1;}delay(PWM);displayoff();
i=d&0x10;
if (i==0x10){
GND4=0;LEDe=1;}delay(PWM);displayoff();
i=d&0x20;
if (i==0x20){
GND4=0;LEDf=1;}delay(PWM);displayoff();
i=d&0x40;
if (i==0x40){
GND4=0;LEDg=1;}delay(PWM);displayoff();
i=d&0x80;
if (i==0x80){
GND4=0;LEDp=1;}delay(PWM);displayoff();
}
/*-------------------------------------數(shù)碼管位顯-------------------------------------*/
void display(unsigned char l,unsigned char d)
{
switch (l)
{
case 1:
bit1(d);
break;
case 2:
bit2(d);
break;
case 3:
bit3(d);
break;
case 4:
bit4(d);
break;
}
}
/*--------------------------------A/D轉(zhuǎn)換初始化函數(shù)--------------------------------*/
void Init_ADC()
{
P1ASF|=0X03;//設(shè)定P1.0,P1.1為模擬量電壓輸入端
ADC_RES=0;//清除緩存寄存器
ADC_CONTR=ADC_PWR+ADC_SPD1;//啟動(dòng)ADC電源,設(shè)定轉(zhuǎn)換速率
_nop_();
}
//========================================================================//
uint ReadAdc(uchar Chx)//讀取ADC數(shù)據(jù)
{
uint ADCDAT;
Init_ADC();
ADC_CONTR=ADC_PWR+ADC_SPD1+Chx+ADC_START;//啟動(dòng)轉(zhuǎn)換
_nop_();
_nop_();
_nop_();
_nop_();//短暫延時(shí)
while((ADC_CONTR&ADC_FLAG)==0);//等待轉(zhuǎn)換完畢
//ADC_CONTR&=~ADC_FLAG;//清除轉(zhuǎn)換完成標(biāo)志
ADC_CONTR &= 0xE7;//1111,0111 清 ADC_FLAG 位, 關(guān)閉A/D轉(zhuǎn)換,
ADCDAT=ADC_RES;//獲取ADC數(shù)值
ADCDAT<<=2;
ADCDAT|=ADC_RESL;
return ADCDAT;//返回?cái)?shù)值
}
/*--------------------------------------主函數(shù)--------------------------------------*/
void main (void)
{
P1M0=0x01; P1M1=0xe0;
P3M0=0x00; P3M1=0x1f;
TMOD=0x01;//定時(shí)器工作方式1
TH0=0x3C;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號(hào)
TL0=0xB0;//定時(shí)器初始產(chǎn)生50ms時(shí)基信號(hào)
EA=1;//開(kāi)總中斷
ET0=1;//開(kāi)定時(shí)器中斷
TR0=1;//啟動(dòng)定時(shí)器
while(1)
{
if (count==10)
{
/* dianya=ReadAdc(0)*(5.0/4500.0); // 取電壓
dianya=dianya*100;
dianya1=(int)dianya;
*/
dianya=ReadAdc(0);
dianya1=dianya;
count=0;
}
/* P2=0x01;
P0=shuzu[dianya1/100]; // 取百位
DELAY_MS(5);
P2<<=1;
P0=shuzu[dianya1%100/10];// 取十位
DELAY_MS(5);
P2<<=1;
P0=shuzu[dianya1%100%10]&0x7f;// 取個(gè)位
DELAY_MS(5);
*/
display (1,numtab[dianya1/1000 + '0']); //取百位
display (2,numtab[dianya1%1000/100 + '0']); //取十位
display (3,numtab[dianya1%100/10 + '0']); //取個(gè)位
display (3,numtab[dianya1%10 + '0']); //取小數(shù)點(diǎn)后一位
}
}
/*-----------------------------------中斷服務(wù)程序-----------------------------------*/
void Timer0_Routine(void) interrupt 1
{
TH0=0x3C;
TL0=0xB0;
count++;
}
復(fù)制代碼
所有資料51hei提供下載:
500電壓表.rar
(29.56 KB, 下載次數(shù): 51)
2020-3-26 10:37 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時(shí)間:
2020-3-26 20:44
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
作者:
chinarenxx
時(shí)間:
2020-3-27 00:58
這個(gè)貼要學(xué)習(xí)下。頂
作者:
yutian_51hei
時(shí)間:
2020-3-27 09:04
初級(jí)代碼,初學(xué)者玩玩可以
作者:
盛世游龍
時(shí)間:
2020-3-27 10:05
不錯(cuò)!頂一下!謝謝樓主分享!
作者:
中恒電子asus
時(shí)間:
2020-5-27 13:49
好東東,分享下圖紙就好
作者:
CHENGLCD
時(shí)間:
2020-6-6 11:14
很好的東西,有個(gè)電路圖就更好了
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1