/******************************************************************
* 作者:小ARM菜菜
* 時間:2012年
* 地點:日照
* 文件名:"LCD_Display.c"
* 備注:All rights reserved!
Q Q:925295580
******************************************************************/
#include <stdio.h>
#include "M051Series.h"
#include "DrvSYS.h"
#include "DrvUART.h"
#include "DrvFMC.h"
#include "DrvGPIO.h"
#include "main.h"
#include "USART.h"
#include "GPIO.h"
#include "DrvTIMER.h"
#include "HT1381.h"
#include "HDT11.h"
#include "HT1622.h"
#include "LCD_Display.h"
const static uint8_t Temperature_tab[10]={0xf7,0xa2,0xdb,0xeb,0xae,0xed,0xfd,0xa3,0xff,0xef};//斷碼0-9
const static uint8_t time_hour_msb_tab[3]={0,6,3}; //時鐘斷碼1,2
void display_set_time_off(void)
{
lcd_display_set_open_time_hour_off();//關閉設置開啟小時顯示
lcd_display_set_open_time_mint_off();//關閉設置開啟分鐘顯示
lcd_display_set_close_time_hour_off();//關閉設置關閉小時顯示
lcd_display_set_close_time_mint_off();
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉時間小時關閉
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_set_close_time_hour_off()//關閉設置關閉小時顯示
{
uint8_t da;
da=read_ht1622_data(21);
write_HT1622_data(21,da&0x7);
//write_HT1622_data(21,0); //
da=read_ht1622_data(23);
write_HT1622_data(23,da&0x7);
// write_HT1622_data(23,0); //
da=read_ht1622_data(25);
write_HT1622_data(25,0);
//write_HT1622_data(25,0); //
write_HT1622_data(24,0);
}
/******************************************************************
* 時間:2012年
* 功能:設置時間分鐘關閉
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_set_close_time_mint_off()//關閉設置關閉分鐘溫度顯示
{
write_HT1622_data(26,0);
write_HT1622_data(27,0);
write_HT1622_data(28,0);
write_HT1622_data(29,0);
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉時間全顯示
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_set_close_time(uint8_t hour_msb,uint8_t hour_lsb,uint8_t min_msb,uint8_t min_lsb)
{
uint8_t lsb,msb,da,da1=0,da2=0,da3=0;
if(hour_msb==0)
{
da1=read_ht1622_data(23);
clr_bit(da1,3);
//write_HT1622_data(23,da); //
da2=read_ht1622_data(21);
clr_bit(da2,3);
// write_HT1622_data(21,da); //
da3=read_ht1622_data(25);
clr_bit(da3,3);
//write_HT1622_data(25,da); //
}
else
if(hour_msb==1)
{
da1=read_ht1622_data(23);
clr_bit(da1,3);
//write_HT1622_data(23,da); //
da2=read_ht1622_data(21);
set_bit(da2,3);
//write_HT1622_data(21,da); //
da3=read_ht1622_data(25);
set_bit(da3,3);
//write_HT1622_data(25,da); //
}
else
if(hour_msb==2)
{
da1=read_ht1622_data(23);
set_bit(da1,3);
//write_HT1622_data(23,da); //
da2=read_ht1622_data(21);
set_bit(da2,3);
//write_HT1622_data(21,da); //
da3=read_ht1622_data(25);
clr_bit(da3,3);
//write_HT1622_data(25,da); //
}
else
{
da1=read_ht1622_data(23);
clr_bit(da1,3);
//write_HT1622_data(23,da); //
da2=read_ht1622_data(21);
clr_bit(da2,3);
//write_HT1622_data(21,da); //
da3=read_ht1622_data(25);
clr_bit(da3,3);
//write_HT1622_data(25,da); //
}
write_HT1622_data(21,da2); //
write_HT1622_data(23,da1); //
write_HT1622_data(25,da3); //
lsb=Temperature_tab[hour_lsb];
lsb&=0x0f;
da=read_ht1622_data(25);
msb=(Temperature_tab[hour_lsb]>>4)&0x0f; //小時低位加冒號
if(get_bit(da,3))
{
set_bit(msb,3);
}
else
{
clr_bit(msb,3);
}
write_HT1622_data(24,lsb);
write_HT1622_data(25,msb|da);
lsb=Temperature_tab[min_msb];
lsb&=0x0f;
msb=(Temperature_tab[min_msb]>>4)&0x0f; //分高位
write_HT1622_data(26,lsb);
write_HT1622_data(27,msb);
lsb=Temperature_tab[min_lsb];
lsb&=0x0f;
msb=(Temperature_tab[min_lsb]>>4)&0x0f; //分高位
write_HT1622_data(28,lsb);
write_HT1622_data(29,msb);
}
/******************************************************************
* 時間:2012年
* 功能:設置開啟時間小時關閉
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_set_open_time_hour_off()//關閉設置開啟小時顯示
{
write_HT1622_data(16,0);
write_HT1622_data(18,0);
write_HT1622_data(19,8);
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉時間分鐘關閉
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_set_open_time_mint_off()//關閉設置開啟分鐘溫度顯示
{
uint8_t da;
write_HT1622_data(20,0);
da=read_ht1622_data(21);
if(get_bit(da,3))
{
write_HT1622_data(21,8);
}
else
{
write_HT1622_data(21,0);
}
write_HT1622_data(22,0);
da=read_ht1622_data(23);
if(get_bit(da,3))
{
write_HT1622_data(23,8);
}
else
{
write_HT1622_data(23,0);
}
}
/******************************************************************
* 時間:2012年
* 功能:設置開啟時間開啟
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_set_open_time(uint8_t hour_msb,uint8_t hour_lsb,uint8_t min_msb,uint8_t min_lsb)
{
uint8_t lsb,msb,da;
write_HT1622_data(16,time_hour_msb_tab[hour_msb]);
write_HT1622_data(17,0xf);
lsb=Temperature_tab[hour_lsb];
lsb&=0x0f;
msb=(Temperature_tab[hour_lsb]>>4)&0x0f; //小時低位加冒號
write_HT1622_data(18,lsb);
write_HT1622_data(19,msb);
lsb=Temperature_tab[min_msb];
lsb&=0x0f;
da=read_ht1622_data(21);
msb=(Temperature_tab[min_msb]>>4)&0x0f; //分高位
if(get_bit(da,3))
{
set_bit(msb,3);
}
else
{
clr_bit(msb,3);
}
write_HT1622_data(20,lsb);
write_HT1622_data(21,msb|da);
lsb=Temperature_tab[min_lsb];
lsb&=0x0f;
da=read_ht1622_data(23);
msb=(Temperature_tab[min_lsb]>>4)&0x0f; //分高位
if(get_bit(da,3))
{
set_bit(msb,3);
}
else
{
clr_bit(msb,3);
}
write_HT1622_data(22,lsb);
write_HT1622_data(23,msb);
}
/******************************************************************
* 時間:2012年
* 功能:設置溫度全關閉
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_set_Temperature_off()//關閉設置溫度顯示
{
write_HT1622_data(12,0);
write_HT1622_data(13,0x08);
write_HT1622_data(14,0);
write_HT1622_data(15,0x08);
}
/******************************************************************
* 時間:2012年
* 功能:設置溫度開啟
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_set_Temperature(uint8_t set_Temperature_msb,uint8_t set_Temperature_lsb)
{
uint8_t lsb,msb;
lsb=Temperature_tab[set_Temperature_msb];
lsb&=0x0f;
msb=(Temperature_tab[set_Temperature_msb]>>4)&0x0f; //
msb&=0x0f;
write_HT1622_data(12,lsb);
write_HT1622_data(13,msb);
lsb=Temperature_tab[set_Temperature_lsb];
lsb&=0x0f;
msb=(Temperature_tab[set_Temperature_lsb]>>4)&0x0f;
write_HT1622_data(14,lsb);
write_HT1622_data(15,msb);
}
/******************************************************************
* 時間:2012年
* 功能:設置星期顯示
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_week(uint8_t week)
{
uint8_t lsb,msb;
lsb=Temperature_tab[week];
lsb&=0x0f;
msb=(Temperature_tab[week]>>4)&0x0f; //
msb&=0x0f;
write_HT1622_data(38,lsb);
write_HT1622_data(39,msb);
}
/******************************************************************
* 時間:2012年
* 功能:設置星期關閉顯示
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_week_off()
{
write_HT1622_data(38,0);
write_HT1622_data(39,0);
}
/******************************************************************
* 時間:2012年
* 功能:設置年顯示關閉
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_year_off()//關閉年顯示
{
write_HT1622_data(34,0);
write_HT1622_data(35,0);
write_HT1622_data(36,0);
write_HT1622_data(37,0);
}
/******************************************************************
* 時間:2012年
* 功能:設置月顯示關閉
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_month_off()//關閉月顯示
{
write_HT1622_data(44,0);
write_HT1622_data(45,0);
}
/******************************************************************
* 時間:2012年
* 功能:設置天顯示關閉
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_date_off()//關閉日顯示
{
write_HT1622_data(42,0);
write_HT1622_data(43,0);
write_HT1622_data(40,0);
write_HT1622_data(41,0);
}
/******************************************************************
* 時間:2012年
* 功能:設置日歷顯示
* 輸入: 無
* 輸出: 無
******************************************************************/
void
lcd_display_calendar(uint8_t year_msb,uint8_t year_lsb,uint8_t
month_msb,uint8_t month_lsb,uint8_t date_msb,uint8_t date_lsb)
{
uint8_t lsb,msb;
lsb=Temperature_tab[2];
lsb&=0x0f;
msb=(Temperature_tab[2]>>4)&0x0f; //2
write_HT1622_data(30,lsb);
write_HT1622_data(31,msb);
lsb=Temperature_tab[0];
lsb&=0x0f;
msb=(Temperature_tab[0]>>4)&0x0f; //0
write_HT1622_data(32,lsb);
write_HT1622_data(33,msb);
lsb=Temperature_tab[year_msb];
lsb&=0x0f;
msb=(Temperature_tab[year_msb]>>4)&0x0f; //*
write_HT1622_data(34,lsb);
write_HT1622_data(35,msb);
lsb=Temperature_tab[year_lsb];
lsb&=0x0f;
msb=(Temperature_tab[year_lsb]>>4)&0x0f; //*
write_HT1622_data(36,lsb);
write_HT1622_data(37,msb);
lsb=Temperature_tab[month_lsb];
lsb&=0x0f;
msb=(Temperature_tab[month_lsb]>>4)&0x0f; //*
if(month_msb==0)
{
msb&=0x7;//把十位的一熄滅
}
else
{
msb&=0xf;//把十位的一點亮
}
write_HT1622_data(44,lsb);
write_HT1622_data(45,msb);
lsb=Temperature_tab[date_msb];
lsb&=0x0f;
msb=(Temperature_tab[date_msb]>>4)&0x0f; //*
write_HT1622_data(42,lsb);
write_HT1622_data(43,msb);
lsb=Temperature_tab[date_lsb];
lsb&=0x0f;
msb=(Temperature_tab[date_lsb]>>4)&0x0f; //*
write_HT1622_data(40,lsb);
write_HT1622_data(41,msb);
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開X6顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_X6_on_or_off(uint8_t status)//關閉/打開“信號X6“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(53);
set_bit(da,3);
write_HT1622_data(53,da); //
}
else //0關閉
{
da=read_ht1622_data(53);
clr_bit(da,3);
write_HT1622_data(53,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開X5顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_X5_on_or_off(uint8_t status)//關閉/打開“信號X5“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(53);
set_bit(da,2);
write_HT1622_data(53,da); //
}
else //0關閉
{
da=read_ht1622_data(53);
clr_bit(da,2);
write_HT1622_data(53,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開X4顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_X4_on_or_off(uint8_t status)//關閉/打開“信號X4“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(53);
set_bit(da,1);
write_HT1622_data(53,da); //
}
else //0關閉
{
da=read_ht1622_data(53);
clr_bit(da,1);
write_HT1622_data(53,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開X3顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_X3_on_or_off(uint8_t status)//關閉/打開“信號X3“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(53);
set_bit(da,0);
write_HT1622_data(53,da); //
}
else //0關閉
{
da=read_ht1622_data(53);
clr_bit(da,0);
write_HT1622_data(53,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開X2顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_X2_on_or_off(uint8_t status)//關閉/打開“信號X2“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(52);
set_bit(da,3);
write_HT1622_data(52,da); //
}
else //0關閉
{
da=read_ht1622_data(52);
clr_bit(da,3);
write_HT1622_data(52,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開X1顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_X1_on_or_off(uint8_t status)//關閉/打開“信號X1“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(52);
set_bit(da,2);
write_HT1622_data(52,da); //
}
else //0關閉
{
da=read_ht1622_data(52);
clr_bit(da,2);
write_HT1622_data(52,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開s3顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_s3_on_or_off(uint8_t status)//關閉/打開“設置“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(52);
set_bit(da,1);
write_HT1622_data(52,da); //
}
else //0關閉
{
da=read_ht1622_data(52);
clr_bit(da,1);
write_HT1622_data(52,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開s2顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_s2_on_or_off(uint8_t status)//關閉/打開“關“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(52);
set_bit(da,0);
write_HT1622_data(52,da); //
}
else //0關閉
{
da=read_ht1622_data(52);
clr_bit(da,0);
write_HT1622_data(52,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開s8顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_s8_on_or_off(uint8_t status)//關閉/打開“無線“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(54);
set_bit(da,3);
write_HT1622_data(54,da); //
}
else //0關閉
{
da=read_ht1622_data(54);
clr_bit(da,3);
write_HT1622_data(54,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開s7顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_s7_on_or_off(uint8_t status)//關閉/打開“分時“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(54);
set_bit(da,2);
write_HT1622_data(54,da); //
}
else //0關閉
{
da=read_ht1622_data(54);
clr_bit(da,2);
write_HT1622_data(54,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開s6顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_s6_on_or_off(uint8_t status)//關閉/打開“手動“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(54);
set_bit(da,1);
write_HT1622_data(54,da); //
}
else //0關閉
{
da=read_ht1622_data(54);
clr_bit(da,1);
write_HT1622_data(54,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置關閉或者打開s1顯示
* 輸入: 狀態,1,開啟,0關閉
* 輸出: 無
******************************************************************/
void lcd_display_turn_on_s1_on_or_off(uint8_t status)//關閉/打開“開“顯示
{
uint8_t da;
if(status)//1顯示
{
da=read_ht1622_data(54);
set_bit(da,0);
write_HT1622_data(54,da); //?
}
else //0關閉
{
da=read_ht1622_data(54);
clr_bit(da,0);
write_HT1622_data(54,da);//
}
}
/******************************************************************
* 時間:2012年
* 功能:設置顯示小時關閉
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_time_hour_off() //關閉小時顯示
{
write_HT1622_data(55,0); //小時高位
write_HT1622_data(50,0);
write_HT1622_data(51,8);
}
/******************************************************************
* 時間:2012年
* 功能:設置分鐘顯示關閉
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_time_mint_off() //關閉分鐘顯示
{
write_HT1622_data(48,0);
write_HT1622_data(49,0);
write_HT1622_data(46,0);
write_HT1622_data(47,0);
}
/******************************************************************
* 時間:2012年
* 功能:設置時間顯示開啟
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_time(uint8_t hour_msb,uint8_t hour_lsb,uint8_t min_msb,uint8_t min_lsb)//顯示時間
{
uint8_t lsb,msb;
write_HT1622_data(55,time_hour_msb_tab[hour_msb]); //小時高位
lsb=Temperature_tab[hour_lsb];
lsb&=0x0f;
msb=(Temperature_tab[hour_lsb]>>4)&0x0f; //小時低位加冒號
write_HT1622_data(50,lsb);
write_HT1622_data(51,msb);
lsb=Temperature_tab[min_msb];
lsb&=0x0f;
msb=(Temperature_tab[min_msb]>>4)&0x0f; //分高位
write_HT1622_data(48,lsb);
write_HT1622_data(49,msb);
lsb=Temperature_tab[min_lsb];
lsb&=0x0f;
msb=(Temperature_tab[min_lsb]>>4)&0x0f; //分高位
write_HT1622_data(46,lsb);
write_HT1622_data(47,msb);
}
/******************************************************************
* 時間:2012年
* 功能:設置溫度顯示開啟
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_Temperature(uint8_t shi,uint8_t ge) //顯示溫度
{
uint8_t lsb,msb;
lsb=Temperature_tab[shi];
lsb&=0x0f;
msb=(Temperature_tab[shi]>>4)&0x0f; //第一位
write_HT1622_data(0,lsb);
write_HT1622_data(1,msb);
lsb=Temperature_tab[ge];
lsb&=0x0f;
msb=(Temperature_tab[ge]>>4)&0x0f; //第二位
msb-=8;
write_HT1622_data(2,lsb);
write_HT1622_data(3,msb);
write_HT1622_data(63,8);
}
/******************************************************************
* 時間:2012年
* 功能:設置濕度開啟顯示
* 輸入: 無
* 輸出: 無
******************************************************************/
void lcd_display_Humidity(uint8_t shi,uint8_t ge) //顯示濕度
{
uint8_t lsb,msb;
lsb=Temperature_tab[shi];
lsb&=0x0f;
msb=(Temperature_tab[shi]>>4)&0x0f;
write_HT1622_data(60,lsb);
write_HT1622_data(61,msb);
lsb=Temperature_tab[ge];
lsb&=0x0f;
msb=(Temperature_tab[ge]>>4)&0x0f;
msb-=8;
write_HT1622_data(58,lsb);
write_HT1622_data(59,msb);
write_HT1622_data(57,8);
}