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

📄 tlc549.c

📁 TLC549实现A/D转换的程序
💻 C
字号:
/*******************************************************************************
*  标题:  蓝海微芯LJD-SY-5200单片机开发系统演示程序                            *
*  文件:  TLC549.C                                                             *
*  日期:  2006-8-11                                                            *
*  版本:  1.0                                                                  *
*  作者:  蓝海微芯                                                             *
*  网站: http://www.ljd-2008.com                                              *
********************************************************************************
*  描述:                                                                       *
*         A/D TLC549转换程序                                                   *     
*                                                                              *
*                                                                              *
********************************************************************************
* 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com    All Rights Reserved  *          
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
*******************************************************************************/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>

typedef unsigned char uchar;
typedef unsigned int  uint;

sbit CLK        = P1^1;             /* AD时钟信号 */
sbit CS         = P1^5;             /* AD片选信号 */
sbit DOUT       = P1^0;             /* 数据输出   */
sbit ch451_din  = P3^5;
sbit ch451_clk  = P3^4;
sbit ch451_load = P1^2;
sbit P1_4       = P1^4;
sbit P1_3       = P1^3;
/*须主程序定义的参数*/
#define CH451_DIG0      0x0800                  /*数码管位0显示*/
#define CH451_DIG1      0x0900                  /*数码管位1显示*/
#define CH451_DIG2      0x0a00                  /*数码管位2显示*/
#define CH451_DIG3      0x0b00                  /*数码管位3显示*/
#define CH451_DIG4      0x0c00                  /*数码管位4显示*/
#define CH451_DIG5      0x0d00	                /*数码管位5显示*/	
#define CH451_DIG6      0x0e00	                /*数码管位6显示*/	
#define CH451_DIG7      0x0f00                  /*数码管位7显示*/

void delay(uint us)
{
    while(us--);
}
/* */
/********************************************************************
函 数 名:adc_549()
功    能:读取AD输出的10bit数据 
说    明:
调    用:
入口参数:
返 回 值:
设    计:蓝海微芯           
***********************************************************************/
uint adc_549(void)
{
  uint  data_out=0;
  uchar i;
    
  CS = 1;
  _nop_();
  CS = 0;
  for (i=0; i<8; i++)  /* 读取10位数据 */
  {            
    CLK = 0;
    data_out = (data_out<<1)|DOUT;
    CLK = 1;
    _nop_();             
  }                  
  CLK = 0;         
  CS = 1;  
  delay(3);             /* 延时21us以上 */        
  return(data_out);
}
/********************************************************************
函 数 名:ch451_init()
功    能:对ch451芯片进行初始化
说    明:
调    用:
入口参数:
返 回 值:
设    计:蓝海微芯           
***********************************************************************/
void ch451_init(void)
{
  ch451_din  = 0;           /*先低后高,选择4线输入*/
  ch451_din  = 1;	
  ch451_load = 1;
  ch451_clk  = 1;
  _nop_();
}
/********************************************************************
函 数 名:ch451_write()
功    能:把12位的指令或数据写入ch451
说    明:12位数据或指令的写入顺序是低位
调    用:
入口参数:command
返 回 值:
设    计:蓝海微芯           
***********************************************************************/
void ch451_write(unsigned int command)
{
  unsigned char i;	
  ch451_load=0;                 	   /*命令开始*/    
  for(i=0;i<12;i++)
  {                             	   /*送入12位数据,低位在前*/
    ch451_din=command&1;				
    ch451_clk=0;
    command>>=1;
    ch451_clk=1;              	 	   /*上升沿有效*/
  }
  ch451_load=1;                		   /*加载数据*/
}
/********************************************************************
函 数 名:disp_ad()
功    能:把A/D转换结果通过数码管进行显示
说    明:
调    用:
入口参数:command
返 回 值:
设    计:蓝海微芯           
***********************************************************************/
void disp_ad(uint adc_result)
{
  uchar A;
  uchar B;
  uchar C;
  uchar D;

  A = adc_result/1000;
  B = adc_result%1000/100;
  C = adc_result%1000%100/10;
  D = adc_result%1000%100%10;
  ch451_write(CH451_DIG4|A);         
  ch451_write(CH451_DIG5|B);
  ch451_write(CH451_DIG6|C);
  ch451_write(CH451_DIG7|D);
  delay(10000);
  delay(10000);
}
/********************************************************************
函 数 名:main()
功    能:主程序
设    计:蓝海微芯           
***********************************************************************/
main()
{
  ch451_init();
  ch451_write(0x401);
  ch451_write(0x580);         /*以译码方式进行显示*/
  P1_4=1;
  P1_4=0;
  P1_3=1;
  while(1)
  {
    float temp=0;
    temp = adc_549();  
    disp_ad(temp);
  }
}

⌨️ 快捷键说明

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