欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
LCD驅動芯片HT1622 MCU源碼
[打印本頁]
作者:
bacon123
時間:
2020-9-12 10:40
標題:
LCD驅動芯片HT1622 MCU源碼
HT1622或HT1621,簡單修改一下源文件就可以用了,原創源碼。
51hei.png
(5.65 KB, 下載次數: 54)
下載附件
2020-9-12 14:42 上傳
單片機源程序如下:
#include "LCD.h"
#include "LCD_LIST.h"
#define delay_ns(m) {u8 i;for(i=(m);i>0;i--);}
static u8 lcdImg[MAX_ADDR];
static u8 discnt;
//-----------硬件驅動部分---------------------------------------------------------------------------------------------
void LCD_en(void)//使能LCD讀寫許可
{
LCD_CS_H;
LCD_WRITE_H;
delay_ns(20);
LCD_CS_L;
delay_ns(20);
}
void LCD_dis(void)//禁止LCD讀寫
{
LCD_WRITE_H;
LCD_CS_H;
delay_ns(20);
}
void LCD_Write(u16 data,u8 len)//將data的低len位寫入到LCD_DRIVER
{
for(;len>0;len--)
{
LCD_WRITE_L;
delay_ns(5);
if(data & (1<<(len-1))){LCD_DATA_H;}else{LCD_DATA_L;}
delay_ns(5);
LCD_WRITE_H;
delay_ns(10);
}
}
//------------硬件驅動結束-----------------------------------------------------------------------------------------------
//@@@@@@@@@@@@指令處理部分@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void LCD_command_1(u16 com)
{
LCD_en();
LCD_Write(com,12);
LCD_dis();
}
void LCD_commands_n(u16 * com,u8 len)
{
if(len)
{
LCD_en();
LCD_Write(4,3);
for(;len > 0;len--,com++)
{
LCD_Write(*com,9);
}
LCD_dis();
}
}
//@@@@@@@@@@@@指令處理結束@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//############數據發送部分################################################################################################
void LCD_Write_Data(u16 addr,u8 dt)
{
LCD_en();
LCD_Write(5,3);
LCD_Write(addr,6);
LCD_Write((u16)(dt),4);
LCD_dis();
}
void LCD_Write_Datas(u16 addr,u8 *dt,u8 len)
{
if(len)
{
LCD_en();
LCD_Write(5,3);
LCD_Write(addr,6);
for(;len > 0;len--,dt++)
{
LCD_Write((u16)(*dt),4);
}
LCD_dis();
}
}
void LCD_Flush(u8 init)
{
u8 copyImg[MAX_ADDR],cnt;
if(init && discnt == 0){LCD_init(1,0);}
if( discnt++ >= 10) discnt = 0;
if( discnt < 5 )
{
LCD_Write_Datas(0,lcdImg,MAX_ADDR);
}
else
{
for(cnt=0;cnt<MAX_ADDR;cnt++)
{
copyImg[cnt] = lcdImg[cnt] & (~(lcdImg[cnt]>>4));
}
LCD_Write_Datas(0,copyImg,MAX_ADDR);
}
}
//############數據發送結束################################################################################################
//------------LCD啟動、關閉-----------------------------------------------------------------------------------------------
void LCD_init(u8 fastinit,u8 whethclear)
{
#ifdef HT1621_LCD_DRIVER
u16 coms[] = {LCD_RC_256K,LCD_SYS_EN,LCD_BIAS_3_4,LCD_TNORMAL,LCD_LCD_ON};//
#endif
#ifdef HT1622_LCD_DRIVER
u16 coms[] = {LCD_RC_32K,LCD_SYS_EN,LCD_TNORMAL,LCD_LCD_ON};//LCD_RC_32K和LCD_TNORMAL是默認值
#endif
if(fastinit)
{
LCD_commands_n(coms,sizeof(coms)/sizeof(coms[0]));
}
else
{
#ifdef HT1621_LCD_DRIVER
LCD_command_1(LCD_RC_256K);
LCD_command_1(LCD_SYS_EN);
LCD_command_1(LCD_BIAS_3_4);
LCD_command_1(LCD_TNORMAL);
LCD_command_1(LCD_LCD_ON);
#endif
#ifdef HT1622_LCD_DRIVER
LCD_command_1(LCD_RC_32K);
LCD_command_1(LCD_SYS_EN);
LCD_command_1(LCD_TNORMAL);
LCD_command_1(LCD_LCD_ON);
#endif
}
if(whethclear) LCD_clear_all();
}
void LCD_off(void)
{
u16 coms[] = {LCD_SYS_DIS,LCD_SYS_DIS};
LCD_commands_n(coms,sizeof(coms)/sizeof(coms[0]));
LCD_BKG_OFF();
}
void LCD_clear_all(void)
{
u8 i;
discnt = 0;
for(i=0;i<MAX_ADDR;i++) lcdImg[i] = 0x00;
LCD_Write_Datas(0,lcdImg,MAX_ADDR);
}
void LCD_dis_all(void)
{
u8 i;
discnt = 0;
for(i=0;i<MAX_ADDR;i++) lcdImg[i] = 0x0F;
LCD_Write_Datas(0,lcdImg,MAX_ADDR);
}
void LCD_flash_all(void)
{
u8 i;
discnt = 0;
for(i=0;i<MAX_ADDR;i++) lcdImg[i] = 0xFF;
LCD_Write_Datas(0,lcdImg,MAX_ADDR);
}
//------------LCD啟動關閉處理結束-----------------------------------------------------------------------------------------
//$局部處理部分$
void mark_dis(u8 addr_v,u8 addr_h,enum MARK_DIS_OPTION type)
{
#ifdef HT1621_LCD_DRIVER
addr_h &= 0x0F;addr_v &= 0x1F;
#endif
#ifdef HT1622_LCD_DRIVER
addr_h &= 0x0F;addr_v &= 0x3F;
#endif
if (type == MARK_ON ) {lcdImg[addr_v] |= addr_h; lcdImg[addr_v] &= (((~addr_h) << 4) | 0x0F);}
else if (type == MARK_OFF ) {lcdImg[addr_v] &= ~addr_h; lcdImg[addr_v] &= (((~addr_h) << 4) | 0x0F);}
else {lcdImg[addr_v] |= addr_h; lcdImg[addr_v] |= ((addr_h << 4) & 0xF0);}
}
void seg_clear_bits(u8 addr_seg,u8 clear_bis)
{
#ifdef HT1621_LCD_DRIVER
clear_bis &= 0x0F;addr_seg &= 0x1F;
#endif
#ifdef HT1622_LCD_DRIVER
clear_bis &= 0x0F;addr_seg &= 0x3F;
#endif
lcdImg[addr_seg] &= ~clear_bis;
lcdImg[addr_seg] &= (((~clear_bis) << 4) | 0x0F);
}
void seg_clear(u8 addr_seg)
{
#ifdef HT1621_LCD_DRIVER
addr_seg &= 0x1F;
#endif
#ifdef HT1622_LCD_DRIVER
addr_seg &= 0x3F;
#endif
lcdImg[addr_seg] = 0x00;
}
void dis_mark_out(u8 outX,enum MARK_DIS_OPTION type)
{
switch (outX)
{
#ifdef HT1621_LCD_DRIVER
case 1 : mark_dis(2,1,type);break;
case 2 : mark_dis(4,1,type);break;
case 3 : mark_dis(4,8,type);break;
case 4 : mark_dis(4,4,type);break;
case 5 : mark_dis(4,2,type);break;
case 6 : mark_dis(7,2,type);break;
case 7 : mark_dis(7,4,type);break;
case 8 : mark_dis(7,8,type);break;
case 9 : mark_dis(7,1,type);break;
case 10: mark_dis(10,1,type);break;
case 11: mark_dis(10,8,type);break;
case 12: mark_dis(10,4,type);break;
case 13: mark_dis(10,2,type);break;
case 14: mark_dis(13,2,type);break;
case 15: mark_dis(13,4,type);break;
case 16: mark_dis(13,8,type);break;
case 17: mark_dis(13,1,type);break;
case 18: mark_dis(17,1,type);break;
#endif
#ifdef HT1622_LCD_DRIVER
case 1 : mark_dis(8,4,type);break;
case 2 : mark_dis(8,2,type);break;
case 3 : mark_dis(8,1,type);break;
case 4 : mark_dis(9,8,type);break;
case 5 : mark_dis(9,4,type);break;
case 6 : mark_dis(9,2,type);break;
case 7 : mark_dis(11,1,type);break;
case 8 : mark_dis(11,2,type);break;
case 9 : mark_dis(11,4,type);break;
case 10: mark_dis(11,8,type);break;
case 11: mark_dis(10,1,type);break;
case 12: mark_dis(10,2,type);break;
case 13: mark_dis(10,4,type);break;
case 14: mark_dis(10,8,type);break;
case 15: mark_dis(14,8,type);break;
case 16: mark_dis(14,2,type);break;
case 17: mark_dis(15,8,type);break;
case 18: mark_dis(15,1,type);break;
case 19: mark_dis(6,4,type);break;
case 20: mark_dis(6,2,type);break;
case 21: mark_dis(6,1,type);break;
case 22: mark_dis(7,8,type);break;
case 23: mark_dis(7,4,type);break;
case 24: mark_dis(7,2,type);break;
case 25: mark_dis(13,1,type);break;
case 26: mark_dis(13,2,type);break;
case 27: mark_dis(13,4,type);break;
case 28: mark_dis(13,8,type);break;
case 29: mark_dis(12,1,type);break;
case 30: mark_dis(12,2,type);break;
case 31: mark_dis(12,4,type);break;
case 32: mark_dis(12,8,type);break;
case 33: mark_dis(14,4,type);break;
case 34: mark_dis(14,1,type);break;
case 35: mark_dis(15,4,type);break;
case 36: mark_dis(15,2,type);break;
#endif
default: break;
}
}
void dis_mark_setTitle(u8 setTitleX,enum MARK_DIS_OPTION type)
{
switch (setTitleX)
{
#ifdef HT1621_LCD_DRIVER
case 1 : mark_dis(1,8,type);break; //CT變比
case 2 : mark_dis(1,4,type);break; //保護設置
case 3 : mark_dis(1,2,type);break; //目標cos@
case 4 : mark_dis(1,1,type);break; //投切門限
case 5 : mark_dis(0,1,type);break; //控制延時
case 6 : mark_dis(0,2,type);break; //投切方式
case 7 : mark_dis(0,4,type);break; //電容配置
case 8 : mark_dis(0,8,type);break; //通信參數
#endif
#ifdef HT1622_LCD_DRIVER
case 1 : mark_dis(1,1,type);break; //CT變比
case 2 : mark_dis(1,2,type);break; //保護設置
case 3 : mark_dis(1,4,type);break; //目標cos@
case 4 : mark_dis(1,8,type);break; //投切門限
case 5 : mark_dis(0,1,type);break; //控制延時
case 6 : mark_dis(0,2,type);break; //投切方式
case 7 : mark_dis(0,4,type);break; //電容配置
case 8 : mark_dis(0,8,type);break; //通信參數
#endif
default: break;
}
}
void dis_mark_whichPhase(u8 whichPhase,enum MARK_DIS_OPTION type)
{
switch (whichPhase)
{
#ifdef HT1621_LCD_DRIVER
case 1 : mark_dis(5,1,type);break; //A相
case 2 : mark_dis(11,1,type);break; //B相
case 3 : mark_dis(16,1,type);break; //C相
case 4 : mark_dis(24,8,type);break; //三相
#endif
#ifdef HT1622_LCD_DRIVER
case 1 : mark_dis(2,1,type);break; //A相
case 2 : mark_dis(3,8,type);break; //B相
case 3 : mark_dis(3,4,type);break; //C相
case 4 : mark_dis(3,2,type);break; //三相
#endif
default: break;
}
}
void dis_mark_updown(u8 updown,enum MARK_DIS_OPTION type)
{
switch (updown)
{
#ifdef HT1621_LCD_DRIVER
case 1 : mark_dis(2,4,type);break; //up
case 2 : mark_dis(2,2,type);break; //down
#endif
#ifdef HT1622_LCD_DRIVER
case 1 : mark_dis(8,8,type);break; //up
case 2 : mark_dis(6,8,type);break; //down
#endif
default: break;
}
}
void dis_mark_alarm(enum MARK_DIS_OPTION type)
{
#ifdef HT1621_LCD_DRIVER
mark_dis(28,8,type); //報警符號
#endif
#ifdef HT1622_LCD_DRIVER
mark_dis(3,1,type); //報警符號
#endif
}
void dis_mark_manual(enum MARK_DIS_OPTION type)
{
#ifdef HT1621_LCD_DRIVER
mark_dis(2,8,type); //手動控制
#endif
#ifdef HT1622_LCD_DRIVER
mark_dis(2,4,type); //手動控制
#endif
}
void dis_mark_objects(u8 object,enum MARK_DIS_OPTION type)
{
switch (object)
{
#ifdef HT1621_LCD_DRIVER
case 1 : mark_dis(3,2,type);break; //cos@/電流、A
case 2 : mark_dis(3,4,type);break; //有功、kW/無功、kVar/頻率、Hz
case 3 : mark_dis(3,1,type);break; //電壓、V
case 4 : mark_dis(3,8,type);break; //THDu、%/THDi、%/溫度、℃
#endif
#ifdef HT1622_LCD_DRIVER
case 1 : mark_dis(2,2,type);break; //cos@
case 2 : mark_dis(5,4,type);break; //電壓、V
case 3 : mark_dis(4,2,type);break; //電流、A
case 4 : mark_dis(5,1,type);break; //有功、kW
case 5 : mark_dis(5,8,type);break; //無功、kVar
case 6 : mark_dis(4,4,type);break; //頻率、Hz
case 7 : mark_dis(5,2,type);break; //THDu、%
case 8 : mark_dis(4,1,type);break; //THDi、%
case 9 : mark_dis(4,8,type);break; //溫度、℃
#endif
default: break;
}
}
void clear_led(u8 ledNO)
{
#ifdef HT1621_LCD_DRIVER
dis_led(ledNO,255,0);//不能清除小數點
if(ledNO == 1)
{
mark_dis(8,1,MARK_OFF);
}
else if(ledNO == 3)
{
mark_dis(14,1,MARK_OFF);
}
else if(ledNO == 5)
{
mark_dis(19,1,MARK_OFF);
}
else if(ledNO == 7)
{
mark_dis(22,1,MARK_OFF);
}
else if(ledNO == 9)
{
mark_dis(26,8,MARK_OFF);
}
else if(ledNO == 11)
{
mark_dis(30,8,MARK_OFF);
}
else
{
}
#endif
#ifdef HT1622_LCD_DRIVER
u8 i;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
LCD.rar
(5.85 KB, 下載次數: 135)
2020-9-12 10:40 上傳
點擊文件名下載附件
源代碼
下載積分: 黑幣 -5
作者:
doitok
時間:
2021-8-16 10:19
請問sys.h的頭文件是什么
作者:
天天紅
時間:
2022-5-19 22:23
內容不錯,因為TM1622和HT1622是相互兼容,所以兩款都可以借鑒
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1