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

📄 appmain.c

📁 基于单片机的SIM卡类CPU卡读写器源代码
💻 C
字号:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <api.h>
//#include <memcard.h>
#include <ExEH0218.h>

#include "Health.h"
//#include "ExEH0218.h"

#define	POWER_DELAY		4		//	开机按电源键延时1秒
#define MENU_COUNT		4


//#define FLASH_ADDR		((char*)0xA0000)

NVVAR(char first_run);
NVVAR(unsigned long kb_mask);
NVVAR(unsigned long el_mask);
NVVAR(unsigned int ac_time);
NVVAR(unsigned int el_time);

NVARR(char PosId[8]);

void main()
{
  	int kind, first,light=0;
  	GETSTR_PARAM gs;
  	typ_RTC_date_rec rdr;
   	const char mmenu[8*16+2] = "1.DEMOGRAHICINFO2.HEALTH SUMMARY3.RELATIVES     4.INSURANCES    5.PHYSICIANS    6.POS ID        7.SYSTEM TIME   8.SYSTEM SETUP  ";
 		const char mmenu2[2*16+2] = "1.Set POSid     2.Set Time      ";   
  	unsigned char distmp[500],tmpstr[500],AscTime[60],tmp[30],Card_Read_Buff[256],tmpasc[10];
		int		ret;
		BROWINFO	bi,bi1;
		char hour,minute,second;
		char month,day;
		int  year;
	
	if (NVRAM_invalid()||first_run!='Q')
	{	// nvram init
		first_run = 'Q';
		//logo = 0;
		ac_time = 30;
		el_time = 5;
		kb_mask = 0x00007fff;
		el_mask = 0x00007fff;
	}
	KEY_init(KEY_BEEP_KEY|KEY_AUTO_EL_ON);
	Disp_icon_customize(DISP_ICON_C_BATTERY);
	set_LCD_contrast( 30 );

REBOOT:

	Disp_icon_customize(DISP_ICON_C_BATTERY);
	sm_setting(MSK_KEY_UP|MSK_KEY_DOWN);
	EL_set_time_out(el_time);

	kb_mask = 0x00007fff;
	el_mask = 0x00007fff; //
	KEY_beep_mask_set(kb_mask);
	KEY_EL_mask_set(el_mask);
	Disp_init(DISP_INIT_ON);

	if ( Refresh_Battery()<2 )
	{
		DispStr_E(0,2,"Power Low",DISP_CENTER|DISP_CLRSCR);
		DispStr_E(0,4,"Please Charging",DISP_CENTER);
    delay_and_wait_key( 0, EXIT_KEY_ALL, 0 );
	}

	/*if ( Refresh_Battery()<2 )
	{
		DispStr_CE(0,2,"low voltage",DISP_CENTER|DISP_CLRSCR);
		DispStr_CE(0,4,"Please charging",DISP_CENTER);
		delay_and_wait_key( 2, 0, 0 );
	}*/

	DispStr_E(0,1,"Welcome",DISP_CENTER|DISP_CLRSCR);
	DispStr_E(0,3,"Healthmeans",DISP_CENTER);
	DispStr_E(0,5,"POS System V1.0",DISP_CENTER);
	delay_and_wait_key( 5, EXIT_KEY_ALL, 0 );

	KEY_read();
	//init_db();
	//chk_sys_db_format(); //must read the database parameter here and check the database format

	bi.lPtr = bi.cPtr = 0;
	while(1)
	{
		 
		clr_scr();					//	clear screen
		bi.iStr = (char *)mmenu;
		bi.mInt = 8;
		bi.lineMax = 16;
		bi.sFont = 0;
		bi.numEnable = 1; 				
		bi.startLine = 0;
		bi.dispLines = 4;
		bi.qEvent = EXIT_KEY_POWER|EXIT_AUTO_QUIT|EXIT_KEY_F3;		//	Enter[F3]and [POWER] exit
		bi.autoexit = 30;				//	30s auto power off  
		kind = brow_select( &bi );		//	显示主菜单
		switch(kind)
		{
		   case 0: 
		   		Personal_info();
		   		break; 		// PERSONAL INFORMATION
		   case 1: 
					Health_sum();		//HEALTH SUMMARY
					break;
		   case 2:
					Relatives();		//RELATIVES
					break;
		   case 3: 
					Insurances();
		   		break; 		// INSURANCES
		   case 4: 
		   		Physicians();
					break; 		// PHYSICIANS
		  
		   case 5: 
					
					DispStr_E(0,1,"POS ID:",DISP_CENTER|DISP_CLRSCR);
					memset(tmpstr,0,9);
					memcpy(tmpstr,PosId,8);
					DispStr_E(0,3,tmpstr,DISP_CENTER);
					delay_and_wait_key( 10, EXIT_KEY_ALL, 0 );
		   		break; 		
		   case 6: 
					rdr.l_word = RTC_read_date();
					memset(AscTime,0,sizeof(AscTime));
					sprintf(AscTime,"%02d/%02d/%04d",rdr.fields.month,rdr.fields.day,rdr.fields.year);	
					DispStr_E(0,1,"System Time",DISP_CENTER|DISP_CLRSCR);
					DispStr_E(0,3,AscTime,DISP_CENTER);
					delay_and_wait_key( 5, EXIT_KEY_ALL, 0 );
					break; 		
		  case 7: 
		 			DispStr_E(0,0,"Please Select",DISP_POSITION|DISP_CLRSCR);
					bi1.iStr = (char *)mmenu2;
					bi1.mInt = 2;
					bi1.lineMax = 16;
					bi1.sFont = 0;
					bi1.lPtr = 0;
					bi1.cPtr = 0;
					bi1.startLine = 1;
					bi1.dispLines = 3;
					bi1.numEnable = 1;
					bi1.autoexit = 10;
					bi1.qEvent = EXIT_KEY_F1;
					for ( ; ; )
					{
	    			ret = brow_select( &bi1 );
						if( bi1.qEvent == EXIT_KEY_F1 ) 
						break;
						switch(ret)
						{
							case 0:
								DispStr_E(0,1,"Enter 8bit ID:",DISP_CENTER|DISP_CLRSCR);
								gs.qx = 0;
								gs.qy = 4;				//	在第2行输入
								gs.alpha = 0;			//	不允许字符输入
								gs.nullEnable = 0;		//	不允许输入空字符串
								gs.sFont = 0;			//	7x9大字体
								gs.pPrompt = "";	//	提示语句
								gs.csChar = '_';			//	光标字符'_'
								gs.pwChar = 0;
								gs.spChar = 1;			//	不允许分隔字符
								gs.pStr = PosId;		//	输入字符串放在中
								gs.maxNum = 8;			//	最多允许6个字符
								gs.minNum = 6;			//	最少必须1个字符
								gs.minValue = -1;		//	最小值
								gs.maxValue = -1;		//	最大值
								gs.retNum =0;			//	无初始值
								gs.autoexit = 0;			//	30秒无按键自动退出
								gs.qEvent = EXIT_KEY_F1|EXIT_AUTO_QUIT;		//	默认按[F1]及无按键自动退出
								ret = huGetStr_E(&gs);
								if(!ret)		DispStr_E(0,1,"Setup ID success",DISP_CENTER|DISP_CLRSCR);
								else
								{
										DispStr_E(0,1,"Setup ID Failed",DISP_CENTER|DISP_CLRSCR);
										Alarm();
								}
								delay_and_wait_key( 5, EXIT_KEY_ALL, 0 );
								break;
							case 1:
		   					DispStr_E(0,0,"Plesde Set Time",DISP_CENTER|DISP_CLRSCR);
								DispStr_E(0,2,"mmddyyhhmmss",DISP_CENTER);
								gs.qx = 0;
								gs.qy = 4;				//	在第2行输入
								gs.alpha = 0;			//	不允许字符输入
								gs.nullEnable = 0;		//	不允许输入空字符串
								gs.sFont = 0;			//	7x9大字体
								gs.pPrompt = "";	//	提示语句
								gs.csChar = '_';			//	光标字符'_'
								gs.pwChar = 0;
								gs.spChar = 1;			//	不允许分隔字符
								gs.pStr = tmp;		//	输入字符串放在中
								gs.maxNum = 12;			//	最多允许6个字符
								gs.minNum = 12;			//	最少必须1个字符
								gs.minValue = -1;		//	最小值
								gs.maxValue = -1;		//	最大值
								gs.retNum =0;			//	无初始值
								gs.autoexit = 0;			//	30秒无按键自动退出
								gs.qEvent = EXIT_KEY_F1|EXIT_AUTO_QUIT;		//	默认按[F1]及无按键自动退出
								ret = huGetStr_E(&gs);
								if(ret)	
								{
									DispStr_E(0,1,"Set Time Failed",DISP_CENTER|DISP_CLRSCR);	
									Alarm();
								}
								else
								{
										typ_RTC_date_rec devicedate;
										char devicemonth,deviceday;			
										int deviceyear;
										DispStr_E(0,1,"Set Time success",DISP_CENTER|DISP_CLRSCR);
																				
										month=(tmp[0]-'0')*10+(tmp[1]-'0');
										day=(tmp[2]-'0')*10+(tmp[3]-'0');
										year=(tmp[4]-'0')*10+(tmp[5]-'0')+2000;
										hour=(tmp[6]-'0')*10+(tmp[7]-'0');
										minute=(tmp[8]-'0')*10+(tmp[9]-'0');
										second=(tmp[10]-'0')*10+(tmp[11]-'0');
										
										if(RTC_set_date(MAKE_DATE(year,month,day))==-1)
										{
			    						DispStr_CE(0,6,"MAKE_DATE error",DISP_CENTER|DISP_CLRSCR);
   										Alarm();
		        					delay_and_wait_key( 2, 0, 0 );
		        					break;
										}
										if(RTC_set_time(MAKE_TIME(hour, minute, second)) == -1)
										{
											;//dt_DetectStatus(MSG_-1);
											DispStr_CE(0,6,"MAKE_TIME error",DISP_CENTER|DISP_CLRSCR);
   										Alarm();
		        					delay_and_wait_key( 2, 0, 0 );
		        					break;
										}else  
										{
											typ_RTC_time_rec Current_Time;
											Current_Time.l_word = RTC_read_time();
											Disp_7_SEG_Time(Current_Time.fields.hour, Current_Time.fields.minute);
											//refresh_icon();
										}	
								}
								delay_and_wait_key( 5, EXIT_KEY_ALL, 0 );
								break;
								default:
									break;
						}
						//data_transmit();
						break;
					}	
					break; 
 	
	   	default:
					ICC_interface_power(ICC_POWER_OFF);
					UART_init(UART_OFF);	
	   			if (bi.qEvent==EXIT_KEY_POWER||bi.qEvent==EXIT_AUTO_QUIT)
					{
						Halt_EH0218(POWER_DELAY);			//	Power off
						goto REBOOT;
					}
					else if ( bi.qEvent==EXIT_KEY_F3 )		//	Enter [F3] show edition
					{			
						//DispStr_CE(0,1,"Welcome",DISP_CENTER|DISP_CLRSCR);
						DispStr_E(0,1,"HEALTHMEANS",DISP_CENTER|DISP_CLRSCR);
						DispStr_E(0,3,"POS System V3.0",DISP_CENTER);
						DispStr_E(0,5,"06/2006 by zyh",DISP_CENTER);
						delay_and_wait_key( 20, EXIT_KEY_ALL, 0 );
			
					}
			}//end switch 
   }//end while
     	
}  

//======================================================================















⌨️ 快捷键说明

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