永发信息网

ADC0809与51单片机编程怎么实现

答案:2  悬赏:0  手机版
解决时间 2021-04-29 11:02
ADC0809与51单片机编程怎么实现
最佳答案

我自己做的最小系统板 自己写的代码 所以有得地方不会和其他电路板兼容


但是ad0809是兼容的,你看一下


#include <reg52.h>
#include <intrins.h>


#define uchar unsigned char
#define uint unsigned int


uchar table[16] = {0x81,0xB7,0xC2,0x92,0xB4,0x98,0x88,0xB3,0x80,0x90,0xA0,0x8C,0xCE,0x86,0xC8,0xE8};


sbit CLK = P3^2; // 时钟输入端,最大为500KHz
sbit OE = P3^3; // 输出允许端 等于1时有效
sbit EOC = P3^4; // 转化完成标志 高电平表示转化结束.
sbit ST = P3^5; // 地址锁存信号.


// 控制每位数码管显示
sbit L0 = P0^0;
sbit L1 = P0^1;
sbit L2 = P0^2;
sbit L3 = P0^3;
sbit L4 = P0^4;
sbit L5 = P0^5;
sbit K1 = P0^6;


uchar a;
bit flag; // 输出方式的标志位


void Delay(uint m)
{
uint i,j;

for (i=0; i<m; i++)
for (j=0; j<150; j++);
}


//初始化串口,设置成工作方式0
void InitPort(void)
{
//; 不用设置,初始即为工作方式0
}


// 发送一个数据
void SendByte(uchar dat)
{
SBUF = dat;
while (!TI);
TI = 0;
}


void InitLed(void)
{
L0 = 0;
L1 = 0;
L2 = 0;
L3 = 0;
L4 = 0;
L5 = 0;
}


void DisplayLed(void)
{
uint value;


//unsigned long value;
//value = (a*500)/256;


if (a < 132)
value = (a*500)/256;
else
{
value = (a*500)/256;
value = value + 256;
}


if (!flag)
{
L0 = 0; L1 = 0; L2 = 1;
SendByte(table[value/100]&0x7F);
Delay(5);

L0 = 0; L1 = 1; L2 = 0;
SendByte(table[(value/10)%10]);
Delay(5);

L0 = 1; L1 = 0; L2 = 0;
SendByte(table[value%10]);
Delay(5);
}
else
{
L0 = 0; L1 = 0; L2 = 1;
SendByte(table[a/100]);
Delay(5);

L0 = 0; L1 = 1; L2 = 0;
SendByte(table[(a/10)%10]);
Delay(5);

L0 = 1; L1 = 0; L2 = 0;
SendByte(table[a%10]);
Delay(5);
}
}


void ScanKey(void)
{
if (K1 == 0)
{
flag = !flag;
while (!K1);
K1 = 1;
}
}


// 初始化AD0809
void InitAD0809(void)
{
ST = 0;
OE = 0;
}


// 读AD0809中的数据
uchar ReadAD0809(void)
{
//EOC = 0;
OE = 0;
ST = 0;
//_nop_();
ST = 1; // 上升沿AD0809内部的寄存器清零
//_nop_();
ST = 0; // 产生一个至少100ns的脉冲,在转换期间ST为低


while (!EOC)
{
DisplayLed();
ScanKey();
}
OE = 1;
return P1;
}


main()
{
//uint i;
TMOD = 0x01;
EA = 1;
TR0 = 1;
ET0 = 1;
flag = 0;
K1 = 1;


InitLed();
InitPort();
InitAD0809();




while (1)
{
a = ReadAD0809();
}
}



void timer0(void) interrupt 1 using 1
{
TH0 = 0xFF;
TL0 = 0x80;


CLK = !CLK;
}

全部回答

CLOCK BIT P2.0 ST BIT P2.1 EOC BIT P2.2 OE BIT P2.3

;子程序如下:

AD_CONTER: CLR ST SETB ST CLR ST ;启动转换 JNB EOC,$ SETB OE MOV ADC_Result,P1 ;读取AD转换结果 CLR OE MOV A,ADC_Result RET

另外时钟信号可以通过定时器来设定~~

;-------------------提供ADC0809时钟-------------------------- INT_T0: MOV TH0,#245 MOV TL0,#0 CPL P2.0

RETI

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
炫舞服饰有免费的吗
冰心的《母亲》,《纸船》与《成功的花》,《
足迹鞋店地址在什么地方,想过去办事
我英语该从何学起?
急需德甲补丁
两年前辞职回家,想在家里交社保可因为户口是
黄酒冲蛋怎么做
高铁海航是什么,什么是高铁,地铁?各有什么
有哪些项目投资小见效快
QQ音乐怎么样上传,?
最感动最感动最感动最感动最感动人的电影是那
请问CFer你们杀敌3000人得大炮和高爆你们拿到
大邑县青霞镇小学在什么地方啊,我要过去处理
关于平安出行的作文
尹艺霖这名字好么
推荐资讯
QB 能轉賬嗎?
骂 喜新厌旧人的句子
如何进入同一IP下的别的路由器
怎样才可以把网名弄得很长?
鱼儿离开了水会死去么
演出管理条例手续费
艾米啤酒花园这个地址在什么地方,我要处理点
一个人不寂寞想一个人为什么会寂寞?
高二有机化学沸点问题!!!
这个舞曲叫什么名字
双手发红发痒怎么回事,全身痒,双手红的可怕是
成字连笔字怎么写好看,“琦”这个字的各种写
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?