打印
[通用8051核FLASH系列]

基于HC89F003的电压检测与显示

[复制链接]
2137|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 芯圣电子官方QQ 于 2023-7-20 11:15 编辑

HC89F003内部具有A/D转换单元,使用它可进行模拟信号的采集,使用新近得到的一个spi接口的OLED屏则能充当采样数据的显示器,其构成如图所示。

电压检测构成及执行效果

spi接口的OLED显示屏共有7个引脚,其引脚排列及用途如下:
1.   GND 电源地
2.   VCC3.3v~5.0V
3.   SCLK 时钟信号端
4.   SDIN 数据信号端
5.   CS   片选信号端
6.   RST  复位信号端
7.   DC   指令/数据选择端

在使用中它与HC89F003的连接关系如下:
SCLK--P07   SDIN--P06  CS--P22  RST--P20   DC--P02

为与OLED的例程相衔接,对效果引脚的高低电平输出定义如下:
#define OLED_SCLK_Clr() GPIO_WriteLow(GPIOT0,GPIO_PIN_7);  
#define OLED_SCLK_Set() GPIO_WriteHigh(GPIOT0,GPIO_PIN_7);
#define OLED_SDIN_Clr() GPIO_WriteLow(GPIOT0,GPIO_PIN_6);  
#define OLED_SDIN_Set() GPIO_WriteHigh(GPIOT0,GPIO_PIN_6);
#define OLED_CS_Clr()   GPIO_WriteLow(GPIOT2,GPIO_PIN_2);  
#define OLED_CS_Set()   GPIO_WriteHigh(GPIOT2,GPIO_PIN_2);
#define OLED_RST_Clr()  GPIO_WriteLow(GPIOT2,GPIO_PIN_0);  
#define OLED_RST_Set()  GPIO_WriteHigh(GPIOT2,GPIO_PIN_0);
#define OLED_DC_Clr()   GPIO_WriteLow(GPIOT0,GPIO_PIN_2);  
#define OLED_DC_Set()   GPIO_WriteHigh(GPIOT0,GPIO_PIN_2);

    在利用单通道A/D采集例程的基础上,实现采样值显示的主程序如下:
void main(void)
{
        u16 s;
        u8 n;
        System_Init();                                                        
        GPIO_Init(GPIOT0,GPIO_PIN_0,GPIO_MODE_IN_AN);
        ADC_Cmd(ENABLE);                                                
        ADC_Init(DATA10,RIGHT_ALIGN,ADC_CLOCK_OSC_16);        
        ADC_VrefConfig(VREF_IN_VDD);                          
        ADC_ChannelConfig(ADC_AN0);
        GPIO_Init(GPIOT0,GPIO_PIN_6, GPIO_MODE_OUT_PP);
        GPIO_Init(GPIOT0,GPIO_PIN_7, GPIO_MODE_OUT_PP);
        GPIO_Init(GPIOT2,GPIO_PIN_2, GPIO_MODE_OUT_PP);
        GPIO_Init(GPIOT2,GPIO_PIN_0, GPIO_MODE_OUT_PP);
        GPIO_Init(GPIOT0,GPIO_PIN_2, GPIO_MODE_OUT_PP);
        OLED_Init();                        
        OLED_Clear();
        OLED_ShowString(8,2,"ADC TEST");        
        OLED_ShowString(8,4,"A/D:");
        OLED_ShowString(8,6,"V=  ");
        while(1)
        {
                ADC_StartConversion();                                   
                while(ADC_GetITFlag() != SET);               
                ADC_ClearITFlag();
                s=ADC_GetResault();
                n=s/1000+'0';
                OLED_ShowChar(40,4,n);
                n=s%1000/100+'0';
                OLED_ShowChar(48,4,n);
                n=s%100/10+'0';
                OLED_ShowChar(56,4,n);
                n=s%10+'0';
                OLED_ShowChar(64,4,n);
                s=s*33/1024;
                n=s%100/10+'0';
                OLED_ShowChar(40,6,n);
                OLED_ShowChar(48,6,'.');
                n=s%10+'0';
                OLED_ShowChar(56,6,n);
                OLED_ShowChar(64,6,'V');
                delay_ms(500);
         }
}


沙发
sopc12| | 2017-12-6 14:38 | 只看该作者
支持,不错

使用特权

评论回复
板凳
冷画| | 2017-12-7 09:47 | 只看该作者
顶一下

使用特权

评论回复
地板
jinglixixi|  楼主 | 2017-12-7 10:57 | 只看该作者

多谢!!!

使用特权

评论回复
5
ningling_21| | 2017-12-7 13:53 | 只看该作者
不错

使用特权

评论回复
6
madsp| | 2018-1-8 21:41 | 只看该作者
检测电压准吗?我做的用数码管显示为什么一直相差0.2伏啊!

使用特权

评论回复
7
Fish1888| | 2018-1-17 17:49 | 只看该作者
顶一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

455

主题

2756

帖子

38

粉丝