⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ht1621_driver.c

📁 使用HT1621驱动LCD
💻 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 + -