display.c
来自「一个基于C51开发的计价秤」· C语言 代码 · 共 1,047 行 · 第 1/2 页
C
1,047 行
/*********************************************/
// File Name: display.c
// Author: henny
// Date: 2006/3/1
/*********************************************/
#include <SST89x5xxRD2.h>
#include <stdio.h>
#include "Public.h"
#define SEG_A 0x80 /*a segment*/
#define SEG_B 0x20 /*b segment*/
#define SEG_C 0x40 /*c segment*/
#define SEG_D 0x01 /*d segment*/
#define SEG_E 0x04 /*e segment*/
#define SEG_F 0x08 /*f segment*/
#define SEG_G 0x02 /*g segment*/
#define SEG_DP 0x10 /*dp segment*/
#define CHAR_0 SEG_A+SEG_B+SEG_C+SEG_D+SEG_E+SEG_F /*0*/
#define CHAR_1 SEG_B+SEG_C /*1*/
#define CHAR_2 SEG_A+SEG_B+SEG_D+SEG_E+SEG_G /*2*/
#define CHAR_3 SEG_A+SEG_B+SEG_C+SEG_D+SEG_G /*3*/
#define CHAR_4 SEG_B+SEG_C+SEG_F+SEG_G /*4*/
#define CHAR_5 SEG_A+SEG_C+SEG_D+SEG_F+SEG_G /*5*/
#define CHAR_6 SEG_A+SEG_C+SEG_D+SEG_E+SEG_F+SEG_G /*6*/
#define CHAR_7 SEG_A+SEG_B+SEG_C /*7*/
#define CHAR_8 SEG_A+SEG_B+SEG_C+SEG_D+SEG_E+SEG_F+SEG_G/*8*/
#define CHAR_9 SEG_A+SEG_B+SEG_C+SEG_D+SEG_F+SEG_G /*9*/
#define CHAR_A SEG_A+SEG_B+SEG_C+SEG_E+SEG_F+SEG_G /*A*/
#define CHAR_b SEG_C+SEG_D+SEG_E+SEG_F+SEG_G /*b*/
#define CHAR_C SEG_A+SEG_F+SEG_E+SEG_D /*C*/
#define CHAR_c SEG_D+SEG_E+SEG_D /*c*/
#define CHAR_d SEG_B+SEG_C+SEG_D+SEG_E+SEG_G /*d*/
#define CHAR_E SEG_A+SEG_D+SEG_E+SEG_F+SEG_G /*E*/
#define CHAR_F SEG_A+SEG_E+SEG_F+SEG_G /*F*/
#define CHAR_H SEG_B+SEG_C+SEG_E+SEG_F+SEG_G /*H*/
#define CHAR_h SEG_C+SEG_E+SEG_F+SEG_G /*h*/
#define CHAR_o SEG_C+SEG_D+SEG_E+SEG_G /*o*/
#define CHAR_P SEG_A+SEG_B+SEG_E+SEG_F+SEG_G /*P*/
#define CHAR_q SEG_A+SEG_B+SEG_C+SEG_F+SEG_G /*q*/
#define CHAR_r SEG_E+SEG_G /*r*/
#define CHAR_t SEG_D+SEG_E+SEG_F+SEG_G /*t*/
#define CHAR_L SEG_D+SEG_E+SEG_F /*L*/
#define CHAR_N SEG_A+SEG_B+SEG_C+SEG_E+SEG_F /*N*/
#define CHAR_n SEG_C+SEG_E+SEG_G /*n*/
#define CHAR_U SEG_B+SEG_C+SEG_D+SEG_E+SEG_F /*U*/
#define CHAR_y SEG_B+SEG_C+SEG_D+SEG_F+SEG_G /*y*/
#define CHAR_NEG SEG_G /*-*/
#define BEEP_ICON 0x80
#define AC_ICON 0x40
#define BAT_ICON 0x20
#define NET_ICON 0x08
#define STA_ICON 0x04
#define NEG_ICON 0x02
#define ZERO_ICON 0x01
extern TIME time;
extern DATE date;
extern BOOL NEG_flag;
extern BOOL point1_on,point2_on,point3_on;
extern BYTE point1_pos,point2_pos,point3_pos;
extern BYTE state;
extern BYTE icon_buf;
extern BYTE lcd1_buf[5];
extern BYTE lcd2_buf[7];
extern BYTE lcd3_buf[7];
extern BYTE LCD_RAM[20];
extern BOOL colon,clock_flash,logo_flag,KG_flag;
extern VOID LCD_Display(BYTE driver,BYTE adr,BYTE *buf,BYTE no);
static struct{
BYTE ascii;
BYTE stroke;
} const lcd_segment[30]=\
{{'0',CHAR_0},{'1',CHAR_1},{'2',CHAR_2},{'3',CHAR_3},{'4',CHAR_4},\
{'5',CHAR_5},{'6',CHAR_6},{'7',CHAR_7},{'8',CHAR_8},{'9',CHAR_9},\
{'A',CHAR_A},{'b',CHAR_b},{'c',CHAR_c},{'C',CHAR_C},{'d',CHAR_d},\
{'E',CHAR_E},{'F',CHAR_F},{'H',CHAR_H},{'o',CHAR_o},{'P',CHAR_P},\
{'q',CHAR_q},{'r',CHAR_r},{'t',CHAR_t},{'L',CHAR_L},{'N',CHAR_N},\
{'n',CHAR_n},{'U',CHAR_U},{'y',CHAR_y},{'h',CHAR_h},{'-',CHAR_NEG}};
BYTE Get_Lcd_Segment(BYTE c)
//find lcd segment form segment tables by char
//return segment value
{
INT8 data p=0;
while(lcd_segment[p].ascii!=c)
{
p++;
if(p==30)return 0;
}
return(lcd_segment[p].stroke);
}
VOID Set_BEEP_Icon()
{
icon_buf|=BEEP_ICON;
}
VOID Cls_BEEP_Icon()
{
icon_buf&=~BEEP_ICON;
}
VOID Set_AC_Icon()
{
icon_buf|=AC_ICON;
}
VOID Cls_AC_Icon()
{
icon_buf&=~AC_ICON;
}
VOID Set_BAT_Icon()
{
icon_buf|=BAT_ICON;
}
VOID Cls_BAT_Icon()
{
icon_buf&=~BAT_ICON;
}
VOID Set_NEG_Icon()
{
icon_buf|=NEG_ICON;
}
VOID Cls_NEG_Icon()
{
icon_buf&=~NEG_ICON;
}
VOID Set_NET_Icon()
{
icon_buf|=NET_ICON;
}
VOID Cls_NET_Icon()
{
icon_buf&=~NET_ICON;
}
VOID Set_STA_Icon()
{
icon_buf|=STA_ICON;
}
VOID Cls_STA_Icon()
{
icon_buf&=~STA_ICON;
}
VOID Set_ZERO_Icon()
{
icon_buf|=ZERO_ICON;
}
VOID Cls_ZERO_Icon()
{
icon_buf&=~ZERO_ICON;
}
VOID Cls_Icon_Buf()
{
Cls_NEG_Icon();
Cls_ZERO_Icon();
Cls_STA_Icon();
}
WORD Get_PLU_no_from_display_buf()
{
INT8 data i;
WORD temp=0,multipliter=1;
for(i=0;i<3;i++)
{
if(lcd2_buf[i]>='0'&&lcd2_buf[i]<='9')
{
temp+=(lcd2_buf[i]-'0')*multipliter;
multipliter*=10;
}
}
return temp;
}
WORD Get_Quantity_from_display_buf()
{
INT8 data i;
WORD temp=0,multipliter=1;
for(i=0;i<5;i++)
{
if(lcd1_buf[i]>='0'&&lcd1_buf[i]<='9')
{
temp+=(lcd1_buf[i]-'0')*multipliter;
multipliter*=10;
}
}
return temp;
}
WORD Get_Cal_Weight_from_display_buf()
{
INT8 data i;
WORD temp=0,multipliter=1;
for(i=0;i<5;i++)
{
if(lcd2_buf[i]>='0'&&lcd2_buf[i]<='9')
{
temp+=(lcd2_buf[i]-'0')*multipliter;
multipliter*=10;
}
}
return temp;
}
DWORD Get_Unit_Price_from_display_buf()
{
INT8 data i;
DWORD temp=0,multipliter=1;
for(i=0;i<7;i++)
{
if(lcd2_buf[i]>='0'&&lcd2_buf[i]<='9')
{
temp+=(lcd2_buf[i]-'0')*multipliter;
multipliter*=10;
}
}
return temp;
}
DWORD Get_Money_from_display_buf()
{
INT8 data i;
DWORD temp=0,multipliter=1;
for(i=0;i<7;i++)
{
if(lcd2_buf[i]>='0'&&lcd2_buf[i]<='9')
{
temp+=(lcd2_buf[i]-'0')*multipliter;
multipliter*=10;
}
}
return temp;
}
VOID Set_Lcd1_Buf(BYTE c,INT8 pos,INT8 cnt)
{
INT8 data i;
point1_on=FALSE;
for(i=pos;cnt>0;cnt--)
{
lcd1_buf[i]=c;
i++;
if(i==5)
i=0;
}
}
VOID Set_Lcd2_Buf(BYTE c,INT8 pos,INT8 cnt)
{
INT8 data i;
point2_on=FALSE;
for(i=pos;cnt>0;cnt--)
{
lcd2_buf[i]=c;
i++;
if(i==7)
i=0;
}
}
VOID Set_Lcd3_Buf(BYTE c,INT8 pos,INT8 cnt)
{
INT8 data i;
point3_on=FALSE;
for(i=pos;cnt>0;cnt--)
{
lcd3_buf[i]=c;
i++;
if(i==7)
i=0;
}
}
VOID Set_OVER_On_Lcd1_Display()
{
Set_Lcd1_Buf(0,0,5);
Set_Lcd1_Buf('0',3,1);
Set_Lcd1_Buf('U',2,1);
Set_Lcd1_Buf('E',1,1);
Set_Lcd1_Buf('r',0,1);
}
VOID Set_INIT0_On_Lcd1_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd3_Buf(0,0,7);
Set_Lcd1_Buf(0,0,5);
Set_Lcd1_Buf('1',4,1);
Set_Lcd1_Buf('N',3,1);
Set_Lcd1_Buf('1',2,1);
Set_Lcd1_Buf('t',1,1);
Set_Lcd1_Buf('0',0,1);
}
VOID Set_EEP_On_Lcd1_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd3_Buf(0,0,7);
Set_Lcd1_Buf(0,0,5);
Set_Lcd1_Buf('E',2,1);
Set_Lcd1_Buf('E',1,1);
Set_Lcd1_Buf('P',0,1);
}
VOID Set_ADC_On_Lcd1_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd3_Buf(0,0,7);
Set_Lcd1_Buf(0,0,5);
Set_Lcd1_Buf('A',2,1);
Set_Lcd1_Buf('d',1,1);
Set_Lcd1_Buf('C',0,1);
}
VOID Set_RS232_On_Lcd1_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd3_Buf(0,0,7);
Set_Lcd1_Buf(0,0,5);
Set_Lcd1_Buf('r',4,1);
Set_Lcd1_Buf('5',3,1);
Set_Lcd1_Buf('2',2,1);
Set_Lcd1_Buf('3',1,1);
Set_Lcd1_Buf('2',0,1);
}
VOID Set_NOCAL_On_Lcd1_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd3_Buf(0,0,7);
Set_Lcd1_Buf(0,0,5);
Set_Lcd1_Buf('N',4,1);
Set_Lcd1_Buf('0',3,1);
Set_Lcd1_Buf('C',2,1);
Set_Lcd1_Buf('A',1,1);
Set_Lcd1_Buf('L',0,1);
}
VOID Set_NOEEP_On_Lcd1_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd3_Buf(0,0,7);
Set_Lcd1_Buf(0,0,5);
Set_Lcd1_Buf('N',4,1);
Set_Lcd1_Buf('0',3,1);
Set_Lcd1_Buf('E',2,1);
Set_Lcd1_Buf('E',1,1);
Set_Lcd1_Buf('P',0,1);
}
VOID Set_Logo_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd2_Buf('P',4,1);
Set_Lcd2_Buf('A',3,1);
Set_Lcd2_Buf('n',2,1);
Set_Lcd2_Buf('d',1,1);
}
VOID Set_SCALE_Display()
{
Set_Lcd3_Buf(0,0,7);
Set_Lcd3_Buf('5',4,1);
Set_Lcd3_Buf('C',3,1);
Set_Lcd3_Buf('A',2,1);
Set_Lcd3_Buf('L',1,1);
Set_Lcd3_Buf('E',0,1);
}
VOID Set_INPUT_CODE_Display()
{
Set_Lcd1_Buf('1',4,1);
Set_Lcd1_Buf('n',3,1);
Set_Lcd1_Buf('P',2,1);
Set_Lcd1_Buf('U',1,1);
Set_Lcd1_Buf('t',0,1);
Set_Lcd2_Buf('C',6,1);
Set_Lcd2_Buf('o',5,1);
Set_Lcd2_Buf('d',4,1);
Set_Lcd2_Buf('E',3,1);
Set_Lcd2_Buf('-',2,1);
Set_Lcd2_Buf('-',1,1);
Set_Lcd2_Buf('-',0,1);
Set_Lcd3_Buf(0,0,7);
point2_on=TRUE;
point2_pos=3;
}
VOID Set_COPY_SUCCESS_Display()
{
Set_Lcd1_Buf(0,4,1);
Set_Lcd1_Buf('C',3,1);
Set_Lcd1_Buf('0',2,1);
Set_Lcd1_Buf('P',1,1);
Set_Lcd1_Buf('y',0,1);
Set_Lcd2_Buf('5',6,1);
Set_Lcd2_Buf('U',5,1);
Set_Lcd2_Buf('C',4,1);
Set_Lcd2_Buf('C',3,1);
Set_Lcd2_Buf('E',2,1);
Set_Lcd2_Buf('5',1,1);
Set_Lcd2_Buf('5',0,1);
Set_Lcd3_Buf(0,0,7);
}
VOID Set_ERROR_On_Lcd2_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd2_Buf('E',4,1);
Set_Lcd2_Buf('r',3,1);
Set_Lcd2_Buf('r',2,1);
Set_Lcd2_Buf('o',1,1);
Set_Lcd2_Buf('r',0,1);
}
VOID Set_PLUS_On_Lcd2_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd2_Buf('P',3,1);
Set_Lcd2_Buf('L',2,1);
Set_Lcd2_Buf('U',1,1);
Set_Lcd2_Buf('5',0,1);
}
VOID Set_TOTAL_P_On_Lcd2_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd2_Buf('t',6,1);
Set_Lcd2_Buf('o',5,1);
Set_Lcd2_Buf('t',4,1);
Set_Lcd2_Buf('A',3,1);
Set_Lcd2_Buf('L',2,1);
Set_Lcd2_Buf('P',0,1);
}
VOID Set_TOTAL_U_On_Lcd2_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd2_Buf('U',5,1);
Set_Lcd2_Buf('E',4,1);
Set_Lcd2_Buf('1',3,1);
Set_Lcd2_Buf('9',2,1);
Set_Lcd2_Buf('h',1,1);
Set_Lcd2_Buf('t',0,1);
/*
Set_Lcd2_Buf('t',6,1);
Set_Lcd2_Buf('o',5,1);
Set_Lcd2_Buf('t',4,1);
Set_Lcd2_Buf('A',3,1);
Set_Lcd2_Buf('L',2,1);
Set_Lcd2_Buf('U',0,1);
*/
}
VOID Set_TOTAL_N_On_Lcd2_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd2_Buf('t',6,1);
Set_Lcd2_Buf('o',5,1);
Set_Lcd2_Buf('t',4,1);
Set_Lcd2_Buf('A',3,1);
Set_Lcd2_Buf('L',2,1);
Set_Lcd2_Buf('N',0,1);
}
VOID Set_TOTAL_On_Lcd2_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd2_Buf('t',4,1);
Set_Lcd2_Buf('o',3,1);
Set_Lcd2_Buf('t',2,1);
Set_Lcd2_Buf('A',1,1);
Set_Lcd2_Buf('L',0,1);
}
VOID Set_QUANTITY_On_Lcd2_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd2_Buf('q',6,1);
Set_Lcd2_Buf('U',5,1);
Set_Lcd2_Buf('A',4,1);
Set_Lcd2_Buf('n',3,1);
Set_Lcd2_Buf('t',2,1);
Set_Lcd2_Buf('1',1,1);
Set_Lcd2_Buf('t',0,1);
}
VOID Set_SEL_PLU_On_Lcd2_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd2_Buf('5',6,1);
Set_Lcd2_Buf('E',5,1);
Set_Lcd2_Buf('L',4,1);
Set_Lcd2_Buf('P',2,1);
Set_Lcd2_Buf('L',1,1);
Set_Lcd2_Buf('U',0,1);
}
VOID Set_INPUT_PRICE_On_Lcd2_Display()
{
Set_Lcd2_Buf(0,0,7);
Set_Lcd2_Buf('1',6,1);
Set_Lcd2_Buf('n',5,1);
Set_Lcd2_Buf('P',4,1);
Set_Lcd2_Buf('U',3,1);
Set_Lcd2_Buf('t',2,1);
Set_Lcd2_Buf('P',0,1);
}
VOID Set_OVER_On_Lcd3_Display()
{
Set_Lcd3_Buf(0,0,7);
Set_Lcd3_Buf('0',3,1);
Set_Lcd3_Buf('U',2,1);
Set_Lcd3_Buf('E',1,1);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?