📄 stc12c5202ad.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 + -