⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ad7746.c

📁 AD7746,我做过,已经成功,欢迎下载!
💻 C
字号:
#include "reg52.h"
typedef unsigned char uchar;
typedef unsigned int uint;

sbit sck=P2^1;   //IIC时钟
sbit sda=P2^0;   //IIC数据

sbit clk=P2^7;   //7219
sbit load=P2^6;
sbit din=P1^0;

uint cap_x=2345;
uint cap_y=6789;
//==================================
void delay(uchar temp)
{
	for(temp;temp>0;temp--);
}
//==================================
void send7219(uchar addr,uchar order)
{
	uchar i;                     
	load=0;
	for(i=8;i>0;i--)              // 送地址命令
	{	
		clk=0;
        if(addr&0x80)
        	din=1;
        else
            din=0;
		addr=addr<<1;
		clk=1;
	}
	for(i=8;i>0;i--)              // 送数据命令
	{
		clk=0;
        if(order&0x80)
        	din=1;
        else
            din=0;
		order=order<<1;
		clk=1;
	}
	load=1;
}

//=============================================
//在SCL高电平期间SDA发生负跳变
void start(void)
{
	sck=1;
    sda=1;
    delay(5);
    sda=0;
    delay(5);
    sck=0;
}

void stop(void)
{
	sck=1;
    sda=0;
    delay(5);
    sda=1;
    delay(5);
    sck=0;
    sda=0;
}

void mack(void)
{
	sda=1;
    sck=1;
    delay(5);
    sck=0;
    while(sda)
    {
       cap_x=2222;
       cap_y=3333;
    }
}

void mnack(void)
{
	sda=0;
    sck=1;
    delay(5);
    sck=0;
    sda=0;
}

uchar readbyte(void)
{
	uchar i;
    uchar Data=0;
    for(i=0;i<8;i++)
     {
        Data=Data<<1;
		//sda=1;  //置1,为输入引脚
        sck=1;
        if(sda==1)
        	Data=Data|0x01;
        sck=0;
        delay(5); 
    }
    return Data;
}

void writebyte(uchar Data)
{
	uchar i;
    for(i=0;i<8;i++)
    {
		sck=0;
        if(Data&0x80)
        	sda=1;
        else
            sda=0;
        sck=1;
        delay(5);
        sck=0;
        Data=Data<<1;
    }
     
}


//==================================//
//this is for the test
//======================================
void writeAD7746(void)
{
	start();
    writebyte(0xa0);
    mack();
    writebyte(0x03);
    mack();
    writebyte(0x01);
    delay(10);
    mack();
    /*
    writebyte(0x02);
    mack();
    writebyte(0x03);
    mack();
    stop();
    delay(255);
    start();
    writebyte(0xa0);
    mack();
    writebyte(0x07);
    mack();
    writebyte(0x04);
    mack();
    writebyte(0x05);
    mack();
    writebyte(0x06);
    mack();
    */
    stop();
   
    
    
}

uint readAD7746(uchar channel)
{
    uint cap=0;
    uchar l_byte=0;
    uchar m_byte=0;
    uchar h_byte=0;
	if(channel==1)
    {
		start();
        writebyte(0xa0); //写器件地址
        mack();
        writebyte(0x03);
        mack();
        start();
        writebyte(0xa1);
        mack();
        l_byte=readbyte();
        //mack();
        //m_byte=readbyte();
        //mack();
        //h_byte=readbyte();
        //l_byte=1;
        //m_byte=2;
        //h_byte=3;
        mnack();
        stop();
    }
	if(channel==2)
    {
		start();
        writebyte(0xa0); //写器件地址
        mack();
        writebyte(0x07);
        mack();
        start();
        writebyte(0xa1);
        mack();
        l_byte=readbyte();
        //mack();
        //m_byte=readbyte();
        //mack();
        //h_byte=readbyte();
        mnack();
        //l_byte=4;
        //m_byte=5;
        //h_byte=6;
        stop();
    }
    //cap=h_byte;
    //cap=cap<<8;
    //m_byte=m_byte>>4;
    //cap=cap+m_byte;
    cap=l_byte;//+m_byte*10+h_byte*100;
    //cap=1234;
   return cap;
}

//======================================
void display(void)
{
	uchar dis_buf[4];
    dis_buf[0]=cap_x/1000;
    dis_buf[1]=cap_x%1000/100;
    dis_buf[2]=cap_x%100/10;
    dis_buf[3]=cap_x%10;
    send7219(0x01,dis_buf[0]);
    send7219(0x05,dis_buf[1]);  
    send7219(0x07,dis_buf[2]);
    send7219(0x03,dis_buf[3]);
    dis_buf[0]=cap_y/1000;
    dis_buf[1]=cap_y%1000/100;
    dis_buf[2]=cap_y%100/10;
    dis_buf[3]=cap_y%10;
    send7219(0x04,dis_buf[0]);
    send7219(0x06,dis_buf[1]);
    send7219(0x08,dis_buf[2]);
    send7219(0x02,dis_buf[3]);
   
}

//=======================================
void system_init(void)  //系统初始化
{
  send7219(0x0c,0x01); //初始化MAX7219
  send7219(0x0b,0x07); //扫描位限制控制器
  send7219(0x0a,0x01); //亮度寄存器
  send7219(0x09,0xff); //译码控制寄存器,译码方式
}
//=======================================
void main(void)
{
    system_init();
    //writeAD7746();
    delay(255);
	while(1)
	{
        //cap_x=readAD7746(1);
        //cap_y=readAD7746(2);
        display();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -