【51单片机】采用ADC0809对IN5通道的模拟电压进行转换,电压值通过四位数码管进行显示。例如:1.234伏。其中,模拟电压可由滑动变阻器提供。

您所在的位置:网站首页 c语言51单片机与AD转换器双缓冲 【51单片机】采用ADC0809对IN5通道的模拟电压进行转换,电压值通过四位数码管进行显示。例如:1.234伏。其中,模拟电压可由滑动变阻器提供。

【51单片机】采用ADC0809对IN5通道的模拟电压进行转换,电压值通过四位数码管进行显示。例如:1.234伏。其中,模拟电压可由滑动变阻器提供。

2024-07-14 22:23| 来源: 网络整理| 查看: 265

1. 基本要求:

在Wave/Keil中进行软件编程,完成51单片机使用A/D,以及访问外部RAM仿真实验,在Proteus中搭建硬件电路验证编程结果。

(1).实验目的

掌握51单片机A/D转换原理及使用方法;

掌握51单片机访问外部RAM原理及使用方法。

(2).实验要求

基于典型51单片机与ADC0809硬件连接方式,采用ADC0809对IN5通道的模拟电压进行转换,电压值通过四位数码管进行显示。例如:1.234伏。其中,模拟电压可由滑动变阻器提供。

keil:

#include #include #include #include #include //地址锁存 sbit ADDC=P1^6; sbit ADDB=P1^5; sbit ADDA=P1^4; sbit CLK=P1^3; //clock sbit ST=P1^2; //start (转换启动信号) sbit EOC=P1^1; //end of conversion (转换结束信号) sbit OE=P1^0; //output enable (输出允许信号) unsigned char number; //0~9 unsigned char code SEG7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴 unsigned char code SEG8[]={0xBf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x80};//有小数点的 void delay(int i) { int j=0; while(i--) { for(j=0;j P2^1 P2=0xFB; P0=SEG7[(AD/10)%10]; delay(5);//1111_1011 -> P2^2 P2=0xF7; P0=SEG7[AD%10]; delay(5);//1111_0111 -> P2^3 } //初始化0809 void init() { // ABC=101选择第五通道 ADDC=1; ADDB=0; ADDA=1; CLK=0; ST=1; //内部寄存器清零 EOC=1; // 转换结束(未开始) OE=0; } void main() { init(); //TMOD(定时器方式2) TMOD=0x02; //0000_0010 8位 0~255 /* 对定时器T0来说是分成两个寄存器:TH0为高八位,TL0为低八位,组成了16位的定时器, 当低位TL0计满就向高位TH0移一个数,然后清零 TH0和TL0决定采样频率(数值越大,频率越高) */ TH0=1000; TL0=1000; EA=1; // 总中断开关 ET0=1; // T0定时器总中断开关 TR0=1; // 启动T0的开定时器位 while(1) { ST=0;_nop_(); ST=1;_nop_(); //上跳变 清零 ST=0; //下跳变 开始 while(EOC==0);//EOC为1时代表结束 OE=1;//结束后开始输出 display(P3); //写出输出内容 OE=0; //高阻 禁止输出 } } //定时器T0的中断 void t0() interrupt 1 { CLK=!CLK; }

proteus:

调节滑动变阻器,电压值发生变化,电压值范围是0~5V

keil+proteus源文件下载:https://download.csdn.net/download/weixin_52417692/85236576



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3