本帖最后由 jinglixixi 于 2021-3-5 21:09 编辑
本打算再完成一个OLED屏的显示驱动,无奈在显示过一次字符后就不显示了,只好先放下再弄。在完成了A/D转换功能后,就只好用数码管显示模块来进行显示了,其显示效果如图1所示。 图1 采样值显示效果 A/D转换的初始化函数为: - void Init_Adc( void )
- {
- ADC_APCTL1 = 0x01;
- ADC_APCTL2 = 0x00;
- ADC_SC3 = 0x58;
- }
复制代码
读取转换值的函数为: - unsigned short GetAdc( unsigned char channel)
- {
- ADC_SC1 = channel;
- while( !ADC_SC1_COCO );
- return ADC_R;
- }
复制代码
实现显示效果的主程序为: - void main(void)
- {
- uint8_t i = 0;
- uint16_t adv=0;
- Sys_Init();
- EnableInterrupts;
- MTIM1_Init();
- gd_eval_smg_init();
- Init_MAX7219();
- DelayMS(100);
- Init_Adc();
- while(1)
- {
- DelayMS(1000);
- adv=GetAdc( 12);
- Write_Max7219(0x0f, 0x00);
- Write_Max7219(1,0x0F); //不显示
- Write_Max7219(2,0x0F);
- Write_Max7219(3,0x0F);
- Write_Max7219(4,0x0F);
- i=adv%10;
- Write_Max7219(5,i+0X80); //个位及配小数点
- i=adv%100/10;
- Write_Max7219(6,i); //十位
- i=adv%1000/100;
- Write_Max7219(7,i); //百位
- i=adv%10000/1000;
- Write_Max7219(8,i); //千位
- }
- }
复制代码
比较有意思的是由于数码管有8位,而显示值只用4位,如果将不使用的4位均显示‘0’,会看起来很乱。 为此查了一下显示模块的显示表,见图2所示,才把指定位不显示的问题解决了。此外,还解决小数点的显示问题,总之还是小有收获的。 图2 显示表
|