首頁(yè) > 評(píng)測(cè) > 【CuriosityNano測(cè)評(píng)報(bào)告】+PIC16F15244 HT1621驅(qū)動(dòng)液晶顯示ADC
【CuriosityNano測(cè)評(píng)報(bào)告】+PIC16F15244 HT1621驅(qū)動(dòng)液晶顯示ADC
- [導(dǎo)讀]
- 今天用HT1621液晶模塊顯示一路AD的值。代碼外設(shè)配置用MCC生成,我們這里開(kāi)啟調(diào)試串口和一路ADC。串口配置:9600,N,8,1 啟用printf重定向 S1.png (41.46 KB, 下載次數(shù): 0) 下載附件 保存到相冊(cè) 2021-
今天用HT1621液晶模塊顯示一路AD的值。代碼外設(shè)配置用MCC生成,我們這里開(kāi)啟調(diào)試串口和一路ADC。串口配置:9600,N,8,1 啟用printf重定向
ADC 用RC3對(duì)應(yīng)的ANC3 ,主意數(shù)據(jù)格式為右對(duì)齊,一開(kāi)始我選擇的左對(duì)齊,然后發(fā)現(xiàn)與生成的代碼里面的算法不匹配,
參考電壓選擇VDD。軟件觸發(fā)模式~
我們模擬IIC來(lái)啟動(dòng)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;
- }
下面,我們?cè)趍ain函數(shù)里面調(diào)用:
- #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);
- }
- }
為了驗(yàn)證不同電壓的ADC采樣,我開(kāi)啟了FVR,并設(shè)定其為:2.048V
編譯下載代碼,分別測(cè)試3V3和2.048:
其中,觀察了FVR的電壓,會(huì)從2.049 來(lái)回跳到2.056 ,有(2.056-2.049)=0.007V的波動(dòng)
查看串口輸出的信息:
發(fā)現(xiàn)采樣到的ADC值就相差2個(gè)最小單位,0.007/2=0.0035與官方精度(3.3/1024=0.0032)幾乎接近。
-
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評(píng)論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開(kāi)放投稿
- NRF52810藍(lán)牙數(shù)字耳機(jī)找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開(kāi)發(fā)
預(yù)算:¥1100000015小時(shí)前
- 12V汽車啟動(dòng)電源項(xiàng)目BMS設(shè)計(jì)
預(yù)算:¥50000023小時(shí)前
- 數(shù)據(jù)可視化軟件 開(kāi)發(fā)
預(yù)算:¥5000023小時(shí)前
- PLC項(xiàng)目調(diào)試修改
預(yù)算:¥100001天前
- 起動(dòng)電機(jī)控制器開(kāi)發(fā)
預(yù)算:¥1100001天前