完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
本例,使用1ch进行ADC转换,对应的引脚为PA1,连续转换,在main中只要调用void Init_AD(INT8U ch)后,便可以初始化。初始化后,调用void Read_ADC(INT8U ch)便可以随时读取ADC的转换结果;
ADC_tran.c文件如下: #include 《avr/io.h》 #include 《util/delay.h》 #include 《stdio.h》 #include “lcd1602.h” #define INT8U unsigned char #define INT16U unsigned int #define CH 0x01 INT16U adc_data; char str[20]; void Init_AD(INT8U ch) { DDRA &= (0《《ch); //把通道ch设置位输入; PORTA &= (0《《ch); //把通道ch设置为0; ADMUX = (1《《REFS1)|(1《《REFS0)|(0《《ADLAR)| ch; //选择ch通到,数据右对齐,选择2.56V作为参考电平; SFIOR = (0《《ADTS1) & (0《《ADTS2) & (0《《ADTS1); //使用连续转换方式 ADCSRA = (1《《ADEN) | (1《《ADSC) | (1《《ADATE) | (1《《ADPS0); //ADC使能,ADATE自动触发使能,ADPS选为2分频;开始正式转换,需等待25个ADC时钟周期; _delay_ms(1000); //开始ADC转换; } void Read_ADC(INT8U ch) { ADMUX |= ch; //选择读取的通道ch; adc_data = ADC; //读取ADC转换结果; Display_String(0,0,“ ”); //清屏; sprintf(str,“power is %d”,adc_data); //把需要显示的数据写入字符串; Display_String(0,0,str); //显示字符串STR; _delay_ms(200); //防止屏幕闪烁太快; } ADC_tran.h文件如下: #ifndef ADC_TRAN_H_ #define ADC_TRAN_H_ #include 《avr/io.h》 #include 《util/delay.h》 #include 《stdio.h》 #include “lcd1602.h” #define CH 0x01 extern void Init_AD(INT8U ch); extern void Read_ADC(INT8U ch); #endif /* ADC_TRAN_H_ */ 最后,为了方便显示,调用了LCD驱动来显示,以为可参考上一篇关于LCD驱动的文章; 最终的main如下: #define F_CPU 4000000UL #include “lcd1602.h” #include “ADC_tran.h” int main(void) { Init_LCD1602(); Init_AD(CH); while(1) { Read_ADC(CH); } } 使用Proteuss仿真如下: |
|
|
|
只有小组成员才能发言,加入小组>>
2513 浏览 0 评论
1085浏览 2评论
700浏览 1评论
453浏览 0评论
194浏览 0评论
331浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 12:16 , Processed in 1.247209 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号