单片机A/D转换实验

Posted 啥也不想,只想搞钱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机A/D转换实验相关的知识,希望对你有一定的参考价值。

一、操作目的

  • (1)了解A/D转换与单片机的接口方法;
  • (2)了解A/D转换芯片0809的性能及编程方法;
  • (3)通过实验了解单片机如何进行数据采集;

二、操作内容

利用实验系统上的0809做A/D转换器,实验系统上的电位器提供模拟量输入,编制程序,将模拟量转换成数字,通过数码管显示出来。

三、接线图

在这里插入图片描述

四、程序清单

	ORG 0000H
	LJMP SE11
	ORG 0590H
SE11:
	MOV SP,#53H
	mov p2,#0ffh
	MOV A,#81H
	MOV DPTR,#0FF23H
	MOVX @DPTR,A
	MOV 7EH,#00H
	MOV 7DH,#08H
	MOV 7CH,#00H
	MOV 7BH,#09H
	MOV 7AH,#10H
	MOV 79H,#10H                ;显示缓冲区初值
LO18:
	LCALL SSEE                  ;显示
	MOV A,#00H
	MOV DPTR,#0FF80H
	MOVX @DPTR,A                ;0809的0通道采样
	MOV R7,#0FFH                ;延时
LO17:
	DJNZ R7,LO17
	MOVX A,@DPTR                ;取出采样值
	MOV R0,#79H
	LCALL PTDS
	SJMP LO18                   ;采样值送显示缓冲区
	ORG 05D0H
PTDS:
		MOV R1,A                    ;拆送显示缓冲区
		ACALL PTDS1
		MOV A,R1	
		SWAP A
PTDS1: 	
		ANL A,#0FH
		MOV @R0,A
		INC R0
		RET
		ORG 0D50H
SSEE:
		SETB RS1                     ;换工作区
		MOV R5,#05H
SSE2:
		MOV 30H,#20H
		MOV 31H,#7EH
		MOV R7,#06H
SSE1:
	MOV R1,#20H
	MOV A,30H
	CPL A
	MOVX @R1,A                    ;字位送入
	MOV R0,31H
	MOV A,@R0
	MOV DPTR,#DDFF
	MOVC A,@A+DPTR                ;取字形代码
	MOV R1,#21H
	MOVX @R1,A                    ;字形送入
	MOV A,30H
	RR A                          ;右移
	MOV 30H,A
	DEC 31H
	MOV A,#0FFH
	MOVX @R1,A                    ;关显示
	DJNZ R7,SSE1                  ;六位显示完了吗?
	DJNZ R5,SSE2                  ;5次显示完了吗?
	CLR RS1
	RET
DDFF:
		DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
		DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH
		END

五、代码详解

#include <absacc.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define AD XBYTE[0xFF80]
#define com8255 XBYTE[0xff23] //宏定义口地址
#define pa8255 XBYTE[0xff20]
#define pb8255 XBYTE[0xff21]

uchar code table[20] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xFF, 0x0C, 0x89, 0xDE};
uchar code wei[] = {0x20, 0x10, 0x08, 0x04, 0x02, 0x01};

uint i, temp, digit;

void delay(int x)
{
	while(x--);	
}
void show(uint num)
{
    temp = num;
    digit = 0;
	if(temp == 0)
	{
	    pb8255 = table[temp % 10];
        pa8255 = ~wei[5 - digit];
	}
	else
	{
		while (temp)
        {
            pb8255 = table[temp % 10];
            pa8255 = ~wei[5 - digit];
            temp /= 10;
            digit++;
            delay(100);
        }

	}
}
void main()
{
    com8255 = 0x80; //控制口赋值
    pa8255 = 0x00;  //PA初始化
    pb8255 = 0x00;  //PB口初始化
	while(1)
	{
		AD = 0X00;
		//delay(1000);
		show(AD);
	}
}

以上是关于单片机A/D转换实验的主要内容,如果未能解决你的问题,请参考以下文章

单片机D/A转换实验

10.STC15W408AS单片机A/D转换器

10.STC15W408AS单片机A/D转换器

10.STC15W408AS单片机A/D转换器

10.STC15W408AS单片机A/D转换器

4.8 51单片机-PCF8591(ADC/DAC)转换芯片