/******************************************************************
* 作者:小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);
}