?? 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 + -