//------------------------------51单片机头文件
#include
//各数字的数码管段码(共阴)
unsigned char code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示数组{0,1,2,3,4,5,6,7,8,9}
sbit CLK=P3^3; //时钟信号
sbit ST=P3^6; //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换
sbit EOC=P3^5; //转换结束信号,当转换结束时会自动变成高电平
sbit OE=P3^4; //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出
sbit W1=P2^4; //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭
sbit W2=P2^3; //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭
sbit W3=P2^2; //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭
sbit key=P3^7; //定义按键控制key为P3.7
//----------------------------1ms延时函数
void Delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
for(i=0;i<120;i++);
}
//---------------------------显示转换结果(动态扫描模式)
void Display(unsigned int d)
{
d=d*1.0/256*5*40; //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1)
W1=0; //第一个数码管亮
P0=DSY_CODE[d%10]; //显示第一个数码管的值 为P1的值除以10取余
Delayms(6); //延时5ms
W1=1; //第一个数码管灭
W2=0;
P0=DSY_CODE[d%100/10]; //显示第二个数码管的值 为P1的值除以100取余 再除以10取整
Delayms(6);
W2=1;
W3=0;
P0=DSY_CODE[d/100]; //显示第三个数码管的值 为P1的值除以100取整
Delayms(6);
W3=1;
}
//-------------------------------------------------主程序
void main()
{
TMOD=0x02; //16位定时器0工作模式设置为2
TH0=0x14; //设置定时器高8位初值为0x14
TL0=0x00; //设置定时器低8位初值为0x00
TR0=1; //开启定时器0开关
ET0=1; //开启定时器0中断开关
EA=1; //开启中断总开关
//---------------启动 A/D 转换
//---------开始按键-----
A: while(key==1); //等待按键按下
Delayms(1); //延时1ms
if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
while(key==0); //当按键松开时,循环转换和显示
while(1)
{
ST=0;
ST=1;
ST=0;
while(EOC==0); //等待转换完成
OE=1; //开启输出端
Display(P1); //将输出到单片机P1端口上的数字信号在LED显示出来
OE=0; //关闭输出端
//------停止按键---------
if(key==0)
{
Delayms(1);
if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
while(key==0); //当按键松开时
…………限于本文篇幅 余下代码请从51黑下载附件…………