這是我們老師之前讓我們做的基于單片機測電壓的程序
一、實驗目的和要求
在所提供的電路板上進行編程,實現(xiàn)對電壓的檢測和顯示 二、實驗設備 51單片機 AD0809
三、程序
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit OE=P3^6;/*輸出允許控制端,用以打開三態(tài)數(shù)據(jù)輸出鎖存器*/
sbit ST=P3^3;/*START(A/D轉換啟動信號輸入端)和ALE(地址鎖存允許信號輸入端)共用一個端口(用于啟動A/D轉換)*/
sbit EOC=P3^2;/*轉換結束信號輸出引腳,開始轉換時為高電平,當轉換結束時為高電平*/
sbit WEI1=P2^2; /*第一個數(shù)碼管*/
sbit WEI2=P2^3; /*第二個數(shù)碼管*/
uchar smg1[6]={0x40,0x79,0x24,0x30,0x19,0x12}; /*小數(shù)點(0.;1.;2.;3.;4.;5.)*/
uintsmg2[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/*段選*/
uint shi,ge,a;
void delay(uint n);
void ADC_0809(uint shi,ge);
void main()
{
while(1)/*動態(tài)測量*/
{
/*主程序*/
ST=0;/*初值*/
OE=0;/*初值*/
ST=1;/*上升沿,內部寄存器清零*/
ST=0;/*下降沿,進行A/D轉換*/
while(EOC)/*結束轉換*/
{
;
}
OE=1;/*輸出轉換得到的數(shù)據(jù)*/
ADC_0809(shi,ge);
}
}
/*delay 函數(shù)*/
void delay(uint n)
{
uint i,j;
for(i=n;i>0;i--)
for(j=0;j<20;j++);
}
void ADC_0809(uint shi,ge)
{
/*數(shù)據(jù)顯示*/
a=P0*0.19;/*輸出數(shù)據(jù) P0是寄存器,0.19=5/2^8-1*/
shi=a/10;/*十*/
ge=a%10;/*個*/
WEI2=1;WEI1=0;
P1=smg1[shi];
delay(22);
WEI2=0;WEI1=1;
P1=smg2[ge];
delay(22);
}
|