打印
[PIC®/AVR®/dsPIC®产品]

【CuriosityNano测评报告】+PIC16F15244 HT1621驱动液晶显示ADC

[复制链接]
2684|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
今天用HT1621液晶模块显示一路AD的值。代码外设配置用MCC生成,我们这里开启调试串口和一路ADC。串口配置:9600,N,8,1 启用printf重定向


ADC 用RC3对应的ANC3 ,主意数据格式为右对齐,一开始我选择的左对齐,然后发现与生成的代码里面的算法不匹配,
参考电压选择VDD。软件触发模式~


我们模拟IIC来启动HT1621:

其中HT6121代码如下:
h文件:
/* 
* File:   HT1621.h
* Author: Administrator
*
* Created on February 21, 2021, 9:01 AM
*/

#ifndef HT1621_H
#define        HT1621_H

#ifdef        __cplusplus
extern "C" {
#endif
   
#include <xc.h>
   
//HT1621??
#define  BIAS     0x52             //0b1000 0101 0010  1/3duty 4com
#define  SYSDIS   0X00             //0b1000 0000 0000  ???????LCD?????
#define  SYSEN    0X02             //0b1000 0000 0010 ???????
#define  LCDOFF   0X04             //0b1000 0000 0100  ?LCD??
#define  LCDON    0X06             //0b1000 0000 0110  ??LCD??
#define  XTAL     0x28             //0b1000 0010 1000 ?????
#define  RC256    0X30             //0b1000 0011 0000  ????
#define  WDTDIS1  0X0A            //0b1000 0000 1010  ?????
   
   
void Ht1621Wr_Data(unsigned char Data,unsigned char cnt) ;
void Ht1621WrCmd(unsigned char Cmd) ;
void Ht1621WrOneData(unsigned char Addr,unsigned char Data);
void Ht1621WrAllData(unsigned char Addr,unsigned char *p,unsigned char cnt);
void Ht1621_Init(void) ;
void Display(void) ;
void Display_lcd_dot(void) ;
void data_convertor(unsigned long adc_value) ;


#ifdef        __cplusplus
}
#endif

#endif        /* HT1621_H */

C文件:
#include "HT1621.h"
#include "pin_manager.h"

unsigned int tmp;
unsigned int n1, n2, n3, n4;
unsigned char DispTab[]={0xEB,0x0A,0xAD,0x8F,0x4E,0xC7,0xE7,0x8A,0xEF,0xCF,0x85,0xEE, 0x67, 0xE1,0x2F,0xE5,0xE4};
//??????
void Ht1621_CS_0() { HT1621_CS_SetLow() ;}  //
void Ht1621_CS_1() { HT1621_CS_SetHigh() ;}

void Ht1621_WR_0() { HT1621_WR_SetLow();}  //
void Ht1621_WR_1() { HT1621_WR_SetHigh();}

void Ht1621_DAT_0() { HT1621_DATA_SetLow();}  //
void Ht1621_DAT_1() { HT1621_DATA_SetHigh();}

void Ht1621_GND_0() { HT1621_GND_SetLow();}  //
void Ht1621_GND_1() { HT1621_GND_SetLow();}

void Ht1621_VCC_0() { HT1621_VCC_SetLow();}  //
void Ht1621_VCC_1() { HT1621_VCC_SetHigh();}

/*******************************************************************************
****????:
****????:1621?????
****??:V1.0
****??:14-2-2014
****????:Data-??????  cnt-????????
****????:
****??:
********************************************************************************/
void Ht1621Wr_Data(unsigned char Data,unsigned char cnt)
{
  unsigned char i;
  for (i=0;i<cnt;i++)
   {   
     Ht1621_WR_0();
     if((Data & 0x80)==0x80)
        {Ht1621_DAT_1();}
     else
        {Ht1621_DAT_0();}
     Ht1621_WR_1();
     Data<<=1;
   }
}
/*******************************************************************************
****????:
****????:1621?????
****??:V1.0
****??:14-2-2014
****????:Cmd ??
****????:
****??:
********************************************************************************/
void Ht1621WrCmd(unsigned char Cmd)
{
   Ht1621_CS_0();
   Ht1621Wr_Data(0x80,4);          //??????100
   Ht1621Wr_Data(Cmd,8);           //??????
   Ht1621_CS_1();
}
/*******************************************************************************
****????:
****????:1621???????
****??:V1.0
****??:14-2-2014
****????:Addr--?? Data--??
****????:
****??:
********************************************************************************/
void Ht1621WrOneData(unsigned char Addr,unsigned char Data)
{
  Ht1621_CS_0();
  Ht1621Wr_Data(0xa0,3);  //??????101
  Ht1621Wr_Data(Addr<<2,6); //??????
  Ht1621Wr_Data(Data,4); //???????? 7  6  5  4
  Ht1621_CS_1();
}
/*******************************************************************************
****????:
****????:1621???????
****??:V1.0
****??:14-2-2014
****????:Addr--?? p--??  cnt????
****????:
****??:
********************************************************************************/
void Ht1621WrAllData(unsigned char Addr,unsigned char *p,unsigned char cnt)
{
  unsigned char i;
  Ht1621_CS_0();
  Ht1621Wr_Data(0xa0,3); //??????101
  Ht1621Wr_Data(Addr<<2,6); //??????
  for (i=0;i<cnt;i++)
   {
    Ht1621Wr_Data(*p,8); //????
    p++;
   }
  Ht1621_CS_1();
}
/*******************************************************************************
****????:
****????:1621?????
****??:V1.0
****??:14-2-2014
****????:
****????:
****??:
********************************************************************************/
void Ht1621_Init(void)
{
    Ht1621_GND_0();       //HT1621 power on
    Ht1621_VCC_1();
   Ht1621WrCmd(BIAS);
   Ht1621WrCmd(RC256);             //???????
   //Ht1621WrCmd(XTAL);             //???????
   Ht1621WrCmd(SYSDIS);
   Ht1621WrCmd(WDTDIS1);
   Ht1621WrCmd(SYSEN);
   Ht1621WrCmd(LCDON);
}
/*******************************************************************************
****????:
****????:1621????
****??:V1.0
****??:14-2-2014
****????:
****????:
****??:
********************************************************************************/
void Display(void)
{

   Ht1621WrOneData(0 , DispTab[n4]);
   Ht1621WrOneData(1 , DispTab[n4]<<4);

   Ht1621WrOneData(2 , DispTab[n3]);
   Ht1621WrOneData(3 , DispTab[n3]<<4);
   
   Ht1621WrOneData(4 , DispTab[n2]);
   Ht1621WrOneData(5 , DispTab[n2]<<4);
  
   Ht1621WrOneData(6 , DispTab[n1]);
   Ht1621WrOneData(7 , DispTab[n1]<<4);
   
}
/*******************************************************************************
****????:
****????:??????
****??:V1.0
****??:14-2-2014
****????:Addr--?? Data--??
****????:
****??:
********************************************************************************/
void Display_lcd_dot(void)
{
  //Ht1621WrOneData(0 , DispTab[n4]|0x10);//P1
   Ht1621WrOneData(2 , DispTab[n3]|0x10);    //2P
   //Ht1621WrOneData(4 , DispTab[n2]|0x10);    //3P
   //Ht1621WrOneData(6 , DispTab[n1]|0x10);    //4P
}
/*******************************************************************************
****????:
****????:??????
****??:V1.0
****??:14-2-2014
****????:adc_value-???????
****????:
****??:
********************************************************************************/
void data_convertor(unsigned long adc_value)
{  
    tmp=adc_value;         //adc
    n4=tmp/1000;
    tmp=tmp%1000;
    n3=tmp/100;
    tmp=tmp%100;       
    n2=tmp/10;
    tmp=tmp%10;               
    n1=tmp;
}
下面,我们在main函数里面调用:
#include "mcc_generated_files/mcc.h"
#include "mcc_generated_files/HT1621.h"

unsigned char Ht1621Tab[]={0x00,0x00,0x00,0x00};
/*
                         Main application
*/
void main(void)
{
    //unsigned char i=0;
    uint16_t u16_adc1_value;   
    uint16_t VoltageValue;
    // initialize the device
    SYSTEM_Initialize();

    __delay_ms(5000);
   
    Ht1621_Init();        //?????LCD
    __delay_ms(5000);           //??????
    Ht1621WrAllData(0,Ht1621Tab,16);// Clear LCD display
  
    // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
    // Use the following macros to:

    // Enable the Global Interrupts
    //INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptEnable();

    // Disable the Global Interrupts
    //INTERRUPT_GlobalInterruptDisable();

    // Disable the Peripheral Interrupts
    //INTERRUPT_PeripheralInterruptDisable();
   
   
    while (1)
    {
        //u16_adc1_value=ADC_GetConversion(channel_ANC3);
        //u16_adc1_value=ADC_GetConversion(channel_AVSS);
        u16_adc1_value=ADC_GetConversion(channel_FVR_BUF1);
        VoltageValue=u16_adc1_value*3300UL/1024UL;
        data_convertor(VoltageValue);
        Display();
        Display_lcd_dot();
        printf("the ADCVALUE is %d ,the VoltageValue is %d\r\n",u16_adc1_value,VoltageValue);
        __delay_ms(1000);
    }
}
为了验证不同电压的ADC采样,我开启了FVR,并设定其为:2.048V
编译下载代码,分别测试3V3和2.048:


其中,观察了FVR的电压,会从2.049 来回跳到2.056 ,有(2.056-2.049)=0.007V的波动
查看串口输出的信息:

发现采样到的ADC值就相差2个最小单位,0.007/2=0.0035与官方精度(3.3/1024=0.0032)几乎接近。

使用特权

评论回复
沙发
弓长月月鸟| | 2021-2-22 09:01 | 只看该作者
点赞

使用特权

评论回复
板凳
奔波儿熊| | 2021-2-24 14:47 | 只看该作者
还加了液晶,不错,赞一个

使用特权

评论回复
地板
usysm| | 2021-3-6 21:03 | 只看该作者
测量频率的吗   

使用特权

评论回复
5
jkl21| | 2021-3-6 21:03 | 只看该作者
HT1621好用吗  

使用特权

评论回复
6
wwppd| | 2021-3-6 21:03 | 只看该作者
谢谢楼主分享的资料。   

使用特权

评论回复
7
maqianqu| | 2021-3-6 21:04 | 只看该作者
PIC16F15244 板子申请的吗   

使用特权

评论回复
8
dspmana| | 2021-3-6 21:04 | 只看该作者
最低的功耗可以做到多少呢   

使用特权

评论回复
9
eefas| | 2021-3-6 21:04 | 只看该作者
CuriosityNano不错。   

使用特权

评论回复
10
pl202| | 2021-3-6 21:05 | 只看该作者
PIC16F15244有几路ADC?

使用特权

评论回复
11
typeof| | 2021-3-6 21:05 | 只看该作者
直接图形配置吗

使用特权

评论回复
12
yujielun| | 2021-3-6 21:05 | 只看该作者
PIC16的芯片很好用.   

使用特权

评论回复
13
htmlme| | 2021-3-6 21:06 | 只看该作者
期待更多的测评报告了.   

使用特权

评论回复
14
dspmana| | 2021-3-6 21:06 | 只看该作者
这个是多大的参考电压?   

使用特权

评论回复
15
maqianqu| | 2021-3-6 21:06 | 只看该作者
这个板子看着非常小巧。   

使用特权

评论回复
16
eefas| | 2021-3-6 21:06 | 只看该作者
学习一下CuriosityNano

使用特权

评论回复
17
wwppd| | 2021-3-6 21:06 | 只看该作者
显示的效果非常不错。   

使用特权

评论回复
18
pl202| | 2021-3-6 21:06 | 只看该作者
PIC16F15244的ADC精度是多少   

使用特权

评论回复
19
jkl21| | 2021-3-6 21:06 | 只看该作者
有专用的驱动电路吗   

使用特权

评论回复
20
typeof| | 2021-3-6 21:06 | 只看该作者
图形开发真便利.        

使用特权

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

本版积分规则

111

主题

627

帖子

2

粉丝