ht1621段码LCD显示驱动
/************************************************************
Copyright: 2010,ShangHai BST Co.,Ltd. File name: Display.C
Description: HT1621段码显示驱动
Author: QG2
Version: V0.8
Data: Dec-24-2010
************************************************************/
#include
#include
#include
#include "Display.h"
//用于HT1621B设置指令的宏定义
#define SYSDIS 0x00
#define SYSEN 0x01
#define LCDOFF 0x02
#define LCDON 0x03
#define SETCLK 0x18
#define SETBIAS 0x20
#define NORMAL 0xe3
//用于HT1621B硬件连接的宏定义
#define CS1 PORTD |= 1<>=1;
WR1;
}
}
//发送一个字节的命令
void SendCmd(unsigned char command)
{
DA1;WR1;CS1;
CS0;WR0;WR1;
WR0;DA0;WR1;
WR0;WR1;
SendByte(command);
WR0;WR1;
WR1;CS1;DA1;
}
//发送显示数据
void SendDispData(void) {
unsigned char i;
DA1;WR1;CS1;
CS0;WR0;WR1;
DA0;WR0;WR1;
DA1;WR0;WR1;
DA0;
for(i=0;i<6;i++)
{
WR0;
WR1;
}
for(i=0;i<16;i++)
SendByte(disp_buf[i]);
CS1;
}
//初始化HT1621B显示
void InitLCD(void)
{
SendCmd(SYSEN);
SendCmd(LCDON);
SendCmd(SETCLK);
SendCmd(SETBIAS);
SendCmd(NORMAL);
}
/*---------------------LCD显示函数部分--------------------*/
//十六段码字形
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
//A1 A2 B C D2 D1 E F,G1 G2 J K L M N P
const prog_uchar seg16[43][2]={ {0B11111111,0B00000000}, //0 {0B00000000,0B00010010}, //1 {0B11101110,0B11000000}, //2 {0B11111100,0B11000000}, //3 {0B00110001,0B11000000}, //4 {0B11011101,0B11000000}, //5 {0B11011111,0B11000000}, //6
{0B11110000,0B00000000}, //7 {0B11111111,0B11000000}, //8 {0B11111101,0B11000000}, //9 {0B00000000,0B00000000}, // {0B00000000,0B00000000}, // {0B00000000,0B00000000}, // {0B00000000,0B11000000}, //- {0B11111111,0B11111111}, //* {0B00000000,0B00000000}, // {0B00000000,0B00000000}, // {0B11110011,0B11000000}, //A {0B11111100,0B01010010}, //B {0B11001111,0B00000000}, //C {0B11111100,0B00010010}, //D {0B11001111,0B10000000}, //E {0B11000011,0B10000000}, //F {0B11011111,0B01000000}, //G {0B00110011,0B11000000}, //H {0B11001100,0B00010010}, //I {0B11000100,0B00010010}, //J {0B00000011,0B10001100}, //K {0B00001111,0B00000000}, //L {0B00110011,0B00101000}, //M {0B00110011,0B00100100}, //N {0B11111111,0B00000000}, //O {0B11100011,0B11000000}, //P {0B11111111,0B00000100}, //Q {0B11100011,0B11000100}, //R {0B11011101,0B11000000}, //S {0B11000000,0B00010010}, //T {0B00111111,0B00000000}, //U {0B00000011,0B00001001}, //V {0B00110011,0B00000101}, //W {0B00000000,0B00101101}, //X {0B00000000,0B00101010}, //Y {0B11001100,0B00001001}, //Z };
//清显示缓冲区
void ClrBuf(void)
{
disp_buf[0] = 0;
disp_buf[1] = 0;
disp_buf[2] = 0;
disp_buf[3] = 0;
disp_buf[4] = 0;
disp_buf[5] = 0;
disp_buf[6] = 0;
disp_buf[7] = 0;
disp_buf[8] = 0;
disp_buf[9] = 0;
disp_buf[10]= 0;
disp_buf[11]= 0;
}
//显示功能显示
//bit0:out of service //bit1:overload
//bit2:full load
void DispF(unsigned char ff,unsigned char language)
{
if(language&0x04)//中文繁体
{
if(ff&0x04) disp_buf[1] |= 0x08;
else disp_buf[1] &=~0x08;
if(ff&0x02) disp_buf[1] |= 0x04;
else disp_buf[1] &=~0x04;
if(ff&0x01) disp_buf[3] |= 0x04;
else disp_buf[3] &=~0x04;
}
if(language&0x02)//中文简体
{
if(ff&0x04) disp_buf[2] |= 0x40;
else disp_buf[2] &=~0x40;
if(ff&0x02) disp_buf[2] |= 0x04;
else disp_buf[2] &=~0x04;
if(ff&0x01) disp_buf[3] |= 0x08;
else disp_buf[3] &=~0x08;
}
if(language&0x01)//English
{
if(ff&0x04) disp_buf[2] |= 0x80;
else disp_buf[2] &=~0x80;
if(ff&0x02) disp_buf[2] |= 0x08;
else disp_buf[2] &=~0x08;
if(ff&0x01) disp_buf[3] |= 0x80;
else disp_buf[3] &=~0x80;
}
}
//显示方向箭头
//arrow:1=dn,2=up,3=up&dn
void DispArrow(unsigned char arrow) {
if((arrow&0x03)!= 0x03){
if(arrow&0x01) disp_buf[8] |= 0x40;
else disp_buf[8] &=~0x40;
if(arrow&0x02) disp_buf[8] |= 0x80;
else disp_buf[8] &=~0x80;
}
if(arrow&0x03) disp_buf[8] |= 0x08;
else disp_buf[8] &=~0x08;
}
//楼层高位字段编码
void EncodeH(unsigned char hh) {
if((hh>='0')&&(hh<='Z'))hh-='0';
else hh=16;
unsigned char segcode1,segcode2;
const prog_uchar *p_zk = seg16[hh];
segcode1 = pgm_read_byte(p_zk++);
segcode2 = pgm_read_byte(p_zk++);
if(segcode1&0x80) disp_buf[10]|= 0x40; //A1
if(segcode1&0x40) disp_buf[10]|= 0x80; //A2
if(segcode1&0x20) disp_buf[9] |= 0x04; //B
if(segcode1&0x10) disp_buf[9] |= 0x40; //C
if(segcode1&0x08) disp_buf[1] |= 0x80; //D2
if(segcode1&0x04) disp_buf[0] |= 0x80; //D1
if(segcode1&0x02) disp_buf[11]|= 0x40; //E
if(segcode1&0x01) disp_buf[10]|= 0x04; //F
if(segcode2&0x80) disp_buf[11]|= 0x80; //G1
if(segcode2&0x40) disp_buf[9] |= 0x80; //G2
if(segcode2&0x20) disp_buf[10]|= 0x08; //J
if(segcode2&0x10) disp_buf[0] |= 0x04; //K
if(segcode2&0x08) disp_buf[9] |= 0x08; //L
if(segcode2&0x04) disp_buf[1] |= 0x40; //M
if(segcode2&0x02) disp_buf[0] |= 0x08; //N
if(segcode2&0x01) disp_buf[0] |= 0x40; //P }
//楼层低位字段编码
void EncodeL(unsigned char ll)
{
if((ll>='0')&&(ll<='Z'))ll-='0';
else ll=16;
unsigned char segcode1,segcode2;
const prog_uchar *p_zk = seg16[ll];
segcode1 = pgm_read_byte(p_zk++);
segcode2 = pgm_read_byte(p_zk++);
if(segcode1&0x80) disp_buf[6] |= 0x04;
if(segcode1&0x40) disp_buf[6] |= 0x08;
if(segcode1&0x20) disp_buf[6] |= 0x40;
if(segcode1&0x10) disp_buf[5] |= 0x04;
if(segcode1&0x08) disp_buf[5] |= 0x80;
if(segcode1&0x04) disp_buf[4] |= 0x80;
if(segcode1&0x02) disp_buf[7] |= 0x04;
if(segcode1&0x01) disp_buf[7] |= 0x40;
if(segcode2&0x80) disp_buf[7] |= 0x08;
if(segcode2&0x40) disp_buf[5] |= 0x08;
if(segcode2&0x20) disp_buf[7] |= 0x80;
if(segcode2&0x10) disp_buf[4] |= 0x04;
if(segcode2&0x08) disp_buf[6] |= 0x80;
if(segcode2&0x04) disp_buf[5] |= 0x40;
if(segcode2&0x02) disp_buf[4] |= 0x08;
if(segcode2&0x01) disp_buf[4] |= 0x40; }