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

📄 main1.c

📁 该程序是医院用的CPCR记录仪的终端控制程序
💻 C
字号:
#include <iom16v.h>
#include <macros.h>
#include <stdio.h>
#include <eeprom.h>
#include "main.h"
#include "ds1302.h"
#include "lcd1.h"
#include "MfRc500.h"
#include "at45db161.h"
#include "keyboard.h"
unsigned char alarm_flag=0;         // for 1 is alarm, for 0 is no alarm
unsigned char optionmode;
unsigned char cardcounter;
unsigned char key_pw[6];
unsigned char oldkey_pw[6];
unsigned char code_type;
unsigned char second_flag;
unsigned char ledcount;
unsigned char idil_time;
unsigned char mode;
unsigned char time_data[7];
unsigned char RxHead1;
unsigned char sio1_flag;
unsigned char head1;
unsigned char RxHead0;
unsigned char sio0_flag;
unsigned char head0;
unsigned char flash_ledflag;
unsigned char displaycount;
unsigned char old_snr[4];
unsigned char snr[4];
unsigned char size;
unsigned char passflag;
unsigned char password1;

void init_par(void)
{
// 	   unsigned char ll;
// 	   CLEAR_CLK();
//	   CLEAR_RST();
//	   ll=EEPROMread(DS1302_FLAG);
//	   if(ll==0xFF)
//	   {
//	   time_data[0]=0x48;
//	   time_data[1]=0x45;
//	   time_data[2]=0x17;
//	   time_data[3]=0x13;
//	   time_data[4]=0x12;
//	   time_data[5]=0x06;
//	   time_data[6]=0x03;
//	   Set_1302(time_data);
//	   EEPROMwrite(DS1302_FLAG,0x05);
//	   }
//	   else
	   W_1302(0x80,0x00);
	   Set_charge();
   
}
void timer1_init(void)
{
 	 TCCR1B = 0x00; //stop
 	 TCNT1H = 0x4C; //setup
 	 TCNT1L = 0x01;
 	 TCCR1A = 0x00;
 	 TCCR1B = 0x02; //start Timer
}
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 TCNT0 = 0x8D; //set count
 OCR0  = 0x73;  //set compare
 TCCR0 = 0x03; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
 TCNT0 = 0x8D; //reload counter value  1ms
}
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
 	 //TIMER1 has overflowed
 	 TCNT1H = 0x4C;   //reload counter high value  50ms
 	 TCNT1L = 0x01;   //reload counter low value    50ms
	 displaycount++;
	 if(displaycount>5)
	 	{
		displaycount=0;
		Get_1302(time_data);
		display_time(time_data);
		
		}
}
void beep11(void)
{
 	 unsigned int i;
	 SET_BELL();
	 for(i=0;i<65000;i++);
	 CLEAR_BELL();
}
void delay(unsigned char count)
{
 	 unsigned int i;
	 unsigned char j;
	 for(j=0;j<count;j++)
	 {
	  	for(i=0;i<65000;i++);
	 }
}
unsigned char mifare_work(void)
{
 	  unsigned char status1;	
	  unsigned char tt[2];
	  unsigned char i;
	  UCSRB=0x00;
	   
  	  status1=Mf500PiccRequest(0x52,tt);
	  if(status1!=MI_OK)
	  {
	  UCSRB=0x98;
	  return 1;
	  }
 	  status1=Mf500PiccAnticoll(0,snr);
	  if(status1!=MI_OK)
	  {
	  UCSRB=0x98;
	  return 1;
	  }
	  status1=Mf500PiccSelect(snr,&size);
	  if(status1!=MI_OK)
	  {
	  UCSRB=0x98;
	  return 1;
	  }
	  UCSRB=0x98;
	  return 0;
}
void init_val(void)
{
 	  unsigned char i;
	  if(EEPROMread(OPTION_PW)==0xff)
	  {
	   		for(i=0;i<8;i++)
			EEPROMwrite(OPTION_PW+i,0x00);
	  }
	  if(EEPROMread(OPEN_PW)==0xff)
	  {
	   		for(i=0;i<8;i++)
			EEPROMwrite(OPEN_PW+i,0x01);
	  }
	  optionmode=EEPROMread(MODE);
	  if(optionmode==0xff)
	  {
	  optionmode=0x00;
	  EEPROMwrite(MODE,0x00);
	  }
	  cardcounter=EEPROMread(CARDNUMBER);
	  if(cardcounter==0xff)
	  {
	  cardcounter=0x00;
	  EEPROMwrite(CARDNUMBER,cardcounter);
	  }
	  SET_LOCK1();
	  SET_LOCK2();
	  SET_SPK();
}
unsigned char scan_mifare(void)
{
 	unsigned char j;
	unsigned int i;
	if(!mifare_work())
		{
	 	for(i=0;i<cardcounter;i++)
	   		{
	   	 	for(j=0;j<4;j++)
			old_snr[j]=EEPROMread(CARDADDR+i*4+j);
			if(CMP_STRING(old_snr,snr,4)==0)
				{
				open_lock();
//				delay(40);
				return 0;
				}
	   		}
			return 1;
		}
		return 1;
}
void open_lock(void)
{
 	 unsigned int i;
	 CLEAR_LOCK1();                   //open first door
	 for(i=0;i<50000;i++);
	 SET_LOCK1();
	 for(i=0;i<65000;i++);
	 CLEAR_LOCK2();                   //open second door
	 for(i=0;i<50000;i++);
	 SET_LOCK2();
	 delay(40);
}
unsigned char scan_setup(void)
{
 		 	    unsigned int i;
				unsigned char status9;
				if(scankey()==0)
				{
				for(i=0;i<20000;i++);
				status9=keyvalue();
				switch(status9)
				   {
				    case 0x01:
					delay1(8);
					passflag=1;
					update_pw();
					break;
					case 0x02:
					delay(8);
					set_openmode();
					break;
					case 0x03:
					delay(8);
					clear_allcard();
					break;
					case 0x04:
					delay(8);
					set_newcard();
					break;
					case 0x05:
					delay1(8);
					passflag=0;
					update_pw();
					break;
					case 0x06:
					scan_openpw();
					break;
					default:
					break;
					}
					return 0;
				}
				return 1;
}
void update_pw(void)
{
 	 unsigned char i;
	 clear_lcd();
	 display_7();
	 delay(8);
 	 get_pw();
	 if(passflag==1)
	 password1=OPTION_PW;
	 else password1=OPEN_PW;
	 if(CMP_PW(password1)==0)
	 {
	  	clear_lcd();
		display_8();
		delay(8);
//	  	beep1();
		get_pw();
		for(i=0;i<6;i++)
		EEPROMwrite(password1+i,key_pw[i]);
		clear_lcd();
		display_9();
		delay(8);
//		beep1();
	 }
}
void set_openmode(void)
{
 	 clear_lcd();
	 display_10();
	 delay(12);
 	 if(optionmode==0)
	 {
	  	optionmode=1;
		EEPROMwrite(MODE,optionmode);
	 }
	 else
	 {
	  	 optionmode=0;
		 EEPROMwrite(MODE,optionmode);
	 }
	 clear_lcd();
	 display_11();
	 delay(8);
}
void clear_allcard(void)
{
 	 unsigned char i;
	 clear_lcd();
	 display_12();
	 delay(12);
 	 for(i=0;i<cardcounter*4;i++)
	 EEPROMwrite(CARDADDR+i,0xff);
	 cardcounter=0x00;
	 EEPROMwrite(CARDNUMBER,cardcounter);
	 clear_lcd();
	 display_13();
	 delay(12);
}
void set_newcard(void)
{
 	 unsigned char j,i,status8;
	 clear_lcd();
	 display_14();
	 delay(16);
	 while(1)
	 {
	  	status8=mifare_work();
		if(status8==0)
		break;
	 }
// 	 do{;}while(mifare_work());
	 if(cardcounter==0) 	
	 {
	 for(i=0;i<4;i++)
	 EEPROMwrite(CARDADDR+cardcounter*4+i,snr[i]);
	 cardcounter=0x01;
	 EEPROMwrite(CARDNUMBER,cardcounter);
	 clear_lcd();
	 display_15();
	 delay(12);
	 return;
//	 beep1();
	 }
	 else
	 {
	  	 for(i=0;i<cardcounter;i++)
		   {
		    for(j=0;j<4;j++)
			old_snr[j]=EEPROMread(CARDADDR+i*4+j);
			if(CMP_STRING(old_snr,snr,4)==0)
			{goto tt;}
		   }
	for(j=0;j<4;j++)
	EEPROMwrite(CARDADDR+cardcounter*4+j,snr[j]);
	cardcounter=cardcounter+1;
	EEPROMwrite(CARDNUMBER,cardcounter);
	clear_lcd();
	display_15();
	delay(12);
	return;

	tt:
	clear_lcd();
	display_16();
	delay(12);
	return;
//	beep1();
	}
}
unsigned char scan_openpw(void)
{
		if(scankey()==0)
		{
		get_pw();
		if(!CMP_PW(OPEN_PW))
		   {
//		       ledon();
			   open_lock();
			   return 0;
		   }
		return 1;
		}
		return 1;	
}
void main(void)
{
 	  unsigned char status2,status3,status4;
	  
	  unsigned int i;
 	  CLI();
	  timer1_init();
	  timer0_init();          //timer0 init
	  SET_BELL();
 	  MCUCR = 0x02;
      TIMSK=0x05;
	  GICR=0x40;
	  CLEAR_RC500RST();
      SET_RC500CS();
	  DDRA = PORTA = 0;
	  SEI();
	  displaycount=0;
	  CLEAR_LIGHT();
	  init_par();          //init ds1302
	  init_val();          //init var
	  lcd_init();          //lcd init
	  clear_lcd();
	  display_1();
	  delay(20);
	  CLEAR_BELL();
	  status2=Mf500PcdConfig();
	  if(status2==0)
	  {
	   	    clear_lcd();
	   		display_4();
	  }
	 delay(20);
//	 clear_lcd();
//	 display_3();
	 while(1)
	 {
	     if(optionmode==1)
		 {
		     scan_mifare();
		 }
	     status4=scankey();
	     if(status4==0)
	     {
		  	for(i=0;i<20000;i++);
	  		status3=keyvalue();
			if(status3==0x0b)
			{
			 	delay(8);
			 	clear_lcd();
				display_3();
				delay(8);
				get_pw();  
				if(!CMP_PW(OPTION_PW))
				{
				 		delay(8);
						clear_lcd();
				 		display_5();
						delay(8);
						while(1)
						{
						 	if(scan_setup()==0)
							break;
						}
				}
				else
				{
				 		delay(8);
						clear_lcd();
						display_6();
				}
			}
		 }
		 ;
	 status2=mifare_work();
//	 if(status2==0)
//	 {
//	 clear_lcd();
//	 display_2();
//	 }
//	 delay(20);
	 }
}

⌨️ 快捷键说明

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