找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机驱动AD1674源程序原理图 100V电压

[复制链接]
跳转到指定楼层
楼主

#include <reg51.h>
sbit CE=P3^0;
sbit RC=P3^1;
sbit STS=P3^2;
sbit LE=P2^5;
sbit A0=P3^6;
sbit CS=P3^3;
#define N 0x0fff                   //十二位转换
unsigned long result=0;
unsigned char seg[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char buf[4];
void delay(n)
{
int i;
while(n--)
for(i=0;i<10;i++);
}
void inti()
{
CS=1;
CE=0;
}
unsigned int ad1674_convert()
{
unsigned int temp=0;
//STS=1;
inti();
CS=0;
delay(1);
A0=0;
delay(1);
RC=0;//
delay(1);
CE=1;
delay(1);
//while(STS==1);
{
CE=0;
delay(1);
RC=1;
delay(1);
A0=0;
delay(1);
CE=1;
delay(1);
temp=P0;
temp=P0<<4;
CE=0;
delay(1);
RC=1;
delay(1);
A0=1;
delay(1);
CE=1;
delay(1);
temp+=P0>>4;
}
CE=0;
CS=1;
return temp;
}
void dispute()
{
unsigned long result1;       //用于中途的数据转换
unsigned long vol,vol_c;    //电压显示,与电压的一个进位
result1=result*10000*2.2;      //*100*10*10v  扩大一百倍,用来替代两位小数,扩大十倍用来小数点后第三位四舍五入?
                             //又乘以10,是最电压
vol=result1/N;             // vol=result/0x0fff*10(v)   
vol_c=vol%10;
if(vol_c>=5)              //四舍五入
vol=vol+10;
vol=vol/10;
buf[0]=vol/1000;
buf[1]=vol/100%10;
buf[2]=vol/10%10;
buf[3]=vol%10;
}
void display()      //显示子程序.
{
int i;
unsigned char temp=0xfe;
for(i=0;i<4;i++)
{
  LE=0;
  P2=temp;
  if(i==2)
  P1=seg[buf[ i]]+0x80;
  else P1=seg[buf[ i]];
  LE=1;
  LE=0;
  delay(10);                  
  temp=temp*2+1;
}
P2=temp;                //关显示,进行下一次测试
}

void main()
{
while(1)
{
  result=ad1674_convert();
  dispute();
  display();
}
}

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:1066868 发表于 2023-3-16 17:07 | 只看该作者
程序用TAB按键对齐,增强可读性
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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