这是我们老师之前让我们做的基于单片机测电压的程序
一、实验目的和要求
在所提供的电路板上进行编程,实现对电压的检测和显示 二、实验设备 51单片机 AD0809
三、程序
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit OE=P3^6;/*输出允许控制端,用以打开三态数据输出锁存器*/
sbit ST=P3^3;/*START(A/D转换启动信号输入端)和ALE(地址锁存允许信号输入端)共用一个端口(用于启动A/D转换)*/
sbit EOC=P3^2;/*转换结束信号输出引脚,开始转换时为高电平,当转换结束时为高电平*/
sbit WEI1=P2^2; /*第一个数码管*/
sbit WEI2=P2^3; /*第二个数码管*/
uchar smg1[6]={0x40,0x79,0x24,0x30,0x19,0x12}; /*小数点(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)/*动态测量*/
{
/*主程序*/
ST=0;/*初值*/
OE=0;/*初值*/
ST=1;/*上升沿,内部寄存器清零*/
ST=0;/*下降沿,进行A/D转换*/
while(EOC)/*结束转换*/
{
;
}
OE=1;/*输出转换得到的数据*/
ADC_0809(shi,ge);
}
}
/*delay 函数*/
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)
{
/*数据显示*/
a=P0*0.19;/*输出数据 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);
}
|