📄 display.c
字号:
//extern void con_disp(uchar xaddr,uchar yaddr,uchar length,void *buf);
/*-------------------------------------------------------------
功能:Lcd显示:各类功能界面显示、错误显示
说明:符合国家标准GB18240.1-2003和GB18240.2-2003的税控机软件
日期:2003年6月12日
---------------------------------------------------------------*/
#include "include.h"
//LCD显示区域
#define PLU_AREA 1 //PLU或部门编号/名称显示区域
#define MONEY_AREA 2 //金额显示区域
#define QUANTITY_AREA 3 //数量显示区域
#define INPUT_AREA 4 //输入显示区域
#define TOTAL_AREA 5 //合计显示区域
#define ALL_AREA 6 //所有显示区域
/*-------------------------------------------------------------
功能:系统自检通过后显示制造商信息,机器编号、硬件软件版本号和制造
日期
输入:NO
输出:NO
C51: __DATE__ AND __TIME__ 宏
问:有没有可能将编译日期和时间加入我的程序中?
答:可以使用KEIL内置的__DATE__ 和 __TIME__ 宏来实现这个功能,参考范例:
unsigned char code DataStr[]=__DATE__;
unsigned char code TimeStr[]=__TIME__;
这样,编译后TimeStr的字符串正好是编译的当前时刻,相当于
unsigned char code TimeStr[]="09:12:04"
----------------------------------------------------------------*/
void display_producer()
{
uchar disp_buf[30];
uchar buf[6];
clear_lcd(0,MAX_LCD_NUM);
strcpy(disp_buf,"机器号:");
//后面6个字节作为BCD码转换
HexToStr(&g_manufacturer_info.machinery_no[0],&disp_buf[7],8);
lcd_disp(0,0,disp_buf);
sprintf(disp_buf,"软件版本号:%s",SOFTWARE_VER);
//strcat(disp_buf," 0537");//显示当地的区号
//memset(disp_buf,0,30);
//strcpy(disp_buf,"硬件版本号: ");
//memcpy(&disp_buf[strlen(disp_buf)],&g_manufacturer_info.hardware_copyright[15],3);
lcd_disp(1,0,disp_buf);
strcpy(buf,disp_buf+11);
read_eeprom(SOFTWARE_VER_RE,5,disp_buf);
disp_buf[5]=0;
if(strcmp(buf,disp_buf))
{
write_eeprom(SOFTWARE_VER_RE,6,buf);
Write_FAU_data(SOLFWAREUPDATE,0);
}
sprintf(disp_buf,"硬件版本号:%s",HARDWARE_VER);
//memset(disp_buf,0,30);
//strcpy(disp_buf,"软件版本号: ");
//memcpy(&disp_buf[strlen(disp_buf)],&g_manufacturer_info.software_copyright[15],3);
lcd_disp(2,0,disp_buf);
sprintf(disp_buf,"出厂日期:20%02x-%02x-%02x",
(uint)g_manufacturer_info.date[1],(uint)g_manufacturer_info.date[2],
(uint)g_manufacturer_info.date[3]);
lcd_disp(3,0,disp_buf);
/*
while(!get_key())
{
if(low_pwr) shut_bat(1); //检测到交流掉电,关闭电池退出
}*/
}
/*-------------------------------------------------------------
功能:显示开票情况
输入:
invoice_roll,当前发票卷信息
money_add:发票金额累加信息
返回:
----------------------------------------------------------------*/
void display_issue_msg(struct invoice_roll_info_struct* invoice_roll_info,
struct money_add_struct* money_add)
{
uchar buf[50];
ulong num;
//uchar i;
//struct record_struct xdata record;
//ulong j;
num=invoice_roll_info->invoice_curr_no;
// j=num-1;
sprintf(buf,"当前发票号:%08lu",num);//%010lu//只显示8位
lcd_disp(0,0,buf);
if(invoice_roll_info->invoice_start_no==0)
num=0;
else
num=invoice_roll_info->invoice_end_no - invoice_roll_info->invoice_curr_no+1;
//2005.11.12
sprintf(buf,"发票剩余张数:%lu\r",num);
lcd_disp(1,0,buf);
//sprintf(buf,"开票累计金额:%lu.%02u",money_add->add_money/100,
//(uint)(money_add->add_money%100));
if(g_user_info.max_money>money_add->add_money)
num=g_user_info.max_money - money_add->add_money;
else num=0;
sprintf(buf,"剩余开票金额:%lu.%02u",num/100,
(uint)(num%100));
lcd_disp(2,0,buf);
if(lastday_to_trade==1)
strcpy(buf,"请注意,今天为最后开票日");
else
{
// i=locate_invoice(j,&record,0);
//if(!i)sprintf(buf,"明细条数最后条:%lu\r",j);
//else strcpy(buf,"明细条数最后1条未找到");
//sprintf(buf,"退票累计金额:%lu.%02u",money_add->retreat_money/100,
//(uint)(money_add->retreat_money%100));
if(g_user_info.retreat_max_money>money_add->retreat_money)
num=g_user_info.retreat_max_money - money_add->retreat_money;
else num=0;
sprintf(buf,"剩余退票金额:%lu.%02u",num/100,
(uint)(num%100));
}
lcd_disp(3,0,buf);
/*#ifdef VFD //支持VFD显示
strcpy(buf,"0.00");
disp_r_l(buf); //顾客显示屏显示
#endif
*/
}
/*-------------------------------------------------------------
功能:显示时间和开票监控信息
输入:*rtc:时间指针
refresh_all 0: 只显示时间 1: 发票数据和时间都显示
返回:
----------------------------------------------------------------*/
void display_time(uchar * rtc,uchar refresh_all,uchar is_trade)
{
uchar buf[50];
uchar week[15]={"天一二三四五六"};
//uchar buf1[50];
//send_str(7,rtc);
if(is_trade==YES)
{
if(refresh_all)
{
sprintf(buf,"开票累计限额:%lu.%02u",g_user_info.max_money/100,
(uint)(g_user_info.max_money%100));//
lcd_disp(0,0,buf);
// buf[0]=g_user_info.max_money%100;
//send_char(buf[0]);
sprintf(buf,"退票累计限额:%lu.%02u",g_user_info.retreat_max_money/100,
(uint)(g_user_info.retreat_max_money%100));
//send_str(4,&g_user_info.retreat_max_money);
lcd_disp(1,0,buf);
sprintf(buf,"开票截止日期:%02bx%02bx-%02bx-%02bx",
g_user_info.issue_deline_date[0],
g_user_info.issue_deline_date[1],
g_user_info.issue_deline_date[2],
g_user_info.issue_deline_date[3]);
lcd_disp(2,0,buf);
/*#ifdef VFD //支持VFD显示
strcpy(buf,"0.00");
disp_r_l(buf); //顾客显示屏显示
#endif
*/
}
sprintf(buf,"20%02x-%02x-%02x %02x:%02x:%02x",(uint)rtc[0],
(uint)rtc[1],(uint)rtc[2],(uint)rtc[3],
(uint)rtc[4],(uint)rtc[5]);
lcd_disp(3,0,buf);
}
else
{
//if(refresh_all)send_char(rtc[6]);
sprintf(buf,"日期:%02x年%02x月%02x日 星期",(uint)rtc[0],(uint)rtc[1],(uint)rtc[2]);
strncpy(&buf[22],&week[(rtc[6]&0x07)*2],2);
buf[24] = 0;
lcd_disp(1,0,buf);
sprintf(buf,"时间:%02x时%02x分%02x秒\r",(uint)rtc[3],(uint)rtc[4],(uint)rtc[5]);
lcd_disp(2,0,buf);
}
}
/*-------------------------------------------------------------
功能:捕获和显示错误
输入:uchar error 错误类型
输出:无
----------------------------------------------------------------*/
void catch_error_display(uchar error1,uchar mode)
{
uchar buf_t[50];
buf_t[0]=0;
//VFD显示
/*#ifdef VFD //支持VFD显示
clear_disp();
sprintf(buf_t,"%u",(uint)error);
disp_r_l(buf_t);
buf_t[0] = 'E';
buf_t[1] = 0;
//disp_l_r(buf_t);
#endif
*/
//LCD错误显示
switch(error1)
{
case 0:
strcpy(buf_t,"操作成功!\r");
break;
//------------硬件故障类-------------//
case WRITE_EEPROM_FAIL:
strcpy(buf_t,"EE写入失败,关机重启\r");
break;
case READ_EEPROM_FAIL:
strcpy(buf_t,"EE读出失败,关机重启\r");
break;
case ERASE_FLASH_FAIL:
strcpy(buf_t,"扇区擦除失败,关机重启\r");
break;
case WRITE_FLASH_FAIL:
strcpy(buf_t,"FL写入失败,关机重启\r");
break;
case READ_FLASH_FAIL:
strcpy(buf_t,"FL读出失败,关机重启\r");
break;
case WRITE_SRAM_FAIL:
strcpy(buf_t,"SR写入失败,关机重启\r");
break;
case READ_SRAM_FAIL:
strcpy(buf_t,"SR读出失败,关机重启\r");
break;
case PRINT_FAIL:
strcpy(buf_t,"打印失败,检查打印机\r");
break;
case NO_PAPER:
strcpy(buf_t,"缺纸\r");
break;
case LINE_FEED_FAIL:
strcpy(buf_t,"行走纸失败,检查是否缺纸\r");
break;
case DOT_FEED_FAIL:
strcpy(buf_t,"点走纸失败,检查是否缺纸\r");
break;
case CPU_RESET_FAIL:
strcpy(buf_t,"卡应答失败,检查卡\r");
break;
case CPU_OPERATE_FAIL:
strcpy(buf_t,"卡操作失败,检查卡\r");
break;
case SAM_RESET_FAIL:
strcpy(buf_t,"税控卡应答失败,检查卡\r");
break;
case SAM_OPERATE_FAIL:
strcpy(buf_t,"税控卡操作失败,检查卡\r");
break;
case SET_CLOCK_FAIL:
strcpy(buf_t,"设置实时钟失败,关机重启\r");
break;
case READ_CLOCK_FAIL:
strcpy(buf_t,"读实时钟失败,关机重启\r");
break;
case COM_RATE_FAIL:
strcpy(buf_t,"波特率修改失败,关机重启\r");
break;
case COM_RECE_FAIL:
strcpy(buf_t,"串口接收超时,请再试\r");
break;
case MODEM_INIT_FAIL:
strcpy(buf_t,"MO初始化失败,开机再试\r");
break;
case MODEM_DIAL_FAIL:
strcpy(buf_t,"MO拨号失败,请再试\r");
break;
case ADDR_FLASH_FAIL:
strcpy(buf_t,"FL地址错,关机重启\r");
break;
case PARAM_FAIL:
strcpy(buf_t,"参数错,关机重启\r");
break;
case POWER_OFF:
strcpy(buf_t,"用户关电\r");
break;
case SAM_COMM_FAIL:
strcpy(buf_t,"税控卡通讯失败,检查卡");
break;
case USR_COMM_FAIL:
strcpy(buf_t,"用户卡通讯失败,检查卡\r");
break;
case CHK_COMM_FAIL:
strcpy(buf_t,"管理卡通讯失败,检查卡\r");
break;
case CALC_FWM_FAIL:
strcpy(buf_t,"计算税控码错,开机再试\r");
break;
case SAM_SEL_FIL_FAIL:
strcpy(buf_t,"税控卡文件选择失败检查卡\r");
break;
case USR_SEL_FIL_FAIL:
strcpy(buf_t,"用户卡文件选择失败检查卡\r");
break;
case CHK_SEL_FIL_FAIL:
strcpy(buf_t,"管理卡文件选择失败检查卡\r");
break;
case SAM_READ_FAIL:
strcpy(buf_t,"读税控卡失败,检查卡\r");
break;
case USR_READ_FAIL:
strcpy(buf_t,"读用户卡失败,检查卡\r");
break;
case CHK_READ_FAIL:
strcpy(buf_t,"读管理卡失败,检查卡\r");
break;
case SAM_WRITE_FAIL:
strcpy(buf_t,"写税控卡失败,检查卡\r");
break;
case USR_WRITE_FAIL:
strcpy(buf_t,"写用户卡失败,检查卡\r");
break;
case CHK_WRITE_FAIL:
strcpy(buf_t,"写管理卡失败,检查卡\r");
break;
case SAM_AUTH_FAIL:
strcpy(buf_t,"税控卡认证失败,检查卡\r");
break;
case USR_AUTH_FAIL:
strcpy(buf_t,"用户卡认证失败,检查卡\r");
break;
case CHK_AUTH_FAIL:
strcpy(buf_t,"管理卡认证失败,检查卡\r");
break;
case CARD_ERROR:
strcpy(buf_t,"卡错误,请检查卡\r");
break;
case COMM_FAIL:
strcpy(buf_t,"串口通讯失败,请检查再试\r");
break;
//------------操作错误类-------------//
case CRC_ERROR:
strcpy(buf_t,"CRC出错,开机再试\r");
break;
case LRC_ERROR:
strcpy(buf_t,"LRC出错,开机再试\r");
break;
case KEY_ERROR:
strcpy(buf_t,"按键错误,清除后再试\r");
break;
case MACHINE_NO_ERROR:
strcpy(buf_t,"机号不一致,是否插错卡\r");
break;
case TAXCARD_NO_ERROR:
strcpy(buf_t,"税控卡号错,是否插错卡\r");
break;
case USERCARD_MAC_ERROR:
strcpy(buf_t,"用户卡校验错,是否插错卡\r");
break;
case TAXCARD_MAC_ERROR:
strcpy(buf_t,"税控卡校验错,是否插错卡\r");
break;
case TAXCARD_REGISTER_ERROR:
strcpy(buf_t,"税控卡未注册,请检查\r");
break;
case PIN_DATE_ERROR:
strcpy(buf_t,"卡的启用/截止日期错,检查\r");
break;
case TAX_ITEM_ERROR:
strcpy(buf_t,"税种税目错,请检查\r");
break;
case INVO_NO_ERROR:
strcpy(buf_t,"发票号码错,请检查\r");
break;
case MONEY_OVERFLOW_ERROR:
strcpy(buf_t,"发票金额超,清除,重新输入\r");
break;
case ADD_MONEY_ERROR:
strcpy(buf_t,"开票累计金额超出请先报税\r");
break;
case ADD_MONEY1_ERROR:
strcpy(buf_t,"退票累计金额超出\r");
break;
case DECLARE_DATE_ERROR:
strcpy(buf_t,"报税期有误,请检查\r");
break;
case RECEIVER_PASSWOR_ERROR:
strcpy(buf_t,"密码有误,重新输入\r");
break;
case PASSWOR_ERROR:
strcpy(buf_t,"密码比较未通过,请退出\r");
break;
case RECEIVER_OVERFLOW_ERROR:
strcpy(buf_t,"不能再增加收款员\r");
break;
case BRANCH_OVERFLOW_ERROR:
strcpy(buf_t,"不能再增加部门数\r");
break;
case PLU_MAX_ERROR:
strcpy(buf_t,"不能再设置商品\r");
break;
case PLU_NOW_ERROR:
strcpy(buf_t,"商品未设置,请重设\r");
break;
case NUMBER_MAX_ERROR:
strcpy(buf_t,"数量超出,清除后重输\r");
break;
case PRICE_MAX_ERROR:
strcpy(buf_t,"单价超出,清除后重输\r");
break;
case MENU_OVERFLOW_ERROR:
strcpy(buf_t,"不能再挂单\r");
break;
case MONEY_LACK_ERROR:
strcpy(buf_t,"付款额不足\r");
break;
case OVER_RANGE_ERROR:
strcpy(buf_t,"超出范围,清除后重输\r");
break;
case UPDATE_INF_NOT_EXIST:
strcpy(buf_t,"监控信息不存在,请检查卡\r");
break;
case SEEK_FAIL:
strcpy(buf_t,"查找失败,请检查日期段\r");
break;
case INVOICE_INPUTED:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -