📄 main._c
字号:
#include <iom128v.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"
//#include "24c01.h"
unsigned int commtimer=0;
unsigned char modemstatus=0; /*记录仪工作模式状态:0:事件录入状态 默认为0
1:手术过程记录状态
2: 记录查询状态*/
unsigned char lockkey_flag=0; //for lockkey_flag=1 lock key
unsigned char keynum=0;
unsigned char key1mode=1;
unsigned char key2mode=0;
unsigned char key3mode=0;
unsigned char key4mode=0;
unsigned char key5mode=0;
unsigned char key6mode=0;
unsigned char key7mode=0;
unsigned char key8mode=0;
unsigned char key9mode=0;
unsigned char keyamode=0;
unsigned char keybmode=0;
unsigned char even_data[11];
unsigned char timenum=1;
unsigned char record_even[9];
unsigned int alarm_time; //报警时间
unsigned char enopendoor_flag; //为1正常卡能开门,为0不能开门。
unsigned char checktime=0;
//unsigned char its_address;
unsigned int recordnumber;
unsigned char alarm_flag=0;
unsigned char zone_flag=0; // for 1 is alarm, for 0 is no alarm
unsigned char zone_flag_1=0; // for 1 is alarm, for 0 is no alarm
unsigned char optionmode=1;
unsigned char cardcounter;
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 dis_time[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 t1[7];
unsigned char t2[7];
unsigned char t3[7];
unsigned char t4[7];
unsigned char t5[7];
unsigned char t6[7];
unsigned char t7[7];
unsigned char t8[7];
unsigned char t9[7];
unsigned char t10[7];
unsigned char t11[7];
unsigned char t12[7];
unsigned char esckey[]={0,0,0,0,0,0,0,0,0,0,0,0,0};
unsigned char passflag;
unsigned char password1;
unsigned int timecounter;
unsigned char POS_number=0x03;
unsigned char botelv_flag;
unsigned char RxHead0;
unsigned char sio_flag;
unsigned char head;
unsigned char TX_BUF0[98]; //发送缓冲区数组
unsigned char RX_BUF0[12]; //接受缓冲区数组
unsigned char fc;
unsigned char beep_flag;
unsigned char beep_second;
unsigned int timer;
extern unsigned int cradserno;
unsigned char record_flag; //记录滚动改写启动标志
unsigned int rr_n;
void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x47; //set baud rate lo 9600
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x98;
}
#pragma interrupt_handler uart0_rx_isr:19
void uart0_rx_isr(void)
{
unsigned char s;
unsigned char aa;
unsigned int k;
unsigned char lll;
CLI();
s = UDR0;
if((RxHead0==0)&&(s!=2))
{
sio_flag=0;
RxHead0=0;
commtimer=0;
SEI();
return;
}
RX_BUF0[RxHead0++] = s; /* store received data in buffer */
if(RxHead0==3)
{
if(s==0x03)
{
sio_flag = 1;
RxHead0=0;
SEI();
return;
}
else
{
sio_flag=0;
RxHead0=0;
SEI();
return;
}
}
SEI();
}
void TransmitByte0( unsigned char *data,unsigned char len )
{
unsigned char ct;
while (!(UCSR0A & (1<<UDRE0)));
UDR0=0xfe;
for (ct=0;ct<len;ct++)
{
while (!(UCSR0A & (1<<UDRE0)));
UDR0 = *data++;
}
}
void TransmitByte1(unsigned char *data,unsigned char len )
{
unsigned char ct;
// while (!(UCSR0A & (1<<UDRE0)));
for (ct=0;ct<len;ct++)
{
while (!(UCSR0A & (1<<UDRE0)));
UDR0 = *data++;
}
}
void TransmitByte_1(unsigned char *data,unsigned char len )
{
unsigned char ct;
// while (!(UCSR0A & (1<<UDRE0)));
for (ct=0;ct<len;ct++)
{
while (!(UCSR1A & (1<<UDRE1)));
UDR1 = *data++;
}
}
void init_par(void)
{
unsigned char ll,i,tt;
CLEAR_CLK();
CLEAR_RST();
ll=EEPROMread(DS1302_FLAG);
if(ll==0xFF)
{
time_data[0]=0x48;
time_data[1]=0x34;
time_data[2]=0x18;
time_data[3]=0x14;
time_data[4]=0x02;
time_data[5]=0x04;
time_data[6]=0x08;
Set_1302(time_data);
EEPROMwrite(DS1302_FLAG,0x05);
}
else
W_1302(0x80,0x00);
Set_charge();
tt=EEPROMread(EVEN_FLAG);
if(tt==0xff)
{
for(i=0;i<16;i++)
EEPROMwrite(0x200+i,0x01);
// for(i=3;i<8;i++)
// EEPROMwrite(0x100+i,0x01);
EEPROMwrite(EVEN_FLAG,0xaa);
}
else ;
}
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFD; //setup
TCNT1L = 0xE5;
TCCR1A = 0x00;
TCCR1B = 0x05; //start Timer
}
void timer0_init(void) //1ms
{
TCCR0 = 0x00; //stop
// ASSR = 0x00; //set async mode
TCNT0 = 0x54; //set count
// OCR0 = 0xAC;
TCCR0 = 0x04; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:17
void timer0_ovf_isr(void)
{
// unsigned char oop;
TCNT0 = 0x54; //1ms
commtimer++;
if(commtimer>1950)
{
commtimer=0;
// WDR();
}
}
void beep(unsigned char second)
{
beep_second=second;
beep_flag=1;
CLEAR_BELL();
CLEAR_LED0();
timer=0;
}
void COMM_RX(void)
{
RxHead0=0;
sio_flag=0;
// CLEAR_LED0();
switch(RX_BUF0[1])
{
// case 0x01:
// senddata(0);
// break;
case 0x11:
setup_curtime(); //设置模块当前时间
break;
case 0x22: //采集时间记录
colle_time();
break;
case 0x33: //采集事件记录
colle_even();
break;
default:
break;
}
}
void colle_even(void)
{
unsigned char i;
for(i=0;i<12;i++)
even_data[i]=EEPROMread(0x200+i);
send_even();
beep(2);
}
void send_even(void)
{
unsigned int i;
SET_LIGHT();
TX_BUF0[0]=0x33;
TX_BUF0[1]=15;
TX_BUF0[2]=even_data[0];
TX_BUF0[3]=even_data[1];
TX_BUF0[4]=even_data[2];
TX_BUF0[5]=even_data[3];
TX_BUF0[6]=even_data[4];
TX_BUF0[7]=even_data[5];
TX_BUF0[8]=even_data[6];
TX_BUF0[9]=even_data[7];
TX_BUF0[10]=even_data[8];
TX_BUF0[11]=even_data[9];
TX_BUF0[12]=even_data[10];
TX_BUF0[13]=0x03;
TransmitByte0(TX_BUF0,14);
for(i=0;i<3800;i++);
CLEAR_LIGHT();
}
void colle_time(void)
{
unsigned int i;
TX_BUF0[0]=0x22;
TX_BUF0[1]=88;
TX_BUF0[2]=EEPROMread(1*16+0);
TX_BUF0[3]=EEPROMread(1*16+1);
TX_BUF0[4]=EEPROMread(1*16+2);
TX_BUF0[5]=EEPROMread(1*16+3);
TX_BUF0[6]=EEPROMread(1*16+4);
TX_BUF0[7]=EEPROMread(1*16+5);
TX_BUF0[8]=EEPROMread(1*16+6);
TX_BUF0[9]=EEPROMread(2*16+0);
TX_BUF0[10]=EEPROMread(2*16+1);
TX_BUF0[11]=EEPROMread(2*16+2);
TX_BUF0[12]=EEPROMread(2*16+3);
TX_BUF0[13]=EEPROMread(2*16+4);
TX_BUF0[14]=EEPROMread(2*16+5);
TX_BUF0[15]=EEPROMread(2*16+6);
TX_BUF0[16]=EEPROMread(3*16+0);
TX_BUF0[17]=EEPROMread(3*16+1);
TX_BUF0[18]=EEPROMread(3*16+2);
TX_BUF0[19]=EEPROMread(3*16+3);
TX_BUF0[20]=EEPROMread(3*16+4);
TX_BUF0[21]=EEPROMread(3*16+5);
TX_BUF0[22]=EEPROMread(3*16+6);
TX_BUF0[23]=EEPROMread(4*16+0);
TX_BUF0[24]=EEPROMread(4*16+1);
TX_BUF0[25]=EEPROMread(4*16+2);
TX_BUF0[26]=EEPROMread(4*16+3);
TX_BUF0[27]=EEPROMread(4*16+4);
TX_BUF0[28]=EEPROMread(4*16+5);
TX_BUF0[29]=EEPROMread(4*16+6);
TX_BUF0[30]=EEPROMread(5*16+0);
TX_BUF0[31]=EEPROMread(5*16+1);
TX_BUF0[32]=EEPROMread(5*16+2);
TX_BUF0[33]=EEPROMread(5*16+3);
TX_BUF0[34]=EEPROMread(5*16+4);
TX_BUF0[35]=EEPROMread(5*16+5);
TX_BUF0[36]=EEPROMread(5*16+6);
TX_BUF0[37]=EEPROMread(6*16+0);
TX_BUF0[38]=EEPROMread(6*16+1);
TX_BUF0[39]=EEPROMread(6*16+2);
TX_BUF0[40]=EEPROMread(6*16+3);
TX_BUF0[41]=EEPROMread(6*16+4);
TX_BUF0[42]=EEPROMread(6*16+5);
TX_BUF0[43]=EEPROMread(6*16+6);
TX_BUF0[44]=EEPROMread(7*16+0);
TX_BUF0[45]=EEPROMread(7*16+1);
TX_BUF0[46]=EEPROMread(7*16+2);
TX_BUF0[47]=EEPROMread(7*16+3);
TX_BUF0[48]=EEPROMread(7*16+4);
TX_BUF0[49]=EEPROMread(7*16+5);
TX_BUF0[50]=EEPROMread(7*16+6);
TX_BUF0[51]=EEPROMread(8*16+0);
TX_BUF0[52]=EEPROMread(8*16+1);
TX_BUF0[53]=EEPROMread(8*16+2);
TX_BUF0[54]=EEPROMread(8*16+3);
TX_BUF0[55]=EEPROMread(8*16+4);
TX_BUF0[56]=EEPROMread(8*16+5);
TX_BUF0[57]=EEPROMread(8*16+6);
TX_BUF0[58]=EEPROMread(9*16+0);
TX_BUF0[59]=EEPROMread(9*16+1);
TX_BUF0[60]=EEPROMread(9*16+2);
TX_BUF0[61]=EEPROMread(9*16+3);
TX_BUF0[62]=EEPROMread(9*16+4);
TX_BUF0[63]=EEPROMread(9*16+5);
TX_BUF0[64]=EEPROMread(9*16+6);
TX_BUF0[65]=EEPROMread(10*16+0);
TX_BUF0[66]=EEPROMread(10*16+1);
TX_BUF0[67]=EEPROMread(10*16+2);
TX_BUF0[68]=EEPROMread(10*16+3);
TX_BUF0[69]=EEPROMread(10*16+4);
TX_BUF0[70]=EEPROMread(10*16+5);
TX_BUF0[71]=EEPROMread(10*16+6);
SET_LIGHT();
TX_BUF0[72]=EEPROMread(11*16+0);
TX_BUF0[73]=EEPROMread(11*16+1);
TX_BUF0[74]=EEPROMread(11*16+2);
TX_BUF0[75]=EEPROMread(11*16+3);
TX_BUF0[76]=EEPROMread(11*16+4);
TX_BUF0[77]=EEPROMread(11*16+5);
TX_BUF0[78]=EEPROMread(11*16+6);
TX_BUF0[79]=EEPROMread(12*16+0);
TX_BUF0[80]=EEPROMread(12*16+1);
TX_BUF0[81]=EEPROMread(12*16+2);
TX_BUF0[82]=EEPROMread(12*16+3);
TX_BUF0[83]=EEPROMread(12*16+4);
TX_BUF0[84]=EEPROMread(12*16+5);
TX_BUF0[85]=EEPROMread(12*16+6);
TX_BUF0[86]=0x03;
TransmitByte0(TX_BUF0,87);
for(i=0;i<3800;i++);
CLEAR_LIGHT();
}
void setup_curtime(void)
{
unsigned char i;
// for(i=0;i<7;i++)
// time_data[6-i]=RX_BUF0[5+i];
// Set_1302(time_data);
// senddata(0);
}
void senddata(unsigned char flag)
{
unsigned int i;
TX_BUF0[5]=0xfe;
TX_BUF0[0]=1;
TX_BUF0[1]=0;
TX_BUF0[2]=9;
TX_BUF0[3]=RX_BUF0[4];
TX_BUF0[4]=flag;
SET_LIGHT();
for(i=0;i<5;i++)
TX_BUF0[5]=TX_BUF0[5]^TX_BUF0[i];
TX_BUF0[6]=0xf9;
TX_BUF0[7]=0xfd;
TransmitByte0(TX_BUF0,8);
for(i=0;i<3800;i++);
CLEAR_LIGHT();
}
#pragma interrupt_handler timer1_ovf_isr:15
void timer1_ovf_isr(void)
{
//TIMER1 has overflowed
TCNT1H = 0xFD; //reload counter high value 50ms
TCNT1L = 0xE5; //reload counter low value 50ms
displaycount++;
timecounter++;
timer++;
if(displaycount>34)
{
displaycount=0;
// WDR();
}
checktime++; //报警检查时间
if(checktime>2)
{
checktime=0;
alarm_time++;
if(alarm_time>300)
{
alarm_flag=0;
SET_SDA(); //高电平清除报警
}
if(zone_flag==1)
{
if((PIND&0x01)==0x00)
{
alarm_flag=1;
CLEAR_SDA(); //报警输出低电平有效。
alarm_time=0;
}
else
;
}
else
{
alarm_flag=0;
SET_SDA();
}
}
if(timer>2)
{
if(beep_second==0)
{
SET_BELL();
SET_LED0();
timer=0;
}
else
{
if(beep_flag==1)
{
SET_BELL();
SET_LED0();
beep_flag=0;
}
else
{
CLEAR_BELL();
CLEAR_LED0();
beep_flag=1;
}
timer=0;
beep_second--;
}
}
}
void beep11(void)
{
unsigned int i;
CLEAR_BELL();
for(i=0;i<65000;i++);
SET_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 int value_time(unsigned char hour,unsigned char minutes)
{
unsigned int data;
unsigned int timedata,timedata1;
timedata=(hour/16)*10+hour%16;
timedata1=(minutes/16)*10+minutes%16;
data=timedata*60+timedata1;
return data;
}
void setup_time(void)
{
display_setuptime();
delay(20);
update_time();
// timecounter=0;
while(1)
{
if(u_year()==1)return;
if(u_month()==1)return;
if(u_day()==1)return;
if(u_week()==1)return;
if(u_hour()==1)return;
if(u_minute()==1)return;
u_second();
delay(12);
return;
}
}
unsigned char readxinghaokey(void)
{
unsigned char status4,ttt3,status3;
unsigned int i;
status4=scankey();
if(status4==0)
{
for(i=0;i<10000;i++);
status3=keyvalue();
if(status3==0x0a)
{
while(1)
{
ttt3=keyvalue();
if(status3!=ttt3)break;
}
return 0;
}
else
{
return 1;
}
}
}
unsigned char readnumberkey(void)
{
unsigned char status4,ttt3,status3;
unsigned int i;
status4=scankey();
if(status4==0)
{
for(i=0;i<10000;i++);
status3=keyvalue();
if(status3==0x0a);
else
{
while(1)
{
ttt3=keyvalue();
if(status3!=ttt3)break;
}
return status3;
}
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -