最近在学习AVR单片机ADC章节内容时,建立了adc.c和display8.c两个文件。adc文件初始化ADC,设置ADC端口、使能和中断;display8.c文件将ADC读取数据通过51单片机HC6800开发板上的8位LED进行显示。main函数保持在adc.c文件内,每次通过adc.c文件中的main函数跨文件调用display()函数时,display()函数中的自变量uchar DisVal的值总是默认为1,即使加入关键字volatile后问题依然存在。
经过反复的模拟在线仿真试验后,发现DisVal被gcc编译器默认为局部函数的变量,将变量DisVal变量提到display8.c文件开头进行定义后,变量的值回复正常。
这个问题虽然解决了,但是下载到51开发板后,又发现8个数码管的位选显示不正常,同时LED亮度很微弱,使用万用表检查电路板,每次ls138某一位为零时,板子工作就不正常,测量电压为-1.9v。
AVR单片机IO口具有吸收电流的功能,两块板子的GND电压不一致导致了51单片机开发板的工作电压过低工作不正常,查明原因后,将两块板子的GND进行连接,8位LED数码管显示正常。