这是STC12C2052AD的例子
/**********************************************************
AD转换
**********************************************************/
void InitADC()
{
P1=0xff
ADC_CONTR|=0x80
delayNOP(200)
P1M0=0x01//这两个寄存器用来设置 P1口四种状态,每一位对应一个P1引迟清脚 ,按状态组合 *** 码族前作
P1M1=0x01//设置P1.0为开漏状态
delayNOP(200)
}
uint ADC()
{
ADC_DATA = 0//清除结果
ADC_CONTR = 0x60 //转换速度设置 0x60 最快速度
ADC_CONTR = 0xE0 //1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位
ADC_CONTR =0xe0
delayNOP(200)//使输入电压达到稳定
ADC_CONTR = 0xe8 //1110,1000 令 ADCS = 1, 启动A/D转换,
while (1) //等待A/D转换结束
{
if (ADC_CONTR &0x10) //0001,0000 测试A/D转换结束否
{ break}
}
ADC_CONTR =0xe0 //1110,0111 清 ADC_FLAG 位, 关闭A/D转换,
delayNOP(400)
return ADC_DATA //返回 A/D 10 位转换结果
}
void ADC_to_key()//ADC数据转换按键信号
{
V=ADC()
。。。
。。。
。。。你自己完成咯
}
#include<reg52.h>#define uint unsigned int
#define uchar unsigned char
void delay_ms(uint)
sbit led0=P0^0
sbit led1=P0^1
sbit key1=P3^2
sbit key2=P3^3
void main()
{
uchar i=0
uchar j=0
while(1)
{
if(key1==0)//按键1
{
delay_ms(10)
铅岩 if(key1==0)
{
i++
i=i%2
switch(i)
{
case 0: led0=1 break//关小灯
case 1: led0=0 break//开小灯
default: break
}
}
while(!key1)
}
if(key2==0)//按键2
{
delay_ms(10)
if(key2==0)
{
j++
j=j%2
差激粗 switch(j)
{
case 0: led1=1 break//关小灯
case 1: led1=0 break//开小灯
default: break
}
}
while(!key2)
}
虚镇}
}
void delay_ms(uint z) //延时子程序
{
uint x,y
for(x=zx>0x--)
for(y=110y>0y--)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)