复件 tlc2543.c

来自「AD芯片TLC2543的转换例程。」· C语言 代码 · 共 79 行

C
79
字号
#include <reg51.h>
#include <math.h>
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>

sbit TLC2543_CLK	= P1^0;
sbit TLC2543_DIN	= P1^1;
sbit TLC2543_DOUT	= P1^2;
sbit TLC2543_CS		= P1^3;

unsigned int Convert(unsigned int uiChannel);

unsigned char AD_INPUT[] =
{
	/* 12 bits / MSB first / unipolar */
	0x00,        /* AD channel 00 select */
	0x10,        /* AD channel 01 select */
	0x20,        /* AD channel 02 select */
	0x30,        /* AD channel 03 select */
	0x40,        /* AD channel 04 select */
	0x50,        /* AD channel 05 select */
	0x60,        /* AD channel 06 select */
	0x70,        /* AD channel 07 select */
	0x80,        /* AD channel 08 select */
	0x90,        /* AD channel 09 select */
	0xA0,        /* AD channel 0a select */
	0xB0,        /* AD channel 0b select */
	0xC0         /* AD channel 0c select */
};

unsigned int Convert(unsigned int uiChannel)
{
	unsigned int	i;
	unsigned int	dout;		/*存放从DOUT端接收到的数*/
	unsigned char	din;		/*通道控制字*/

	din = AD_INPUT[uiChannel];
	TLC2543_CLK = 0;
	TLC2543_CS = 1;
	_nop_();
	_nop_();
	TLC2543_CS = 0;
	dout = TLC2543_DOUT;
	for (i = 0; i < 8; i++)			/*读高8位*/	
	{			
		if (din & 0x80)				/*将通道方式控制字最高位打入TLC2543*/
            TLC2543_DIN = 1;
        else
            TLC2543_DIN = 0;
        din <<= 1; 
        dout <<= 1;
		if (TLC2543_DOUT == 1)
			dout |= 0x0001;  
        TLC2543_CLK = 1;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
		TLC2543_CLK = 0;
	}	
	
	for (i = 0; i < 4; i++)			/*读低4位*/
	{
		dout <<= 1;
		if (TLC2543_DOUT == 1)
			dout |= 0x0001; 
		TLC2543_CLK=1;
		_nop_();
        _nop_();
        _nop_();
        _nop_();
		TLC2543_CLK = 0;
	}	
	
	TLC2543_CS = 1;
	return dout;
}

⌨️ 快捷键说明

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