📄 ht1621_driver.c
字号:
//****************************************************************************
// @Project Includes
//****************************************************************************
#include "GLOBAL.H"
#include "MAIN.H"
#include "HT1621_Driver.H"
#include <math.h>
//****************************************************************************
// @Imported Global Variables
//****************************************************************************
//****************************************************************************
// @Global Variables
//****************************************************************************
unsigned char DisTime = 0xAA;
unsigned char code Num[10]={0x7D,0x30,0x6B,0x7A,0x36,0x5E,0x5F,0x70,0x7F,0x7E}; //0---9
unsigned char code ComValue[16]={0x00,0x04,0x02,0x06,0x01,0x05,0x03,0x07,0x08,0x0C,0x0A,0x0E,0x09,0x0D,0x0B,0x0F}; //7段数码管显示位,顺序:0abcdfge
//****************************************************************************
// @Prototypes Of Local Functions
//****************************************************************************
extern unsigned int inside_Temperature_AD;
//****************************************************************************
// @User Code
//****************************************************************************
//**********Delay_LCD**********
void Delay_LCD(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
/************************************************************
*Function:向LCD发送0或1
*************************************************************/
void LcdWriteBit(bit i)
{
bit LcdData;
LCD_SCL_LOW();
LcdData = (i==1)? 1:0;
if(LcdData)
LCD_SDA_HIGH();
else
LCD_SDA_LOW();
Delay_LCD();
LCD_SCL_HIGH();
Delay_LCD();
}
/************************************************************
*Function:向LCD写命令函数,100
*************************************************************/
void LcdWriteCom(unsigned char Command_Data)
{
unsigned char i,tt;
LCD_CS_LOW();
LcdWriteBit(1);
LcdWriteBit(0);
LcdWriteBit(0);
for(i=0;i<8;i++)
{
tt = Command_Data & 0x80;
if(tt == 0x80)
LcdWriteBit(1);
else
LcdWriteBit(0);
Command_Data <<= 1;
}
LcdWriteBit(0);
LCD_SCL_HIGH();
LCD_CS_HIGH();
}
/************************************************************
*Function:LCD的初始化
*************************************************************/
void Lcd_vInit(void)
{
unsigned char i;
unsigned char address=0x08;
LCD_CS_HIGH();
LCD_SCL_HIGH();
LCD_SDA_HIGH();
LcdWriteCom(sys_en); //打开系统振荡器
LcdWriteCom(lcd_0n); //打开LCD偏压发生器
LcdWriteCom(lcd_osci); //片内RC振荡器
LcdWriteCom(lcd_bias); //1/3偏压,4个公共口
for(i=0;i<10;i++) //清屏
{
LcdWriteData(address,0x00);
address=address+1;
}
LcdWriteData(0x11,0x09); //I,G1
LcdWriteData(0x12,0x0F); //N1,N2,M1,M2
LcdWriteData(0x13,0x0F); //P1,P2,L1,L2
LcdWriteData(0x14,0x08); //K
//**********摄氏温度**********
LcdWriteData(0x0E,0x0E); //4E,4F,D
LcdWriteData(0x0F,0x0A); //4D,4A
}
/************************************************************
*Function:向LCD写数据函数,101
*************************************************************/
void LcdWriteData(unsigned char aa,unsigned char bb)
{
unsigned char i,tt;
LCD_CS_LOW();
LcdWriteBit(1);
LcdWriteBit(0);
LcdWriteBit(1);
aa <<= 2;
for(i=0;i<6;i++) //写地址
{
tt = aa & 0x80;
if(tt == 0x80)
LcdWriteBit(1);
else
LcdWriteBit(0);
aa <<= 1;
}
bb <<= 4;
for(i=0;i<4;i++) //写RAM值
{
tt = bb & 0x80;
if(tt == 0x80)
LcdWriteBit(1);
else
LcdWriteBit(0);
bb <<= 1;
}
LCD_SCL_HIGH();
LCD_CS_HIGH();
}
//****************************************************************************
//写数字
//****************************************************************************
void WriteTemperatureData(unsigned char Data_Address,unsigned char Write_Data)
{
unsigned char temp_num,temp;
temp_num=Num[Write_Data];
temp=temp_num&0x0F; //默认没有负号
LcdWriteData(Data_Address,ComValue[temp]); //先显示dfge
temp=(temp_num>>4)&0x07;
if(Data_Address==0x08)
{
if((inside_Temperature_AD>=0xCC))
LcdWriteData(Data_Address+1,ComValue[temp]); //显示abc
else
if(inside_Temperature_AD<0xCC)
LcdWriteData(Data_Address+1,ComValue[temp]+0x08); //显示abc
}
else
LcdWriteData(Data_Address+1,ComValue[temp]+0x08);
}
//****************************************************************************
//将AD采到的值显示出来
//****************************************************************************
void LCD_Temperature_Display(void)
{
unsigned char Ten_Data,Indi_Data,Decimal_Data;
unsigned int Temp_Data;
if(inside_Temperature_AD>=0xCC) //正数
Temp_Data = (unsigned int)((unsigned long)((unsigned long)(40*(inside_Temperature_AD-0xCC))*(unsigned long)(10))/0x333);
else //负数
Temp_Data = (unsigned int)((unsigned long)((unsigned long)(10*(0xCC-inside_Temperature_AD))*(unsigned long)(10))/0xCC);
Ten_Data = Temp_Data/100; //十位数字
Indi_Data = (Temp_Data-Ten_Data*100)/10; //个位数字
Decimal_Data = Temp_Data-Ten_Data*100-Indi_Data*10; //小数点后一位数字
WriteTemperatureData(Num1AddressLow,Ten_Data); //写十位数字
WriteTemperatureData(Num1AddressLow+2,Indi_Data); //写个位数字
WriteTemperatureData(Num1AddressLow+4,Decimal_Data); //写小数点后一位数字
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -