程序ADC0809模拟检测电压数码管显示

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#define uchar unsigned char

#define uint unsigned int

uchar temp,dianya0,dianya1;

uchar code LED[]=

{

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,

0x77,0x7c,0x39,0x5e,0x79,0x71

}; //共阴数码管断码0~9~a~f

uchar disbuff[4]; //显示缓冲器(数组)

sbit clk=P3^3; // 芯

sbit EOC=P3^2; // 片

sbit OE=P3^0; // 引

sbit start=P3^1; // 脚

sbit adress_A=P3^4; // 定

// 义

void delay(uint z)

{

while(z--);

}

void timer0init()

{

TMOD=0x01; //设置定时器0为工作方式1

TH0=(65536-1)/256; //定时器0高八位赋值1us中断一次TL0=(65536-1)%256; //定时器0低八位赋值

EA=1; //开总中断

ET0=1; //开定时器0中断

TR0=1; //启动定时器0

}

void display()

{

// disbuff[0]=dianya%10; //个位

// disbuff[1]=dianya/10%10; //十

// disbuff[2]=dianya/100%10; //百

// disbuff[3]=dianya/1000; // 千

P2=0xfe; //打开第一个数码管

P0=LED[disbuff[3]]; //给数码管送数据(段码)

delay(60); //延时,防止数码管重影

P2=0xfd; // 以

P0=LED[disbuff[2]]; // 下

delay(60); // 功

P2=0xfb; // 能

P0=LED[disbuff[1]]; // 类

delay(60); // 同

P2=0xf7;

P0=LED[disbuff[0]];

delay(60);

}

void main()

{

timer0init(); //定时器0初始化

while(1)

{

adress_A=0; //打开通道0

delay(10); //延时等待芯片反应

start=1; //开始ADC转换

// while(!EOC); //等待转换完成标志(未知原因,此语句导致数码管不能显示)

OE=1; //输出允许

P1=0XFF; //输入前P1口需置1

dianya0=P1; //AD转换完成,读取值

OE=0; //关闭输出

start=0; //关闭AD转换

disbuff[0]=dianya0%16;//将二进制数据转换为16进制低位

disbuff[1]=dianya0/16;//将二进制数据转换为16进制高位

delay(10); //延时等待芯片反应

adress_A=1; //打开通道1

delay(10);

start=1;

OE=1;

// while(!EOC);

P1=0XFF;

dianya1=P1;

OE=0;

start=0;

disbuff[2]=dianya1%16;

disbuff[3]=dianya1/16;

display(); //显示

}

}

void timer0() interrupt 1

{

TH0=(65536-1)/256; //重装初值

TL0=(65536-1)%256;

clk=~clk; //模拟给ADC0808提供时钟

}

硬件图(protues仿真)

相关文档
最新文档