苹果手机关机才能充电原来是别人AD怎么才能用自巳的

21ic官方微信-->
后使用快捷导航没有帐号?
请完成以下验证码
查看: 2552|回复: 17
能帮我看下STC12使用自己AD的程序吗?不知道哪里出错了,
&&已结帖(20)
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
#include&stc12.h&
#include&intrins.h&
#define uchar unsigned char
#define uint&&unsigned int
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;
void Lcd1602_Delay1ms(uint c);& & //误差 0us
void LcdWriteCom(uchar com);& &//LCD1602写入8位命令子函数
void LcdWriteData(uchar dat);& &//LCD1602写入8位数据子函数
void LcdInit();& && & //LCD1602初始化子程序
void adInit(void);
unsigned int getAd(unsigned char channel);
unsigned char Num[]=&the AD result :&;
void main()
uint ad,a1,a2,a3,a;
LcdInit();
for(a=0;a&15;a++)
& &LcdWriteData(Num[a]);
& &ad=getAd(0);
& &ad=(ad*5)/1024;
& &a1=ad/100;
& &a2=ad%100/10;
& &a3=ad%10;
& &LcdWriteCom(0x80+0x40);
& &LcdWriteData('0');
& &LcdWriteData(0x30+a2);
& &LcdWriteData(0x30+a3);
void adInit(void)
& && && &P1ASF=0x07; //P1.0/P1.1/P1.2口全部作为模拟功能AD使用
&&P1M0 = 0
& && && &P1M1 = 0
& && && &ADC_RES=0;& &//清零转换结果寄存器高8位
& && &&&ADC_RESL=0; //清零转换结果寄存器低2位
& && &&&ADC_CONTR=0x80;//开启AD电源
& && &&&Lcd1602_Delay1ms(1);& &//等待1ms,让AD电源稳定
unsigned int getAd(unsigned char channel)
& && && & ADC_CONTR=0x88|& & //开启AD转换 即POWER SPEED1 SPEED0 ADC_FLAG& &ADC_START CHS2 CHS1 CHS0
& && && & _nop_();
& & _nop_();
& & _nop_();
& & _nop_();//要经过4个CPU时钟的延时,其值才能够保证被设置进ADC_CONTR 寄存器& && && &
& && && & while(!(ADC_CONTR&0x10));& & //等待转换完成
& && &&&ADC_CONTR&=0xe7;& && &//关闭AD转换,ADC_FLAG位由软件清0
& && && & return(ADC_RES*4+ADC_RESL);& &//返回AD转换完成的10位数据(16进制)
其中我省略了1602显示的函数,那几个子函数没有问题的。 每次给单片机上电,P1口滞空,1602就会显示一个值,但是当采集电压的时候,显示的值又不会改变。
满意回复+20
这个是我用在STC15W404AS上的一个AD读取函数,输入是P11口,晶振6MHZ。在STC15F204EA上也使用过。
uint GetADCResult(void)
ADC_CONT ...
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
我使用的是STC12C5A60S2
主题帖子积分
高级工程师, 积分 7396, 距离下一级还需 604 积分
高级工程师, 积分 7396, 距离下一级还需 604 积分
主题帖子积分
专家等级:结帖率:14%
主题帖子积分
高级工程师, 积分 7396, 距离下一级还需 604 积分
高级工程师, 积分 7396, 距离下一级还需 604 积分
请检查硬件电路,再使用官网的AD例程试试,一定可以。
---人活着就是要改变世界!
----51单片机,单片机中的拖拉机-皮实好开易养!:)
主题帖子积分
资深技术员, 积分 330, 距离下一级还需 170 积分
资深技术员, 积分 330, 距离下一级还需 170 积分
主题帖子积分
专家等级:结帖率:50%
主题帖子积分
资深技术员, 积分 330, 距离下一级还需 170 积分
资深技术员, 积分 330, 距离下一级还需 170 积分
本帖最后由 qq 于
17:17 编辑
这个是我用在STC15W404AS上的一个AD读取函数,输入是P11口,晶振6MHZ。在STC15F204EA上也使用过。
uint GetADCResult(void)
& & uint AD_
& & ADC_CONTR=0xC1;& &//开AD电源,设置转换周期为180个时钟,设置P11为ADC通道& && && && && && && &
& & ADC_RES=0x00;& && &&&//高8位清零& &&&
& & ADC_RESL=0x00;& && &//低2位清零
& & _nop_();& && && && && && && &//需要加入几个空操作指令以做延迟
& & _nop_();
& & _nop_();
& & _nop_();
& & ADC_CONTR|=0x9;& && && && && && && && && && && &&&//启动AD转换
& & while ((0x10&ADC_CONTR)!=0x10);& && && & //等待转换完成&&
& & AD_result=(ADC_RES&&2)|(ADC_RESL&0x03);& &//合并高低位数据
& & ADC_CONTR&=0xE7;& && && && && & //清零ADC_FLAG标志位
& & //AD_result=254;& && && && && &//赋值一个固定的数用于检查数码管显示是否正常
& & return& &AD_& && && && & //返回10bit数据
& & 建议给返回值设一个随机的数,用于检查LCD是否能正常显示,再检查AD函数。
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
这个是我用在STC15W404AS上的一个AD读取函数,输入是P11口,晶振6MHZ。在STC15F204EA上也使用过。
uint Get ...
嗯,谢谢,我试试
我想问下 返回值的小数部分该怎么实现显示呢?
主题帖子积分
主题帖子积分
专家等级:结帖率:97%打赏:9.18受赏:110.10
主题帖子积分
wojfsdj 发表于
嗯,谢谢,我试试
我想问下 返回值的小数部分该怎么实现显示呢?
用浮点数类型去计算就可以了。。。
21ic公开课,21ic网友共同的学习圈子!
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
ningling_21 发表于
用浮点数类型去计算就可以了。。。
是AD函数就用float吗? 然后就是返回浮点数,再去一个数字一个数字的取?
主题帖子积分
资深工程师, 积分 11467, 距离下一级还需 8533 积分
资深工程师, 积分 11467, 距离下一级还需 8533 积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:0.10
主题帖子积分
资深工程师, 积分 11467, 距离下一级还需 8533 积分
资深工程师, 积分 11467, 距离下一级还需 8533 积分
也可以用定点计算。
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
coody 发表于
也可以用定点计算。
怎么定点计算呢?&&谢谢
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
这个是我用在STC15W404AS上的一个AD读取函数,输入是P11口,晶振6MHZ。在STC15F204EA上也使用过。
uint Get ...
我显示部分没有问题。
我将P1.1接地会显示000,接5V时,显示 :23&&,接3.3V 显示就是没规律变化的
主题帖子积分
主题帖子积分
专家等级:结帖率:97%打赏:9.18受赏:110.10
主题帖子积分
wojfsdj 发表于
是AD函数就用float吗? 然后就是返回浮点数,再去一个数字一个数字的取?
只是用浮点数计算,返回整型就可以了,例如:返回256,就代表25.6
21ic公开课,21ic网友共同的学习圈子!
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
ningling_21 发表于
只是用浮点数计算,返回整型就可以了,例如:返回256,就代表25.6
哦哦,谢谢。
我先测5V的显示的是1023,但是测3.3V的时候就是一直变化的,我该怎么处理呢?
主题帖子积分
主题帖子积分
专家等级:结帖率:97%打赏:9.18受赏:110.10
主题帖子积分
wojfsdj 发表于
哦哦,谢谢。
我先测5V的显示的是1023,但是测3.3V的时候就是一直变化的,我该怎么处理呢? ...
数字滤波处理后,再计算...
21ic公开课,21ic网友共同的学习圈子!
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
初级技术员, 积分 84, 距离下一级还需 16 积分
初级技术员, 积分 84, 距离下一级还需 16 积分
ningling_21 发表于
数字滤波处理后,再计算...
我用ADC0804直接测量就不会这么跳,但是用STC12自带的就变化范围比较大。
您说的数字滤波处理是怎么弄呢?
主题帖子积分
主题帖子积分
专家等级:结帖率:97%打赏:9.18受赏:110.10
主题帖子积分
wojfsdj 发表于
我用ADC0804直接测量就不会这么跳,但是用STC12自带的就变化范围比较大。
您说的数字滤波处理是怎么弄呢 ...
看看匠人手记里面有篇文章的...
21ic公开课,21ic网友共同的学习圈子!
主题帖子积分
初级工程师, 积分 2703, 距离下一级还需 297 积分
初级工程师, 积分 2703, 距离下一级还需 297 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级工程师, 积分 2703, 距离下一级还需 297 积分
初级工程师, 积分 2703, 距离下一级还需 297 积分
wojfsdj 发表于
我用ADC0804直接测量就不会这么跳,但是用STC12自带的就变化范围比较大。
您说的数字滤波处理是怎么弄呢 ...
看这里看这里:/blog-.html
主题帖子积分
资深技术员, 积分 328, 距离下一级还需 172 积分
资深技术员, 积分 328, 距离下一级还需 172 积分
主题帖子积分
专家等级:结帖率:80%
主题帖子积分
资深技术员, 积分 328, 距离下一级还需 172 积分
资深技术员, 积分 328, 距离下一级还需 172 积分
这个肯定可以的,我做过4通道的
主题帖子积分
资深技术员, 积分 409, 距离下一级还需 91 积分
资深技术员, 积分 409, 距离下一级还需 91 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 409, 距离下一级还需 91 积分
资深技术员, 积分 409, 距离下一级还需 91 积分
看了 但是不知道啊
技术新星奖章
人才类勋章
无冕之王奖章
等级类勋章
奔腾之江水
发帖类勋章
时间类勋章
技术导师奖章
人才类勋章
坚毅之洋流
发帖类勋章
核心会员奖章
等级类勋章
技术领袖奖章
人才类勋章
精英会员奖章
等级类勋章
时间类勋章
湍急之河流
发帖类勋章
技术奇才奖章
人才类勋章
精华达人奖章
等级类勋章
时间类勋章
涓涓之细流
发帖类勋章
热门推荐 /3

我要回帖

更多关于 手机关机才能充电 的文章

 

随机推荐