📄 display_ht1621.c
字号:
#include "display_ht1621.h"
void delay(unsigned char n);
char tab_disIcon[7][2] =
{
{0,4},//Heart,
{0,2},//Am,
{0,1},//Pm,
{15,4},//Timer,
{13,4},//Up
{16,4},//Down
{7,4},//Col
};
char tab_disdat[16*3] =
{
0x03,
0x05,
0x03, //0
0x00,
0x00,
0x03, //1
0x01,
0x07,
0x02, //2
0x00,
0x07,
0x03, //3
0x02,
0x02,
0x03, //4
0x02,
0x07,
0x01, //5
0x03,
0x07,
0x01, //6
0x00,
0x04,
0x03, //7
0x03,
0x07,
0x03, //8
0x02,
0x07,
0x03, //9
0x0,
0x0,
0x0, // clear
0x3,
0x7,
0x0, //'E'
0x3,
0x6,
0x0, // 'F'
0x0,
0x0,
0x3, //'I'
0x3,
0x1,
0x0, //'L'
0x1,
0x3,
0x1, //'o'
};
//unsigned int htdis_number = 0;
//unsigned int htvalue = 0;
//----------------------------------------------------
//this is a subcountine for the HT1621 model display programme
////////////////////////////////////////////////////////////////////////////////////////////////
void write_bit(void)
{
delay(10);
port_displayout |= ht1621_wr;
delay(20);
port_displayout &= ~ht1621_wr;
}
////////////////////////////////////////////////////////////////////////////////////////////////
void senddata_lcd(unsigned char len,unsigned char data)
{
unsigned char i,sdata;
sdata=0;
if(len!=4)
{
for (i=len;i>0;i--) //reverse the data
{
sdata<<=1;
sdata += data & 0x1;
data>>=1;
}
}
else sdata=data;
for(i=len;i>0;i--)// send out data
{
if((sdata & 0x1)==1)
port_displayout |= ht1621_dat;
else
port_displayout &= ~ht1621_dat;
write_bit();
sdata>>=1;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
void WritedataTolcd(unsigned char adr,unsigned char data)
{
port_displayout &= ~ht1621_cs; //clear cs= 0
delay(10);
senddata_lcd(3,5);
senddata_lcd(6,adr);
senddata_lcd(4,data);
delay(10);
port_displayout |= ht1621_cs;
}
////////////////////////////////////////////////////////////////////////////////////////////////
void ht1621_ramdump(unsigned char data)
{
unsigned char i=0;
port_displayout &= ~ht1621_cs; //clear cs=0
_NOP();
_NOP();
senddata_lcd(3,0x5); // send command: 101
senddata_lcd(6,0x0); // send start address: 000000
for (i=0 ; i<32 ; i++)
{
senddata_lcd(4,data); //send data
}
_NOP();
_NOP();
port_displayout |= ht1621_cs;
}
////////////////////////////////////////////////////////////////////////////////////////////////
void intialization_ht1621(void)
{
port_displaydir |= ht1621_wr+ht1621_cs+ht1621_dat; //setting port as output
Delayms(100);
port_displayout |=ht1621_cs;
delay(10);
port_displayout &= ~ht1621_cs;
delay(10);
senddata_lcd(3,0x4); // send command: 100
senddata_lcd(9,0x3); //send : 0000 0001 1 to turn on osc
senddata_lcd(9,0x4f); //3 commons 1/2 bias: 0010 0111 1
senddata_lcd(9,0x1f); //send : 0000 1111 1 to clr tb and wdt
senddata_lcd(9,0xb); // send : 0000 0101 1 to disable wdt
senddata_lcd(9,0x7); //send : 0000 0011 1 to LCD on
port_displayout |= ht1621_cs;
}
/////////////////////////////////////////////////////////////////////////////////////////////
void ht1621_dispDigit(unsigned char htdis_number,unsigned char htvalue)
{
unsigned int ht_pointer,cal_i;
if(htdis_number>6)return;
cal_i = htdis_number;
cal_i --;
htdis_number += 2 * cal_i;
ht_pointer=htvalue*3;
htvalue = tab_disdat[ht_pointer];
WritedataTolcd(htdis_number,htvalue);
ht_pointer ++;
htdis_number ++;
htvalue = tab_disdat[ht_pointer];
WritedataTolcd(htdis_number,htvalue);
ht_pointer ++;
htdis_number ++;
htvalue = tab_disdat[ht_pointer];
WritedataTolcd(htdis_number,htvalue);
}
////////////////////////////////////////////////////////////////////////////////////////////////
void ht1621_displayInt(unsigned char startPosi,unsigned int display_data)
{
unsigned char data,dflag;
dflag=0;
data=display_data/10000;
if(data>0)
dflag=1;
else data=CLR;
ht1621_dispDigit(startPosi++,data);
display_data %= 10000;
data=display_data/1000;
if(data>0 || dflag==1)
dflag=1;
else data=CLR;
ht1621_dispDigit(startPosi++,data);
display_data %= 1000;
data=display_data/100;
if(data>0 || dflag==1)
dflag=1;
else data=CLR;
ht1621_dispDigit(startPosi++,data);
display_data %= 100;
data=display_data/10;
if(data>0 || dflag==1)
dflag=1;
else data=CLR;
ht1621_dispDigit(startPosi++,data);
ht1621_dispDigit(startPosi++,display_data%10);
//WritedataTolcd(0,0x4); //display heart
}
////////////////////////////////////////////////////////////////////////////////////////////////
void ht1621_displayChar(unsigned char startPosi,unsigned int display_data)
{
unsigned char data,dflag;
dflag=1;
if (display_data>999)display_data=999;
data=display_data/100;
if(data>0)
dflag=1;
else data=CLR;
ht1621_dispDigit(startPosi++,data);
display_data %= 100;
data=display_data/10;
if(data>0 || dflag==1)
dflag=1;
else data=CLR;
ht1621_dispDigit(startPosi++,data);
ht1621_dispDigit(startPosi,display_data%10);
//WritedataTolcd(0,0x4); //display heart
}
////////////////////////////////////////////////////////////////////////////////////////////////
void ht1621_displayTwoDigit(unsigned char startPosi,unsigned char display_data)
{
ht1621_dispDigit(startPosi++,display_data/0x10);
ht1621_dispDigit(startPosi++,display_data%0x10);
}
////////////////////////////////////////////////////////////////////////////////////////////////
void ht1621_displayIcon(unsigned char Icon,unsigned char Onoff)
{
if(Onoff==1)
{
WritedataTolcd(tab_disIcon[Icon][0],tab_disIcon[Icon][1]); //display Icon
}
else
WritedataTolcd(tab_disIcon[Icon][0],0); //display Icon
}
void delay(unsigned char n)
{
while(n--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -