单片机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转换实验的主要内容,如果未能解决你的问题,请参考以下文章