标签:return 方式 main 时间 进入 采集 高性能 数码管 alt
#include <reg51.h> #include "TLC549.c" code uchar seven_seg[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; //0--9 uchar cp, j; uint dat_ad; //模拟信号 void timer0_init(void); //声明中断初始化函数 void timer0_isr(void); //声明中断服务函数 /**************************主函数***************************/ void main(void) { timer0_init(); // 中断初始化函数 tlc549_init(); //tlc549初始化函数 while(1); //循环 } /**********************中断初始化函数***********************/ void timer0_isr(void) interrupt 1 { TH0 = 0xf8; TL0 = 0x2f; cp++; if(cp >= 250) // 0.5秒让ADC0832转换一次 { cp = 0; dat_ad = tlc549_ad() * 1.96; // ,模拟信号转化为数字信号 } P0 = 0xff; switch(j) { case 0: P0 = seven_seg[dat_ad % 10]; P2 = ~0x01; break; //模拟信号 case 1: P0 = seven_seg[dat_ad % 100 / 10]; P2 = ~0x02; break; case 2: P0 = seven_seg[dat_ad / 100] & 0x7f; P2 = ~0x04; break; //模拟信号三位 case 3: P0 = seven_seg[tlc549_ad() % 10]; P2 = ~0x08; break; //数字信号 case 4: P0 = seven_seg[tlc549_ad() % 100 / 10]; P2 = ~0x10; break; case 5: P0 = seven_seg[tlc549_ad() / 100]; P2 = ~0x20; break; //数字信号三位 } j++; if(j >= 6) //共六位 j = 0; } void timer0_init(void) //中断初始化函数 { TMOD = 0x01; //方式一 TH0 = 0xf8; TL0 = 0x2f; //对机器脉冲计数,2000个计满溢出引发中断 EA = 1; //总中断 ET0 = 1; //T0中断 TR0 = 1; //启动定时器T0 } /****************************************************************************************/ /*************************************TLC549的驱动程序***********************************/ /*TLC549模数转换将连续变化的模拟信号转换为离散的数字信号V = 5 / 256 = 0.01953v = 19.53mv*/ /****************************************************************************************/ #define uchar unsigned char //宏定义用uchar 代替 unsigned char (0--255) #define uint unsigned int //宏定义用uint 代替 unsigned int (0--65535)
sbit SCLK = P3^7; //I/O时钟
sbit CS = P3^4; //片选 sbit SDO = P3^5; //数据线 /***********************TLC549初始化**************************/ void tlc549_init(void) { CS = 1; //初始化,启动 SCLK = 0; CS = 0; } /**********************TLC549数据转换*************************/ uchar tlc549_ad(void) { uchar i, dat_temp = 0; tlc549_init(); for(i = 0; i < 8; i++) //读取采集数据,读取的是上一次采集的数据 { SCLK = 1; dat_temp <<= 1; if(SDO)dat_temp |= 0x01; SCLK = 0; } CS = 1; return(dat_temp); }
TLC549应用 (1) TLC的作用 TLC549是 TI公司生产的一种低价位、高性能的8位 A/D转换器,采用了CMOS工艺,它以8位开关电容逐次逼近的方法实现 A/D转换,其转换速度小于 17us,最大转换速率为 40000HZ,4MHZ典型内部系统时钟,电源为 3V至 6V。它能方便地采用三线串行接口方式与各种微处理器连接,构成各种廉价的测控应用系统。能够实现模拟信号到数字信号的转换。 (2) 对TLc549的认识 模拟信号到数字信号的转换。 (4)工作原理 当/CS变为低电平后, TLC549芯片被选中, 同时前次转换结果的最高有效位MSB (A7)自 DATA OUT 端输出,接着要求自 I/O CLOCK端输入8个外部时钟信号,前7个 I/OCLOCK信号的作用,是配合 TLC549 输出前次转换结果的 A6-A0 位,并为本次转换做准备:在第4个 I/O CLOCK 信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个 I/O CLOCK 信号的下降沿使片内采样/保持电路进入保持状态并启动 A/D开始转换。转换时间为 36 个系统时钟周期,最大为 17us。直到 A/D转换完成前的这段时间内,TLC549 的控制逻辑要求:或者/CS保持高电平,或者 I/O CLOCK 时钟端保持36个系统时钟周期的低电平。由此可见,在自 TLC549的 I/OCLOCK 端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次 A/D转换开始。 (4)器件的作用 Pot-hg:产生0~5V的电压,作为模拟信号,传递给tlc549. 数码管:显示数字信号和模拟信号的数值 Respack_8:驱动,电流不够,加排阻增加电流,排阻一般有九个脚,一个脚接VCC,其他脚接单片机I/o口,比如说P0口,一般需要加排阻。 7404反相器:增大电流 Tlc549: 模拟信号到数字信号的转换。
标签:return 方式 main 时间 进入 采集 高性能 数码管 alt
原文地址:https://www.cnblogs.com/zhai1997/p/9066078.html