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

📄 stc12c5202ad.c

📁 STC12C5202AD的AD程序 STC12C5202AD的AD程序 STC12C5202AD的AD程序
💻 C
字号:
/******************************************************/
/*此程序使用的是STC12C5202AD型单片机,包括AD转换,串口通信,TLC5615DA的驱动。*/
/********************************************************/
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include<reg52.h>

#define uint unsigned int
#define uchar unsigned char

sfr ADC_CONTR=0xBC;//AD转换寄存器
sfr ADC_RES=0xBD;//8位AD转换结果寄存器
sfr P1ASF=0x9D;//P1口中的相应位作为模拟功能使用时的控制寄存器,如做AD用相应位要置1

//uint sec=0;//1秒标志
//uint min=0;//1分标志
//uint hour=0;//1小时标志
//uint ms10value=0;//秒计数
//uint countsec=0;
//uint countmin=0;
uint ADres;//AD转换结果

sbit SPI_DATA=P1^6;
sbit SPI_CLK=P1^5;
sbit CS_DA=P1^4;
sbit LED=P1^3;

/**********************延时1us******************************/
void delay1us (uint a)
{
for(a;a>0;a--)
  {_nop_();}
}

/**********************延时1ms******************************/
void delay1ms (uint b)
{
 for(b;b>0;b--)
 {uint i;
  for(i=0;i<1000;i++)
   {;}
 }
}

//void Timer0_Routine(void) interrupt 1
//{;}
/********************定时器1中断*********************/
/*void Timer1_Routine(void) interrupt 3
{ 
  TH1=0xD8;
  TL1=0xF0; //定时10ms
  ms10value++;
  if(ms10value==100)//1秒时间到
   {
    ms10value=0;
    sec=1;
    countsec++;
   }
    if(countsec==60)//1分时间到
    {
     countsec=0;
     min=1;
     countmin++;
    }
    if(countmin==60)//1小时时间到
     {
      countmin=0;
      hour=1;
     }
}*/
/*****************定时器1初始化***********************/
/*void Timer1init()
{
  TMOD=0x10;//选择T1、定时模式,工作方式1
  TH1=0xD8;
  TL1=0xF0; //定时10ms
  ET1=1;//开T1中断
  EA=1;//开总中断
  TR1=1;//启动T1开始计时
}*/
/*****************AD初始化****************************/
void ADinit()
{
 ADC_CONTR=ADC_CONTR|0x80;//开AD转换电源
 delay1ms(1);  //延时1ms
 P1ASF=P1ASF|0x80;  //设置P1.7口为模拟功能AD口
 ADC_CONTR=0xE7;//设置P1.7为AD输入
 delay1us(100); //延时100us
}
/****************取得AD的值************************/
void ADresult()
{
 ADinit();
 ADC_RES=0x00;
 ADC_CONTR=ADC_CONTR|0x08;//启动AD转换
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 if((ADC_CONTR&0x10)==0x10)
 {
  ADC_CONTR=ADC_CONTR&0xE7;//清标志位ADC_FLAG和ADC_START位,停止AD转换
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ADres=ADC_RES;
  P1ASF=P1ASF&0x7F;
 }
}
/***********************TLC5615数模转换*****************************/
void da5615(uint da)
{
uchar i;
da<<=6;

CS_DA=0;
SPI_CLK=0;

for (i=0;i<12;i++)
{
SPI_DATA=(bit)(da&0x8000);
SPI_CLK=1;
da<<=1;
SPI_CLK=0;
}

CS_DA=1;
SPI_CLK=0;
for (i=0;i<12;i++);
} 
/******************串口初始化*********************/
/*晶振为11.0592MHZ*/
/*波特率为9600*/
/*void RS232init()
{
 ES=0;//禁止串口中断
 TMOD=0x20;//设置T1为波特率发生器
 SCON=0x50;//0101,00008位数据位,无奇偶校验
 TH1=0xFD;
 TL1=0xFD;
 TR1=1;
}
void SendDat()
{
 SBUF=ADC_RES;
 if(TI==1)
 {
  TI=0;
 }
}*/

void main()
{
//Timer1init();
//RS232init();
 LED=1;
while(1)
{
 ADresult();
 delay1ms (10);
 if(ADC_RES>0x18)
 {
  LED=0;
  delay1ms (2000);
  da5615(0x0FC);
  delay1ms (10);
 }
 if(ADC_RES<0x12)
 {
  LED=1;
  delay1ms (2000);
  da5615(0xF0C);
  delay1ms (10);
 }
//SendDat();

}
}

⌨️ 快捷键说明

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