📄 tlc549测试.c
字号:
//功能:串行AD转换器TL549进行一路模拟量的测量
//驱动TLC549,TLC549是串行8位ADC
#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define Wait1us _nop_();
#define Wait2us {_nop_();_nop_();}
#define Wait4us {Wait2us;Wait2us;}
#define Wait8us {Wait4us;Wait4us;}
#define Wait10us {Wait8us;Wait2us;}
#define Wait30us {Wait10us;Wait8us;Wait4us;Wait2us;}
//定义TLC549串行总线操作端口
sbit CLK=P0^1;
sbit DAT=P0^2;
sbit CS=P0^3 ;
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
unsigned char code table1[]=
{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//{0xdf,0x86,0xbb,0xaf,0xe6,0xed,0xfd,0x87,
//0xff,0xef,0xf7,0xfc,0xd9,0xbe,0xf9,0xf1};
uchar bdata ADCdata;
uchar i, AD_DATA;
sbit ADbit=ADCdata^0;
/********************************************************************
函 数 名:TLC549ADC()
功 能:A/D转换子程序
说 明:读取上一次A/D转换的数据,启动下一次A/D转换
入口参数:无
返 回 值:无
设 计:yangm_cui 日 期:2008-03-19
修 改: 日 期:
***********************************************************************/
void delay()
{
uint i,j;
for(i=0;i<=5;i++)
for(j=0;j<=5;j++)
{;}
}
uchar TLC549ADC(void)
{
uchar i;
CS = 1; //芯片复位
CS = 0;
CS = 1;
// Clock = 0;
//Wait4us;
//CS = 0; //芯片起始
//Wait4us; //等待延时
//for (i = 0; i < 8; i ++) //输入采样转换时钟
//{
// Clock = 1;
// Wait1us;
// Clock = 0;
// }
CS = 1; //开始转换
Wait30us; //等待转换结束
CS= 0; //读取转换结果
Wait4us;
CLK=0;
DAT=1;
CS=0;
Wait4us;
for(i=0;i<8;i++)
{
CLK=1;
// delay();
// delay();
ADCdata<<=1; //AD转换
ADbit=DAT;
CLK=0;
delay();
}
CS=1;
return (ADCdata);
}
void display()
{
P1=0xfb;
P2=table1[AD_DATA/100];
for(i=0xff;i>0;i--) //延时
{delay();}
for(i=0xff;i>0;i--) //延时
{delay();}
//P1=0xfd;
//P0=table1[(AD_DATA%100)/10];
//for(i=0xff;i>0;i--) //延时
//{delay();}
//for(i=0xff;i>0;i--) //延时
//{delay();}
//P1=0xfe;
//P0=table1[AD_DATA%10];
//for(i=0xff;i>0;i--) //延时
//{delay();}
//for(i=0xff;i>0;i--) //延时
//{delay();}
}
/********************************************************************
函 数 名:main()
功 能:主程序
说 明:
入口参数:无
返 回 值:无
设 计:yangm_cui 日 期:2008-03-19
修 改: 日 期:
***********************************************************************/
void main()
{
while(1)
{
// uchar i;
// uchar AD_DATA; //定义A/D转换数据变量
AD_DATA=TLC549ADC(); //启动一次A/D转换
// CS=0;
for(i=1500;i>0;i--) //延时
{ delay();}
//AD_DATA=TLC549ADC(); //读取当前电压值A/D转换数据
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -