1.实践要求与方案设计
(1)要求
利用线性电位器输出一个从0~5V连续可调的直流电压并输入MC9S08AC16单片机的ADC模块进行处理,使用数码管输出实时数字电压值(精确到0.01V)。
(2)方案设计
按照设计要求,输入用模拟量使用线性电位器产生,其两端分别接+5V电源与地,通过中间抽头连接至单片机的一个A-D转换通道。数码管显示驱动电路可参考5.4.1小节中项目1的电路原理图,但在此处仅有效使用3位数码管动态显示数值(一位整数,两位小数)。软件方面,A-D模块使用查询方式完成单次、单通道、10位数模转换,使用长采样时间、软件触发模式,模块内部的ADCK时钟由总线时钟提供,采样频率1MHz,不使用模块比较功能。
2.硬件电路设计
按照设计方案,A-D转换通道选择模块的通道0,即PTB0引脚(AD1P0引脚),使用PTE口输出段码,PTE0~PTE7通过驱动芯片74LS244连接共阳型数码管的a~dp段;PTD端口的PTD0~PTD2连接译码芯片74LS138的输入端,其8位输出分别连接4连排数码管的位码选通端(本项目中仅有效使用连排数码管中的3个数码管),数字电压表项目硬件电路示意图如图9-7所示。
图9-7 数字电压表项目硬件电路示意图
3.软件设计与调试
设计时,首先按照方案中软件层面的设计思路对内部ADC模块进行初始化,设置状态和控制寄存器1(ADC1SC1)来启动一次A-D转换。在查询方式中,通过不断判断ADC1SC1的COCO位是否为1来判断A-D转换是否完成。当A-D转换结束后,读取ADC数据结果寄存器或者写零到COCO位都可以将COCO位清零。由于ADC设定为单次转换方式,所以在进行处理后需通过再次写ADC1SC1寄存器来启动下一次A-D转换。在数据处理时,由于采用10位数据精度,A-D转换后的数据将被保存在ADC1RH和ADC1RL中,所以需将这10位二进制数转化成十进制数,并经过与参考电压的线性比例折算成实际电压值,再将该实际电压每个权位上的数字保存在电压值数组volt_num[]中,通过数码管动态显示的方式显示在数码管上,数字电压表项目程序流程图如图9-8所示。(www.xing528.com)
(1)全局变量定义与函数申明
void ADC_init(); //A-D模块初始化函数
图9-8 数字电压表项目程序流程图
(3)A-D转换处理函数,用于启动一次A-D转换,并将转换后的结果返回
(4)主函数,完成A-D转换流程控制、A-D转换结果处理和数码管动态显示等
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。