找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2230|回复: 3
打印 上一主题 下一主题
收起左侧

ADC0808数字电压表

[复制链接]
跳转到指定楼层
楼主
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit ST=P2^0;  //启动转换位
sbit OE=P2^2;  //输出允许位
sbit ALE=P2^3;  //地址允许锁存位
sbit EOC=P2^1;  //转换结束位
sbit CLK=P2^4;  //时钟
long int datas,qian,bai,shi,ge;
uchar duan;
uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不带点的数字
uchar code num_dot[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed};   //带点的数字
uchar code wei[]={0x0a,0x0d,0x0b,0x07};      //位码
void delay(uint z)
{
uchar i;
while(z--)
for(i=0;i<120;i++);
}
void display()
{
uchar i=0;
qian=(datas*500/255)/1000;//计算并得到千位
bai=(datas*500/255)% 1000 / 100;//计算并得到百位
shi=(datas*500/255) % 1000 % 100 / 10;//计算并得到十位
ge=(datas*500/255) % 1000 % 100 % 10;//计算并得到个位
for(i=0;i<4;i++)   
{
  P3=wei;
  if(i==0){duan=num_dot[qian];}   
  else if(i==1){duan=num[bai];}
  else if(i==2){duan=num[shi];}
  else if(i==3){duan=num[ge];}
  P0=duan;
  delay(2);
}
}
void main()
{
TMOD=0x02;      //定义T0,工作方式2
TH0=0x216;          //TH0初值
TL0=0x216;   //TH1初值
EA=1;     //打开总中断
ET0=1;    //打开TO中断允许位
TR0=1;     //打开T0
while(1)
{
ST=OE=0;    //将START和EO先置0
ALE=1;          //将ALE和ST置1拉高电平
ST=1;         
ALE=0;//将ALE和START置0开始数据变换
ST=0;
while(!EOC);   //等待EOC,ECO为1表示转换完成
OE=1;          //打开OE,读取数据
datas=P1;       //将数据保存在datas
display();   
}
}
void inter_1() interrupt 1
{
CLK=~CLK;
}


评分

参与人数 1黑币 +30 收起 理由
INVIO + 30 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-9-26 17:57 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:397052 发表于 2018-9-29 21:48 | 只看该作者
admin 发表于 2018-9-26 17:57
补全原理图或者详细说明一下电路连接即可获得100+黑币

原理图

无标题.png (277.81 KB, 下载次数: 48)

无标题.png
回复

使用道具 举报

地板
ID:729193 发表于 2020-4-30 11:05 | 只看该作者
我想知道测量范围
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表