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

📄 menupro.c

📁 本程序在S3C44B0 uClinux的嵌入式GUI
💻 C
📖 第 1 页 / 共 2 页
字号:
 //深圳之行 要解决的事情 //  RTC时钟是否正确 //  光标 //  BMP图形显示  //  网口测试 //  掉电,关机 //  标准键盘可用? //  minicom窗口汉字显示 //  热敏打印机可靠?访问文件可靠? //MenuPro.c #include <time.h> #include "pos.h" #include "MenuPro.h" //typedef unsigned char BYTE; typedef unsigned int  WORD; typedef unsigned long DWORD; extern struct tm *glb_now; //显示 菜单,等待用户选择 //按下ESC,返回-1 //按下CR,返回被选中的菜单号( 0 -- ScrLines-1)WORD MenuDisplay(BYTE *MenuTxt,int ScrLines,int DispPosition ) { int cnt,MenuLine,ScrLine,TopLine,ScrCnt,t_cnt=0;   WORD KeyVal; BYTE BorW; char d_buf[32]; char DateTimeStr[32];   int cc = 0,dp=0,ItemLen = 15; //ItemLen 可以作为函数参数,由调用者根据菜单宽调整ItemLen     dp = DispPosition * 8; //计算显示 左边界     ScrCnt = (ScrLines>3)? 3:ScrLines;     //if(NeedSaveLcd)     //{ // allocate memory for string     //  ScrSaveMem = (char *)malloc(2048); //申请内存     //  LCD_ScreenSave(0,0,8,16,ScrSaveMem); //保存全屏     //}else{	//LCD_Init();        //LCD_Clear('W'); //'W'->白底黑字/'B'->黑底白字        //LCD6963_ClearScreen(); //LCD 软件初始化       //}     LCD_SubScrClr(0,0,13*4-1,192,'W');         //清部分屏幕     //划出窗口边线     LCD_DrawH_Line(7,dp + 8,dp+119,'W');     LCD_DrawH_Line(49,dp + 8,dp+119,'W');     LCD_DrawV_Line(8,dp+7,49,'W');     LCD_DrawV_Line(8,dp+120,49,'W');     KeyVal = 0x11;     MenuLine = 0;  //当前反白显示的菜单项     TopLine = 0;   //屏幕第一行对应的菜单项     ScrLine = 0;   //反白项在屏幕上的行     //在窗口内显示前三行内容     BorW = 1; //dp = DispPosition;     for(cnt = 0;cnt<ScrCnt;cnt++)     { LCD_DisplayOneLine(1+cnt*2,dp+20,(BYTE *)(MenuTxt+cnt*ItemLen),'D',BorW,0); //第一行反白显示       BorW = 0;     }     do     { if(KB_GetStatus())         KeyVal = KB_GetValue();       else KeyVal = 0x11;              usleep(25000);       t_cnt++;       if( t_cnt == 4 ){  //间隔一秒显示:日期时间 (当时间为一个整十秒时,显示当前发票号)        GetTimeAndDate( DateTimeStr );   //2004/02/01 12:22:00        if( DateTimeStr[18]=='0'  )            DisplayInvNoStr();            //LCD_DisplayOneLine( 8, 0,InvoiceDataBuf.CurCode,'D',1,0 ); //反白显示        else        {            //LCD_DisplayOneLine( 8, 0,(unsigned char *)&DateTimeStr[11],'D',1,0 ); //反白显示            LCD_DisplayOneLine( 8, 0,(unsigned char *)&DateTimeStr[2],'D',1,0 ); //反白显示        }        t_cnt = 0;       }       if( KeyVal == 0xf0 || KeyVal == 0x11 ) continue;       //printf("\nThe KB ->%x,%d",KeyVal,cc++);       //WatchdogReset(); //Resets the watchdog timer periodically to prevent timeout.       switch (KeyVal)       {	 case K_UP:	 case K_LEFT:		if(MenuLine==0) ;  //MenuLine == 0 不动		else		{  MenuLine -= ((MenuLine-1)<0)? 0:1; //min == 0		   ScrLine -= (ScrLine==0)? 0:1;  //min == 0 本行应反白		   TopLine = (ScrLine==0)? MenuLine:TopLine;		   for(cnt=0;cnt<ScrCnt;cnt++)		   { BorW = (ScrLine==cnt)? 1:0;		     LCD_DisplayOneLine(1+cnt*2,dp+20,(BYTE *)(MenuTxt+(TopLine+cnt)*ItemLen),'D',BorW,0);		   }		}		break;	 case K_DN:   	 case K_RIGHT:		if(MenuLine == ScrLines-1) ; //MenuLine == ScrLine 不动		else		{  MenuLine += ((MenuLine+1)==ScrLines)? 0:1; //max == ScrLies		   ScrLine += (ScrLine==2)? 0:1;  //max == 2 本行应反白		   if(MenuLine>2) TopLine = MenuLine - ScrLine; //-2;		   for(cnt=0;cnt<ScrCnt;cnt++)		   { BorW = (ScrLine==cnt)? 1:0;		     LCD_DisplayOneLine(1+cnt*2,dp+20,(BYTE *)(MenuTxt+(TopLine+cnt)*ItemLen),'D',BorW,0);		   }		}		break;//     MenuLine = 0;  //当前反白显示的菜单项//     TopLine = 0;   //屏幕第一行对应的菜单项//     ScrLine = 0;   //反白项在屏幕上的行	 case K_HOME:	       if(ScrLines > 3)	       {MenuLine = 0; //max == ScrLies		ScrLine = 0;  //max == 2 本行应反白		TopLine = 0;  //-2;		for(cnt=0;cnt<ScrCnt;cnt++)		{ BorW = (ScrLine==cnt)? 1:0;		  LCD_DisplayOneLine(1+cnt*2,dp+20,(BYTE *)(MenuTxt+(TopLine+cnt)*ItemLen),'D',BorW,0);		}	       }	       break;	 case K_END:	       if(ScrLines > 3)	       {MenuLine = ScrLines-1; //max == ScrLies		ScrLine = 2;  //max == 2 本行应反白		TopLine = MenuLine - ScrLine;		for(cnt=0;cnt<ScrCnt;cnt++)		{ BorW = (ScrLine==cnt)? 1:0;		  LCD_DisplayOneLine(1+cnt*2,dp+20,(BYTE *)(MenuTxt+(TopLine+cnt)*ItemLen),'D',BorW,0);		}	       }	       break;	 case K_PGDN:	       if(ScrLines > 3)	       {if(TopLine + 3 > ScrLines - 3)		     MenuLine = ScrLines - 3;		else MenuLine = TopLine + 3; //max == ScrLies-3		ScrLine = 0;  //max == 2 本行应反白		if(MenuLine>2) TopLine = MenuLine - ScrLine; //-2;		for(cnt=0;cnt<ScrCnt;cnt++)		{ BorW = (ScrLine==cnt)? 1:0;		  LCD_DisplayOneLine(1+cnt*2,dp+20,(BYTE *)(MenuTxt+(TopLine+cnt)*ItemLen),'D',BorW,0);		}	       }	       break;	 case K_PGUP:	       if(ScrLines > 3)	       {if(TopLine - 3 < 0)  //MenuLine == 0 不动		     MenuLine = 0;		else MenuLine = TopLine - 3; //min == 0		   ScrLine = 0; //min == 0 本行应反白		   TopLine = (ScrLine==0)? MenuLine:TopLine;		   for(cnt=0;cnt<ScrCnt;cnt++)		   { BorW = (ScrLine==cnt)? 1:0;		     LCD_DisplayOneLine(1+cnt*2,dp+20,(BYTE *)(MenuTxt+(TopLine+cnt)*ItemLen),'D',BorW,0);		   }	       }	       break;         default:               break;       }             //遇到 回车/ESC键 退出      }while(!(KeyVal == K_CR || KeyVal == K_CR_1 || KeyVal == K_ESC)); //按下CR/ESC结束菜单选择     //if(NeedSaveLcd)     //{  LCD_ScreenRestore(0,0,8,16,ScrSaveMem); //恢复屏幕	// free memory     //	free(ScrSaveMem);  //释放内存     //}     if( KeyVal == K_ESC)      {  MenuLine = -1; printf("\n%s\n","User press ESC key .");     }  //按下ESC,返回-1     else	//printf("\nSelect Menu No:%d->%s\n",MenuLine,MenuTxt+MenuLine*ItemLen);     memset(d_buf,0,17);     sprintf(d_buf,"Select ITEM %d",MenuLine );     LCD44780_Display( d_buf );     return MenuLine; }//progmar startvoid Main_Menu( void ){ char  ret; int choose0,loop;  //需要时建立 /ramdisk/PosDef.ini 文件  if( kds_MakeFirstInitFile()==0 )      printf("\nTne INI file create sucesseful ! \n");  WelcomScreen();  //显示 欢迎信息  TaxStatusReadFromPosDefIni(); //从 PosDef.ini 文件读出税控状态内容  TaxStatusDisplay(); //在 状态行 显示 "税控 正常 纸卷" ......  InvoiceStructDisplay(); //显示 发票截止号,当前发票号   ShowTimeAndDate();      glb_now->tm_hour=8;	glb_now->tm_min=0; glb_now->tm_sec=0;   glb_now->tm_year=2004-START_YEAR;// linux date start at year 1900   glb_now->tm_mon=5-START_MONTH;   // 0 to 11   glb_now->tm_mday=22;		    // 1 to 31   InitDate_1(); //设置日期时间      /*  //测试   for(loop=0;loop<6;loop++) {       ShowTimeAndDate();       sleep(1);  //延时一秒   }   */   printf("Application Start up .\n"); while( 1 ) {        TaxStatusDisplay(); //在 状态行 显示 "税控 正常 纸卷" ......        choose0 = MenuDisplay((BYTE *)Menu_0,6,0);// 发送菜单并显示并得到返回值	switch ( choose0 ) {         case 0: Main_0_MenuPro(); //本机设置           	break;	   	     case 1: Main_1_MenuPro(); //商业收款         	break;   	     case 2: Main_2_MenuPro(); //税控开票           	break;         case 3: Main_3_MenuPro(); //税控功能           	break;   	     case 4: Main_4_MenuPro(); //刷银行卡           	break;   	     case 5: Main_5_MenuPro(); //退出应用           	break;  	} //end switch } //end while}int  Main_0_MenuPro( void ) { int choose0;  /*  char aa[32]; //只是为了测试函数 KB_NumStrInput()  LCD_Clear( 'W' );  LCD_DisplayOneLine(0,0,(BYTE *)"测试",'D',1,0); //反白显示  KB_NumStrInput( 0,4,10,'D',10,0,aa,1 );  */ do{  choose0 = MenuDisplay((BYTE *)Main_0_Menu,6,2);  if( choose0 == -1 ) break;  switch ( choose0 ) {   case 0: Main_0_0_MenuPro(); //系统参数           break;	   case 1: Main_0_1_MenuPro(); //网络参数           break;   case 2: //Main_0_2_MenuPro(); //商品类别           break;   case 3: //Main_0_3_MenuPro(); //商品明细           break;   case 4: Main_0_4_MenuPro(); //税控参数 TaxCtrl.c           break;   case 5: //Main_0_5_MenuPro(); //设银联卡           break;  }//end switch }while(1); return 0;} int  Main_0_0_MenuPro( void ) { int choose0; do{   choose0 = MenuDisplay((BYTE *)Main_0_0_Menu,6,8);  if( choose0 == -1 ) break;  switch ( choose0 ) {   case 0: //Main_0_0_0_MenuPro(); //设串口参数 Ex:COM1-9600,n,8,1;COM2-115200,n,8,1           break;	   case 1: //Main_0_0_1_MenuPro(); //设备与串口 Ex:COM1-Modem,COM2-PinPad,COM3-...           break;   case 2: //Main_0_0_2_MenuPro(); //热敏打印机 Ex:有/无           break;   case 3: //Main_0_0_3_MenuPro(); //税控打印机 Ex:EPSON/Star/...           break;   case 4: //Main_0_0_4_MenuPro(); //调整电子钟            break;   case 5: //Main_0_0_5_MenuPro(); //设置调试态 //将COM_0设置/取消 debug status           break;  }//end switch }while(1); return 0;} int  Main_0_1_MenuPro( void ) { int choose0; do{  choose0 = MenuDisplay((BYTE *)Main_0_1_Menu,4,8);  if( choose0 == -1 ) break;  switch ( choose0 ) {   case 0: //Main_0_1_0_MenuPro(); //设置本机地址 Ex:192.168.0.100           break;	   case 1: //Main_0_1_1_MenuPro(); //设置网络掩码 Ex:255.255.255.0           break;   case 2: //Main_0_1_0_MenuPro(); //设置网关地址            break;	   case 3: //Main_0_1_1_MenuPro(); //设代理服务器            break;  }//end switch }while(1); return 0;}/*struct tm{int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int tm_year;int tm_wday;int tm_yday;int tm_isdst;};*/ //商业收款int  Main_1_MenuPro( void )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -