找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求下面这个仿真图的程序,TLC1543与ACS712与at89c51单片机,lcd1602的输入和显示程...

[复制链接]
跳转到指定楼层
楼主
300黑币
急求,就是将ACS712检测的电流经过TCL1543进行A/D转换后,通过单片机用lcd1602显示输出,谢谢

QQ截图20190106164447.png (19.87 KB, 下载次数: 67)

原理图

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

使用道具 举报

沙发
ID:647574 发表于 2020-4-3 20:44 | 只看该作者
#include<at89x52.h>
#include<INTRINS.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define CLOCK P1_0
#define D_IN  P1_1
#define D_OUT P1_2
#define _CS   P1_3
sbit g1=P2^7;
sbit g2=P2^1;
sbit g3=P2^3;
sbit g4=P2^5;
ulong AD_ad1,AD_ad2;
float JiZhun_AD=2.5;
float AD_Data=0.0;
ulong AD_ad=0;
char chi;
unsigned char code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};        
        void delay02s(void)
        {  
        unsigned char i,j,k;
        for(i=1;i>0;i--)
        for(j=10;j>0;j--)
        for(k=200;k>0;k--);
        }
uint read1543(uchar port)
        {        
        uint ad;
        uint i;
        uchar al=0,ah=0;
        CLOCK=0;
        _CS=0;
        port<<=4;
        for (i=0;i<4;i++) //将四位通道地址送1543
                {
                D_IN=(bit)(port&0x80);CLOCK=1;CLOCK=0;
                port<<=1;
                }
        for (i=0;i<6;i++) //填6个CLOCK信号
                {
                CLOCK=1;CLOCK=0;
                }
        _CS=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();
        _CS=0; //等待AD转换结束
        _nop_();_nop_();_nop_();
for (i=0;i<2;i++) //D9,D8
                {        
                D_OUT=1;CLOCK=1;ah<<=1;               
                if (D_OUT) ah +=0x01;
                CLOCK=0;
                }
        for (i=0;i<8;i++) //取出D7--D0
                {        
                D_OUT=1;CLOCK=1;al <<= 1;               
                if (D_OUT)
                al +=0x01;
                CLOCK=0;
                }
_CS=1;        
ad = (uint)ah;
ad <<= 8;
ad +=(uint)al; //
return(ad);
}
void main()
{
TMOD=0x01;
TH0=(65535-20000)/255;
TL0=(65535-20000)%255;
EA=1;ET0=1;TR0=1;
while(1)
        {
        P0=table[(AD_ad%10)];
        g1=1;
    delay02s();
    g1=0;              
        P0=table[(AD_ad/10)%10];
        g2=1;
    delay02s();
    g2=0;            
    P0=table[(AD_ad/100)%10];
        g3=1;
    delay02s();
    g3=0;
        P0=table[(AD_ad/1000)]|0X80;
        g4=1;
    delay02s();
        g4=0;
        }
}
zhongduan()interrupt 1
{
        TH0=(65535-20000)/255;
        TL0=(65535-20000)%255;
        chi++;
        if(chi==50)
        {
        chi=0;
        AD_ad1 = read1543(0);   //          (通道0电压正端)
        AD_Data = ((float)AD_ad1)*JiZhun_AD*2/1024+0.15005;//0.15经过实测需要加0.15减少误差        
        AD_ad =((AD_Data-2.68)/0.185)*1000;         
        }
        
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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