📄 chengxu.c
字号:
/********************************************************************
汇诚科技
实现功能: AD值控制继电器延时吸合时间
使用芯片:STC12C5204AD
晶振:11.0592MHZ
编译环境:Keil
硬件环境:四位数显两路输入三按键
作者:yang
QQ:790244909
网站:www.ourhc.cn
物联网测试网站:http://hualongelectron.eicp.net/
日期:2013-04-02
淘宝店:
华龙电子直销:http://hlelectrony.taobao.com
电子开发直销:http://shop63233873.taobao.com
汇诚科技网路购物:http://shop36330473.taobao.com
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
********************************************************************/
/********************************************************************
采样AD的电压值作为继电器的延时吸合时间
0到255秒可调
********************************************************************/
#include<STC12C5A60S2.H> //库文件
#include <intrins.h>
#include"SMG.H"
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
#define FOSC 11059200L
#define BAUD 9600
#define ADC_POWER 0x80 //ADC 电源控制位
#define ADC_FLAG 0x10 //ADC 转换结束标志位
#define ADC_START 0x08 //ADC 开始转换控制位
#define ADC_SPEEDLL 0x00 //420个时钟周期转换一次
#define ADC_SPEEDL 0x20 //280 个时钟周期转换一次
#define ADC_SPEEDH 0x40 //140个时钟周期转换一次
#define ADC_SPEEDHH 0x60 //70个时钟周期转换一次
extern void t_to_dis(void);
extern void display(void); //显示函数
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
/********************************************************************
延时函数
*********************************************************************/
void delay(uint x)//延时程序 0.1秒
{
uchar m,n,s;
for(m=x;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
/********************************************************************
AD转换初始化程序
*********************************************************************/
void InitADC()
{
P1ASF|=0x10; //设置P1口为开漏模式,使用AD功能
ADC_RES=0; //AD数据寄存器清空
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START;//打开AD电源,转换周期XX
delay(10); //延时
}
/********************************************************************
AD转换控制程序
*********************************************************************/
uchar GetADCResult(uchar px) //转换输出的数据 (PX为通道口)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL |px| ADC_START;//开始转换
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
_nop_(); //延时一个机器周期
while (!(ADC_CONTR & ADC_FLAG));//等待转换结束
ADC_CONTR &= ~ADC_FLAG; //关闭AD转换
return ADC_RES; //返回数据
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
P2M1=0;
P2M0=0xff;
P1M1=0;
P1M0=0x0f;
P3M1&=0x7f;
P3M0|=0x80;
P3=0xff;
cshh();
InitADC(); //AD转换初始化
while(1)
{ GetADCResult(4);
t_to_dis();
display();
}
}
/********************************************************************
结束
*********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -