⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 3 页
字号:
//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 + -