[PIC®/AVR®/dsPIC®产品] 【CuriosityNano测评报告】+PIC16F15244 HT1621驱动液晶显示ADC

[复制链接]
3554|31
 楼主| qjp1988113 发表于 2021-2-22 08:54 | 显示全部楼层 |阅读模式
今天用HT1621液晶模块显示一路AD的值。代码外设配置用MCC生成,我们这里开启调试串口和一路ADC。串口配置:9600,N,8,1 启用printf重定向


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


我们模拟IIC来启动HT1621:

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

  7. #ifndef HT1621_H
  8. #define        HT1621_H

  9. #ifdef        __cplusplus
  10. extern "C" {
  11. #endif
  12.    
  13. #include <xc.h>
  14.    
  15. //HT1621??
  16. #define  BIAS     0x52             //0b1000 0101 0010  1/3duty 4com
  17. #define  SYSDIS   0X00             //0b1000 0000 0000  ???????LCD?????
  18. #define  SYSEN    0X02             //0b1000 0000 0010 ???????
  19. #define  LCDOFF   0X04             //0b1000 0000 0100  ?LCD??
  20. #define  LCDON    0X06             //0b1000 0000 0110  ??LCD??
  21. #define  XTAL     0x28             //0b1000 0010 1000 ?????
  22. #define  RC256    0X30             //0b1000 0011 0000  ????
  23. #define  WDTDIS1  0X0A            //0b1000 0000 1010  ?????
  24.    
  25.    
  26. void Ht1621Wr_Data(unsigned char Data,unsigned char cnt) ;
  27. void Ht1621WrCmd(unsigned char Cmd) ;
  28. void Ht1621WrOneData(unsigned char Addr,unsigned char Data);
  29. void Ht1621WrAllData(unsigned char Addr,unsigned char *p,unsigned char cnt);
  30. void Ht1621_Init(void) ;
  31. void Display(void) ;
  32. void Display_lcd_dot(void) ;
  33. void data_convertor(unsigned long adc_value) ;


  34. #ifdef        __cplusplus
  35. }
  36. #endif

  37. #endif        /* HT1621_H */

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

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

  9. void Ht1621_WR_0() { HT1621_WR_SetLow();}  //
  10. void Ht1621_WR_1() { HT1621_WR_SetHigh();}

  11. void Ht1621_DAT_0() { HT1621_DATA_SetLow();}  //
  12. void Ht1621_DAT_1() { HT1621_DATA_SetHigh();}

  13. void Ht1621_GND_0() { HT1621_GND_SetLow();}  //
  14. void Ht1621_GND_1() { HT1621_GND_SetLow();}

  15. void Ht1621_VCC_0() { HT1621_VCC_SetLow();}  //
  16. void Ht1621_VCC_1() { HT1621_VCC_SetHigh();}

  17. /*******************************************************************************
  18. ****????:
  19. ****????:1621?????
  20. ****??:V1.0
  21. ****??:14-2-2014
  22. ****????:Data-??????  cnt-????????
  23. ****????:
  24. ****??:
  25. ********************************************************************************/
  26. void Ht1621Wr_Data(unsigned char Data,unsigned char cnt)
  27. {
  28.   unsigned char i;
  29.   for (i=0;i<cnt;i++)
  30.    {   
  31.      Ht1621_WR_0();
  32.      if((Data & 0x80)==0x80)
  33.         {Ht1621_DAT_1();}
  34.      else
  35.         {Ht1621_DAT_0();}
  36.      Ht1621_WR_1();
  37.      Data<<=1;
  38.    }
  39. }
  40. /*******************************************************************************
  41. ****????:
  42. ****????:1621?????
  43. ****??:V1.0
  44. ****??:14-2-2014
  45. ****????:Cmd ??
  46. ****????:
  47. ****??:
  48. ********************************************************************************/
  49. void Ht1621WrCmd(unsigned char Cmd)
  50. {
  51.    Ht1621_CS_0();
  52.    Ht1621Wr_Data(0x80,4);          //??????100
  53.    Ht1621Wr_Data(Cmd,8);           //??????
  54.    Ht1621_CS_1();
  55. }
  56. /*******************************************************************************
  57. ****????:
  58. ****????:1621???????
  59. ****??:V1.0
  60. ****??:14-2-2014
  61. ****????:Addr--?? Data--??
  62. ****????:
  63. ****??:
  64. ********************************************************************************/
  65. void Ht1621WrOneData(unsigned char Addr,unsigned char Data)
  66. {
  67.   Ht1621_CS_0();
  68.   Ht1621Wr_Data(0xa0,3);  //??????101
  69.   Ht1621Wr_Data(Addr<<2,6); //??????
  70.   Ht1621Wr_Data(Data,4); //???????? 7  6  5  4
  71.   Ht1621_CS_1();
  72. }
  73. /*******************************************************************************
  74. ****????:
  75. ****????:1621???????
  76. ****??:V1.0
  77. ****??:14-2-2014
  78. ****????:Addr--?? p--??  cnt????
  79. ****????:
  80. ****??:
  81. ********************************************************************************/
  82. void Ht1621WrAllData(unsigned char Addr,unsigned char *p,unsigned char cnt)
  83. {
  84.   unsigned char i;
  85.   Ht1621_CS_0();
  86.   Ht1621Wr_Data(0xa0,3); //??????101
  87.   Ht1621Wr_Data(Addr<<2,6); //??????
  88.   for (i=0;i<cnt;i++)
  89.    {
  90.     Ht1621Wr_Data(*p,8); //????
  91.     p++;
  92.    }
  93.   Ht1621_CS_1();
  94. }
  95. /*******************************************************************************
  96. ****????:
  97. ****????:1621?????
  98. ****??:V1.0
  99. ****??:14-2-2014
  100. ****????:
  101. ****????:
  102. ****??:
  103. ********************************************************************************/
  104. void Ht1621_Init(void)
  105. {
  106.     Ht1621_GND_0();       //HT1621 power on
  107.     Ht1621_VCC_1();
  108.    Ht1621WrCmd(BIAS);
  109.    Ht1621WrCmd(RC256);             //???????
  110.    //Ht1621WrCmd(XTAL);             //???????
  111.    Ht1621WrCmd(SYSDIS);
  112.    Ht1621WrCmd(WDTDIS1);
  113.    Ht1621WrCmd(SYSEN);
  114.    Ht1621WrCmd(LCDON);
  115. }
  116. /*******************************************************************************
  117. ****????:
  118. ****????:1621????
  119. ****??:V1.0
  120. ****??:14-2-2014
  121. ****????:
  122. ****????:
  123. ****??:
  124. ********************************************************************************/
  125. void Display(void)
  126. {

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

  129.    Ht1621WrOneData(2 , DispTab[n3]);
  130.    Ht1621WrOneData(3 , DispTab[n3]<<4);
  131.    
  132.    Ht1621WrOneData(4 , DispTab[n2]);
  133.    Ht1621WrOneData(5 , DispTab[n2]<<4);
  134.   
  135.    Ht1621WrOneData(6 , DispTab[n1]);
  136.    Ht1621WrOneData(7 , DispTab[n1]<<4);
  137.    
  138. }
  139. /*******************************************************************************
  140. ****????:
  141. ****????:??????
  142. ****??:V1.0
  143. ****??:14-2-2014
  144. ****????:Addr--?? Data--??
  145. ****????:
  146. ****??:
  147. ********************************************************************************/
  148. void Display_lcd_dot(void)
  149. {
  150.   //Ht1621WrOneData(0 , DispTab[n4]|0x10);//P1
  151.    Ht1621WrOneData(2 , DispTab[n3]|0x10);    //2P
  152.    //Ht1621WrOneData(4 , DispTab[n2]|0x10);    //3P
  153.    //Ht1621WrOneData(6 , DispTab[n1]|0x10);    //4P
  154. }
  155. /*******************************************************************************
  156. ****????:
  157. ****????:??????
  158. ****??:V1.0
  159. ****??:14-2-2014
  160. ****????:adc_value-???????
  161. ****????:
  162. ****??:
  163. ********************************************************************************/
  164. void data_convertor(unsigned long adc_value)
  165. {  
  166.     tmp=adc_value;         //adc
  167.     n4=tmp/1000;
  168.     tmp=tmp%1000;
  169.     n3=tmp/100;
  170.     tmp=tmp%100;       
  171.     n2=tmp/10;
  172.     tmp=tmp%10;               
  173.     n1=tmp;
  174. }
下面,我们在main函数里面调用:
  1. #include "mcc_generated_files/mcc.h"
  2. #include "mcc_generated_files/HT1621.h"

  3. unsigned char Ht1621Tab[]={0x00,0x00,0x00,0x00};
  4. /*
  5.                          Main application
  6. */
  7. void main(void)
  8. {
  9.     //unsigned char i=0;
  10.     uint16_t u16_adc1_value;   
  11.     uint16_t VoltageValue;
  12.     // initialize the device
  13.     SYSTEM_Initialize();

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

  22.     // Enable the Global Interrupts
  23.     //INTERRUPT_GlobalInterruptEnable();

  24.     // Enable the Peripheral Interrupts
  25.     //INTERRUPT_PeripheralInterruptEnable();

  26.     // Disable the Global Interrupts
  27.     //INTERRUPT_GlobalInterruptDisable();

  28.     // Disable the Peripheral Interrupts
  29.     //INTERRUPT_PeripheralInterruptDisable();
  30.    
  31.    
  32.     while (1)
  33.     {
  34.         //u16_adc1_value=ADC_GetConversion(channel_ANC3);
  35.         //u16_adc1_value=ADC_GetConversion(channel_AVSS);
  36.         u16_adc1_value=ADC_GetConversion(channel_FVR_BUF1);
  37.         VoltageValue=u16_adc1_value*3300UL/1024UL;
  38.         data_convertor(VoltageValue);
  39.         Display();
  40.         Display_lcd_dot();
  41.         printf("the ADCVALUE is %d ,the VoltageValue is %d\r\n",u16_adc1_value,VoltageValue);
  42.         __delay_ms(1000);
  43.     }
  44. }
为了验证不同电压的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 | 显示全部楼层
测量频率的吗   
jkl21 发表于 2021-3-6 21:03 | 显示全部楼层
HT1621好用吗  
wwppd 发表于 2021-3-6 21:03 | 显示全部楼层
谢谢楼主分享的资料。   
maqianqu 发表于 2021-3-6 21:04 | 显示全部楼层
PIC16F15244 板子申请的吗   
dspmana 发表于 2021-3-6 21:04 | 显示全部楼层
最低的功耗可以做到多少呢   
eefas 发表于 2021-3-6 21:04 | 显示全部楼层
CuriosityNano不错。   
pl202 发表于 2021-3-6 21:05 | 显示全部楼层
PIC16F15244有几路ADC?
typeof 发表于 2021-3-6 21:05 | 显示全部楼层
直接图形配置吗
yujielun 发表于 2021-3-6 21:05 | 显示全部楼层
PIC16的芯片很好用.   
htmlme 发表于 2021-3-6 21:06 | 显示全部楼层
期待更多的测评报告了.   
dspmana 发表于 2021-3-6 21:06 | 显示全部楼层
这个是多大的参考电压?   
maqianqu 发表于 2021-3-6 21:06 | 显示全部楼层
这个板子看着非常小巧。   
eefas 发表于 2021-3-6 21:06 | 显示全部楼层
学习一下CuriosityNano
wwppd 发表于 2021-3-6 21:06 | 显示全部楼层
显示的效果非常不错。   
pl202 发表于 2021-3-6 21:06 | 显示全部楼层
PIC16F15244的ADC精度是多少   
jkl21 发表于 2021-3-6 21:06 | 显示全部楼层
有专用的驱动电路吗   
typeof 发表于 2021-3-6 21:06 | 显示全部楼层
图形开发真便利.        
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

627

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部