完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ADC1_CR1_bit.START = 1; //启动ADC //delay(500);
while(ADC1_SR_bit.EOC == 0); //等待转换结束 ADC1_SR_bit.EOC = 0; //清除中断标志 adc_tmp = ADC1_DRH; *AD_Value = (unsigned int)((adc_tmp << 8) + ADC1_DRL); //高8位与低8位相加,凑成16位数据 ADC1_CR1_bit.START = 0; 这是怎么读取的啊,把数据给一个指针变量,不懂,ad转换的值是二进制数?,通过液晶屏显示怎么变成十进制数呢 |
|
相关推荐
7个回答
|
|
|
|
|
|
计算机只能进行2进制运算,C程序中用10或16进制表示的表达式都会由编译器转换成2进制码。要以10进制的方式显示一个数值就得把这个数值按万、千、百、十、个分离,以字符0~9的形式显示。例如一个16位的数xx,分解方法:
wan = xx/10000; qian=(xx%10000)/1000; bai =(xx%1000)/100; shi =(xx%100)/10; ge = xx%10; |
|
|
|
对,分解就是这样的,但是ad转换的结果是二进制数xx,你不先转换十进制数,怎么xx/10000这个运算呢比如xx=0xff,十进制数位255, wan = 255/10000;不转换就是 wan = 0xff/10000,这怎么计算啊
|
|
|
|
我接受的是模拟信号,不太一样把,我用的是12864, |
|
|
|
本帖最后由 wulinwl 于 2017-4-20 16:11 编辑
huihui163 发表于 2017-4-20 15:20 C程序中用10或16进制表示的表达式都会由编译器转换成2进制码。xx=0xff一样可以分解,你就看成是xx=1111 1111,只是只有百、十、个位。只是分解成代表10进制数的符号用于显示,是符号不是数!再不明白就无语了。 |
|
|
|
不想说什么了,看看,
|
|
|
|
wulinwl 发表于 2017-4-20 16:07 void ADC_Data_Read(unsigned int *AD_Value) { ADC1_SQR4_bit.CHSEL_S0 = 1; //设置通道0序列 ADC1_CR1_bit.START = 1; //启动ADC while(ADC1_SR_bit.EOC == 0); //等待转换结束 ADC1_SR_bit.EOC = 0; //清除中断标志 *AD_Value = ADC1_DRH; //先读取高8位 *AD_Value = (unsigned int)((*AD_Value << 8) + ADC1_DRL); //高8位与低8位相加,凑成16位数据 } ADC_Data_Read(&ADCData); 这里 *AD_Value直接用个变量AD_Value也行吧调用该成ADC_Data_Read(AD_Value); |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
657 浏览 0 评论
2334 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2137 浏览 3 评论
4767 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2282 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 16:00 , Processed in 0.931623 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号