用ADCO8O9对模拟信号进行转换,转换结果送七段数码管显示,同时用8位发光二极管显示转换值的二进制码“XX”, 5LED静态显示的前两位显示“AD”字样,后三位显示转换结果,调节模拟信号输入端的电位器旋钮,显示值随着变化,顺时针旋转值增大,AD转换值的范围是0~FFH。
#include <reg52.h> //52系列单片机头文件
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit ST=P3^0; //(START): A/D转换启动脉冲输入端,输入一个正脉冲,上升复位下降沿启动
sbit OE=P3^1; //(OE):数据输出允许信号,高电平有效
sbit EOC=P3^2; //A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num;
void delayms(uint xms) //延时子程序
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
void display(uchar d) //显示子函数
{
P1=0xff; //消影
P1=0x88; //送段选码A
P2=0xf7; //送位选码
delayms(5); //延时
P1=0xff; //D
P1=0xa1;
P2=0xef;
delayms(5);
P1=0xff;
P1=table[d/100];
P2=0xdf;
delayms(5);
P1=0xff;
P1=table[d%100/10];
P2=0xbf;
delayms(5);
P1=0xff;
P1=table[d%10];
P2=0x7f;
delayms(5);
}
/*void in00() interrupt 0 //中断子程序INT0
{
OE=1;
adval=P0;
A1=adval/100; //分出百,十,和个位
A2=adval%100/10;
A3=adval%10;
}
*/
void main() // 主程序
{
// EA=1;
// EX0=1;
// IT0=0;
while(1)
{
ST=0;
ST=1; //启动AD转换
//_nop_();
ST=0;
while(EOC==0);
OE=1;
while()
display(P0);
OE=0;
}
} |