标题:
简单的单片机数字电压表+测量滑动变阻器电阻转化成0到5v显示
[打印本页]
作者:
qwexzr
时间:
2020-6-1 09:40
标题:
简单的单片机数字电压表+测量滑动变阻器电阻转化成0到5v显示
功能
:对
RV1电压进行实时检测,并在LCD1602上显示保留两位小数,RV1电压采用ADC0809进行采集。
转换原理:模拟量由0#通道输入(ADDA,ADDB,ADDC均接地);
时钟脉冲CLOCK采用定时器0产生5kHz时钟,由P3.3输出;
转换启动脉冲(START和ALE)采用软件模拟,由P3.4输出;
转换结束信号(EOC)由软件查询P3.5状态获得;
转换结果使能脉冲(OE)采用软件模拟,由P3.6输出。
protues仿真图如下
dan5.PNG
(87.33 KB, 下载次数: 42)
下载附件
protues仿真图
2020-6-1 09:36 上传
单片机源程序如下:
#include "reg51.h"
#include <ds1302.h>
sbit RS=P3^0;
sbit RW=P3^1;
sbit E=P3^2;
sbit CLOCK=P3^3;
sbit START=P3^4;
sbit EOC=P3^5;
sbit OE=P3^6;
unsigned char str[]={"0123456789"};
void delay(unsigned int t){
unsigned int i=0,j=0;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void write_command(unsigned char dat){
RS=0;
RW=0;
E=0;
P2=dat;
delay(2);
E=1;
E=0;
}
void write_data(unsigned char dat){
RS=1;
RW=0;
E=0;
P2=dat;
delay(2);
E=1;
E=0;
}
void main () {
unsigned char temp =0;
float VOL=0.0;
//LCD初始化
write_command(0x38);//显示模式设置
delay(5);
write_command(0x08);
delay(5);
write_command(0x01);
delay(5);
write_command(0x06);
delay(5);
write_command(0x0C);
delay(5);
//定时器初始化
TMOD=0x02;
TH0=0x9c;//自动重装
TL0=0x9c;
EA=1;
ET0=1;
TR0=1;
while(1){
OE=0;
START=0;
START=1;
START=0;
delay(1);
while(!EOC);//空等待
OE=1;
temp=P1;
OE=0;
//显示
write_command(0x80);
delay(5);
write_data('V');
delay(5);
write_data('o');
delay(5);
write_data('l');
delay(5);
write_data(':');
delay(5);
VOL=temp*5/255;
write_data(str[(int)VOL]);
delay(5);
write_data('.');
delay(5);
write_data(str[(int)(VOL*10)%10]);
delay(5);
write_data(str[(int)(VOL*100)%10]);
delay(5);
write_data('V');
delay(5);
}
}
void timer0() interrupt 1 {
CLOCK=~CLOCK;
}
复制代码
所有资料51hei提供下载:
5.rar
(51.85 KB, 下载次数: 67)
2020-6-1 09:36 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
afjc123
时间:
2021-1-9 10:41
请问一下 代码中空等待,和最后时钟取反是什么意思
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1