
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch //开始转换
这是用STC单片机内部A/D转换电路进行A/D转换时,要给A/D控制寄存器ADC_CONTR写启动转换命令,ADC_CONTR是ADC控制寄存器,其中的每一位的作用见下图,而这行语句前面肯定要有定义每一位状态的语句,或用#define宏定义了各位的值。
重点不在算法,重点是会AD_init() 和AD_get(channel)会初始化和启动AD转换并读取转换结果
至于换算是根据自己电路情况确定的,由于计算时采用过多的浮点型变量会占用较多内存,造成内存不足,因此有除法时常采用整形变量进行计算,运算时为了保持尾数不丢失,需把被除数扩大100倍或1000倍,如整数123/100=1,小数部分丢失了,为得到1.23这个结果,需把123扩大100倍,变成12300,12300/100=123.0,然后将小数点向左移2位(缩小100倍),即得1.23 这就是定(小数)点计算
LedCtrl = LedCtrl &0xdf大概就是一次选通一个数码管,7f df ef bf每次只有一位是0
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit wr=P2^6
sbit rd=P2^7
sbit adint=P2^5
delay(uint z)
{
uchar w
while(z--)
{
for(w=0w<125w++)
}
}
ad_star()
{
wr=1
wr=0
wr=1
}
main()
{
uchar a
while(1)
{
ad_star()
while(adint)
rd=0
a=P0
delay(10)
rd=1
if(a>0&a<=20){P3=0xc0}
if(a>20&a<=40){P3=0xf9}
if(a>40&a<=60){P3=0xa4}
if(a>60&a<=80){P3=0xb0}
if(a>80&a<=100){P3=0x99}
if(a>100&a<=120){P3=0x92}
if(a>120&a<=140){P3=0x82}
if(a>140&a<160){P3=0xf8}
if(a>160&a<=180){P3=0x80}
if(a>180&a<=200){P3=0x90}
if(a>200&a<=220){P3=0x88}
if(a>220&a<=240){P3=0x83}
if(a>240&a<=255){P3=0xc6}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)