case 0x1100://准备工作按钮原来 Key_return = 256 * data_buffer[processed_data][3] + data_buffer[processed_data][4]; switch(Key_return) {
case 0x01:
relay2();
//hongguang();
//B_LE50;
//delay_ns(1000);//调整PWM波形占空比
//B_LE51;
//B_LE61;
//B_LE71;
//F_LE01;
//F_LE11;
hongguang1();
//readdata();
//Treat_Time13.data = Treat_Time3.data;
//Watchdog_init();
//Delay1();
//zhongduan();
PWM0();
//system_init();
break;
case 0x02:
DisPage(2);
DisWorkPage();
DisCopyArea(2,20,185,95,405,20,185,0x01,0x01);
DisCopyArea(2,95,185,160,405,95,185,0x02,0x01);
DisCopyArea(2,170,185,230,405,170,185,0x03,0x01);
DisCopyArea(2,240,185,300,400,240,185,0x04,0x01);
DisCopyArea(2,305,185,365,400,305,185,0x05,0x01);
EEPROM_write(0x01,0x00);
EEPROM_write(0x02,0x00);
EEPROM_write(0x03,0x00);
EEPROM_write(0x04,0x00);
EEPROM_write(0x05,0x00);
break;
case 0x03:
DisPage(1);
DisWorkPage();
system_init();
PWM1();
PWM2();
DisCopyArea(2,20,185,95,405,20,185,0x01,0x01);
DisCopyArea(2,95,185,160,405,95,185,0x02,0x01);
DisCopyArea(2,170,185,230,405,170,185,0x03,0x01);
DisCopyArea(2,240,185,300,400,240,185,0x04,0x01);
DisCopyArea(2,305,185,365,400,305,185,0x05,0x01);
EEPROM_write(0x01,0x00);
EEPROM_write(0x02,0x00);
EEPROM_write(0x03,0x00);
EEPROM_write(0x04,0x00);
EEPROM_write(0x05,0x00);
Treat_Time1.data = 0;
Treat_TimeA1.data = 0;
Treat_Time2.data = 0;
Treat_Time3.data = 0;
SetDisPara(Treat_Time1);
SetDisPara(Treat_TimeA1);
SetDisPara(Treat_Time2);
SetDisPara(Treat_Time3);
break;
case 0x04:
DisCopyArea(5,20,185,95,405,20,185,0x01,0x01);
EEPROM_write(0x01,0x01);
//writedata();
//continue;
//return ;
//goto H;
//flag1=1;
break;
case 0x05:
DisCopyArea(5,95,185,160,405,95,185,0x02,0x01);
EEPROM_write(0x02,0x01);
//writedata();
//continue;
//return;
//goto H;
//flag2=1;
break;
case 0x06:
DisCopyArea(5,170,185,230,405,170,185,0x03,0x01);
EEPROM_write(0x03,0x01);
//writedata();
//continue;
//return;
//goto H;
//flag3=1;
break;
case 0x07:
DisCopyArea(5,240,185,300,400,240,185,0x04,0x01);
EEPROM_write(0x04,0x01);
//writedata();
//continue;
//return;
//goto H;
//flag4=1;
break;
case 0x08:
DisCopyArea(5,305,185,365,400,305,185,0x05,0x01);
EEPROM_write(0x05,0x01);
//writedata();
//continue;
//return;
//goto H;
//flag5=1;
break;
case 0x09:
relay3();
ziwai1();
PWM0();
//ziwai();
//PWM1();
//system_init();
break;
case 0x10:
DisPage(3);
DisWorkPage();
DisCopyArea(3,30,185,95,405,30,185,0x01,0x02);
DisCopyArea(3,100,185,165,400,100,185,0x02,0x02);
DisCopyArea(3,170,180,235,400,170,180,0x03,0x02);
DisCopyArea(3,240,185,300,400,240,185,0x04,0x02);
DisCopyArea(3,305,185,365,400,305,185,0x05,0x02);
EEPROM_write(0x01,0x00);
EEPROM_write(0x02,0x00);
EEPROM_write(0x03,0x00);
EEPROM_write(0x04,0x00);
EEPROM_write(0x05,0x00);
break;
case 0x11:
DisPage(1);
DisWorkPage();
system_init();
PWM1();
PWM2();
DisCopyArea(3,30,185,95,405,30,185,0x01,0x02);
DisCopyArea(3,100,185,165,400,100,185,0x02,0x02);
DisCopyArea(3,170,180,235,400,170,180,0x03,0x02);
DisCopyArea(3,240,185,300,400,240,185,0x04,0x02);
DisCopyArea(3,305,185,365,400,305,185,0x05,0x02);
EEPROM_write(0x01,0x00);
EEPROM_write(0x02,0x00);
EEPROM_write(0x03,0x00);
EEPROM_write(0x04,0x00);
EEPROM_write(0x05,0x00);
Treat_Time4.data = 0;
Treat_TimeB1.data = 0;
Treat_Time5.data = 0;
Treat_Time6.data = 0;
SetDisPara(Treat_Time4);
SetDisPara(Treat_Time5);
SetDisPara(Treat_Time6);
SetDisPara(Treat_TimeB1);
break;
case 0x12:
DisCopyArea(5,30,185,95,405,30,185,0x01,0x02);
EEPROM_write(0x01,0x01);
break;
case 0x13:
DisCopyArea(5,100,185,165,400,100,185,0x02,0x02);
EEPROM_write(0x02,0x01);
break;
case 0x14:
DisCopyArea(5,170,180,235,400,170,180,0x03,0x02);
EEPROM_write(0x03,0x01);
break;
case 0x15:
DisCopyArea(5,240,185,300,400,240,185,0x04,0x02);
EEPROM_write(0x04,0x01);
break;
case 0x16:
DisCopyArea(5,305,185,365,400,305,185,0x05,0x02);
EEPROM_write(0x05,0x01);
break;
case 0x17:
relay1();
hongwai1();
PWM0();
//hongwai();
//system_init();
break;
case 0x18:
DisPage(4);
DisWorkPage();
DisCopyArea(4,30,185,95,405,30,185,0x01,0x03);
DisCopyArea(4,100,185,165,400,100,185,0x02,0x03);
DisCopyArea(4,170,180,235,400,170,180,0x03,0x03);
DisCopyArea(4,240,185,300,400,240,185,0x04,0x03);
DisCopyArea(4,305,185,365,400,305,185,0x05,0x03);
EEPROM_write(0x01,0x00);
EEPROM_write(0x02,0x00);
EEPROM_write(0x03,0x00);
EEPROM_write(0x04,0x00);
EEPROM_write(0x05,0x00);
break;
case 0x19:
DisPage(1);
DisWorkPage();
system_init();
PWM1();
PWM2();
DisCopyArea(4,30,185,95,405,30,185,0x01,0x03);
DisCopyArea(4,100,185,165,400,100,185,0x02,0x03);
DisCopyArea(4,170,180,235,400,170,180,0x03,0x03);
DisCopyArea(4,240,185,300,400,240,185,0x04,0x03);
DisCopyArea(4,305,185,365,400,305,185,0x05,0x03);
EEPROM_write(0x01,0x00);
EEPROM_write(0x02,0x00);
EEPROM_write(0x03,0x00);
EEPROM_write(0x04,0x00);
EEPROM_write(0x05,0x00);
Treat_Time7.data = 0;
Treat_TimeC1.data = 0;
Treat_Time8.data = 0;
Treat_Time9.data = 0;
SetDisPara(Treat_Time7);
SetDisPara(Treat_Time8);
SetDisPara(Treat_Time9);
SetDisPara(Treat_TimeC1);
break;
case 0x20:
DisCopyArea(6,30,185,95,405,30,185,0x01,0x03);
EEPROM_write(0x01,0x01);
break;
case 0x21:
DisCopyArea(6,100,185,165,400,100,185,0x02,0x03);
EEPROM_write(0x02,0x01);
break;
case 0x22:
DisCopyArea(6,170,180,235,400,170,180,0x03,0x03);
EEPROM_write(0x03,0x01);
break;
case 0x23:
DisCopyArea(6,240,185,300,400,240,185,0x04,0x03);
EEPROM_write(0x04,0x01);
break;
case 0x24:
DisCopyArea(6,305,185,365,400,305,185,0x05,0x03);
EEPROM_write(0x05,0x01);
break;
}
break;
case 0x1110://准备工作按钮原来
Key_return = 256 * data_buffer[processed_data][3] + data_buffer[processed_data][4];
switch(Key_return)
{
case 0x01:
DisPage(2);
DisWorkPage();
//system_init();
PWM1();
EEPROM_write(0xFF,0x01);
r = 2;
//Delay1();
//EEPROM_write(0xD0,0x01);
//EEPROM_read(0xD0);
//Watchdog_init();
//Delay1();
break;
case 0x03:
DisPage(2);
DisWorkPage();
break;
case 0x04:
DisPage(2);
DisWorkPage();
PWM1();
break;
case 0x05:
DisPage(3);
DisWorkPage();
PWM1();
break;
case 0x08:
DisPage(3);
DisWorkPage();
PWM1();
break;
case 0x09:
DisPage(4);
DisWorkPage();
PWM1();
break;
case 0x12:
DisPage(4);
DisWorkPage();
PWM1();
break;
}
break;
case 0x1200://准备工作按钮原来
Key_return = 256 * data_buffer[processed_data][3] + data_buffer[processed_data][4];
switch(Key_return)
{
}
case 0x1300://准备工作按钮原来
Key_return = 256 * data_buffer[processed_data][3] + data_buffer[processed_data][4];
switch(Key_return)
{
case 0x01:
break;
case 0x02:
DisPage(4);
DisWorkPage();
break;
case 0x03:
DisPage(1);
DisWorkPage();
system_init();
break;
case 0x04:
// DisPage(8);
// DisWorkPage();
break;
}
default:
break;
}
if(processed_data < 10)
processed_data ++;
else
processed_data = 0;
}
}
/************************************************ 从某个页面上复制一部分显示在当前页面坐标上; 参数1:页面号; 参数2:复制部分的左上角X坐标; 参数3:复制部分的左上角y坐标; 参数4:复制部分的右下角X坐标; 参数5:复制部分的右下角y坐标;; 参数6:显示位置的左上角x坐标; 参数7:显示位置的左上角y坐标; ************************************************/ void DisCopyArea(uchar p_id,ushort l_x,ushort l_y,ushort r_x,ushort r_y,ushort x,ushort y,uchar ad_H,uchar ad_L) { unsigned char data[26] = {0x12,0x34,0x17,0x82, 0x15,0x00, 0x00,0x06, 0x00,0x02, 0x00,0x01, 0x00,0x00, 0x00,0x00, 0x00,0x64, 0x00,0x64, 0x00,0x00, 0x00,0x00, 0xFF,0x00};
data[4] = ad_H; data[5] = ad_L;
data[11] = p_id;
data[12] = (uchar)((l_x * EIGHT_SWITCH) >> 8); data[13] = (uchar)(l_x * EIGHT_SWITCH);
data[14] = (uchar)((l_y * EIGHT_SWITCH)>> 8); data[15] = (uchar)(l_y * EIGHT_SWITCH);
data[16] = (uchar)((r_x * EIGHT_SWITCH) >> 8); data[17] = (uchar)(r_x * EIGHT_SWITCH);
data[18] = (uchar)((r_y * EIGHT_SWITCH) >> 8); data[19] = (uchar)(r_y * EIGHT_SWITCH);
data[20] = (uchar)((x * EIGHT_SWITCH) >> 8); data[21] = (uchar)(x * EIGHT_SWITCH);
data[22] = (uchar)((y * EIGHT_SWITCH)>> 8); data[23] = (uchar)(y * EIGHT_SWITCH); TxArrayUart1(data,26); }
/************************************************ 显示指定页面,参数:页面号 / void DisPage(uint p_id) { unsigned char data[7] = {0x12,0x34,0x04,0x80,0x03,0x00,0x00}; data[5] = (unsigned char)(p_id >> 8); data[6] = (unsigned char)(p_id); TxArrayUart1(data,7); //last_page = p_id; } / 批量初始化屏幕上的显示参数。 参数1:指向需要初始化的参数数组的指针。 参数2:需要初始化的参数数组长度。 参数3:需要初始化的参数的起始地址。 ************************************************/ void SetDisString(struct para_string string) { unsigned char i = 0; char send_data[40] = {0x12, 0x34, 0x05, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; send_data[4] = (uchar)(string.address >> 8); send_data[5] = (uchar)(string.address);
while(string.data[i] != 0) { send_data[6+i] = string.data[i]; i++; }
send_data[2] = 3+i;
TxArrayUart1(send_data,6+i);
}
/************************************************ 批量初始化屏幕上的显示参数。 参数1:指向需要初始化的参数数组的指针。 参数2:需要初始化的参数数组长度。 参数3:需要初始化的参数的起始地址。 ************************************************/ void SetDisPara(struct para input_para) { unsigned int i; unsigned char send_data[10] = {0x12, 0x34, 0x05, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; send_data[4] = (uchar)(input_para.address >> 8); send_data[5] = (uchar)(input_para.address);
if(input_para.type) //如果为长整形;
{
send_data[2] = 7;
send_data[6] = (unsigned char)(input_para.data >> 24);
send_data[7] = (unsigned char)(input_para.data >> 16);
send_data[8] = (unsigned char)(input_para.data >> 8);
send_data[9] = (unsigned char)(input_para.data);
TxArrayUart1(send_data,10);
}
else
{
send_data[2] = 5;
send_data[6] = (unsigned char)(input_para.data >> 8);
send_data[7] = (unsigned char)(input_para.data);
TxArrayUart1(send_data,8);
}
}
void InitPara(void) { unsigned char i = 0;
//Treat_Time.address = 0x01; // Treat_Time.type = 0;
Treat_Time1.address = 0x01; Treat_Time1.type = 0;
Treat_Time2.address = 0x02; Treat_Time2.type = 0;
Treat_TimeA1.address = 0xA1; Treat_TimeA1.type = 0;
Treat_Time3.address = 0x03; Treat_Time3.type = 0;
Treat_Time4.address = 0x04; Treat_Time4.type = 0;
Treat_TimeB1.address = 0xB1; Treat_TimeB1.type = 0;
Treat_Time5.address = 0x05; Treat_Time5.type = 0;
Treat_Time6.address = 0x06; Treat_Time6.type = 0;
Treat_Time7.address = 0x07; Treat_Time7.type = 0;
Treat_TimeC1.address = 0xC1; Treat_TimeC1.type = 0; Treat_Time8.address = 0x08; Treat_Time8.type = 0;
Treat_Time9.address = 0x09; Treat_Time9.type = 0;
Treat_Time10.address = 0x10; Treat_Time10.type = 0;
Treat_Time11.address = 0x11; Treat_Time11.type = 0;
Treat_Time12.address = 0x12;
Treat_Time12.type = 0;
Treat_Time13.address = 0x013; Treat_Time13.type = 0;
Treat_Time14.address = 0x14; Treat_Time14.type = 0;
Treat_Time15.address = 0x15;
Treat_Time15.type = 0;
Treat_Time16.address = 0x16; Treat_Time16.type = 0;
Treat_Time17.address = 0x17;
Treat_Time17.type = 0;
Treat_Time18.address = 0x18; Treat_Time18.type = 0;
Treat_Time19.address = 0x19; Treat_Time19.type = 0;
Treat_Time20.address = 0x20;
Treat_Time20.type = 0;
Treat_Time21.address = 0x21; Treat_Time21.type = 0;
Treat_Time22.address = 0x22;
Treat_Time22.type = 0;
Treat_Time23.address = 0x23; Treat_Time23.type = 0;
Treat_Time24.address = 0x24; Treat_Time24.type = 0; system_msg.address = 0x0200; system_msg.data = ":";
}
void DisWorkPage(void) { SetDisString(system_msg); }
void DisSystemPage(void) {
SetDisString(system_msg); SetDisPara(beep_flag); }
void SaveTotal(void) { WriteUlongSaveData(TOTAL_TIME,Total_Time.data); WriteUlongSaveData(TOTAL_COUNT,Total_Count.data); }
/************************************************ 函数功能:进行手具总数读取 入口参数:手具类型 ************************************************/ void ReadTotal(void) { Total_Time.data = (ReadUlongSaveData(TOTAL_TIME) > 5000000) ? 0 : ReadUlongSaveData(TOTAL_TIME); Total_Count.data = (ReadUlongSaveData(TOTAL_COUNT) > 5000000) ? 0 : ReadUlongSaveData(TOTAL_COUNT);
Total_h.data = Total_Time.data / 60;
Total_m.data = Total_Time.data % 60;
SetDisPara(Total_h);
SetDisPara(Total_m);
SetDisPara(Total_Count);
} void zhongduan(void) {
unsigned long long i,sum=0;
i=1; //Interrupt_Init(); L1: if(i<=2666) //PWM方波开始计时 { sum+=i; i++; delay_ns(100000);//调整PWM波形占空比
D_LE01; //打开蜂鸣器
D_LE11;
D_LE21;
D_LE31;
E_LE41;
delay_ns(100000);//调整PWM波形占空比
D_LE00; //打开蜂鸣器
D_LE10;
D_LE20;
D_LE30;
E_LE40;
goto L1;
}
}
/******************************************* 输出宏定义 *******************************************/
#define ID_CODE 1068 /************************** Every board must be diffrent; **************************/
#define FREQ 0x9e /************************** Every chip maybe diffrent; **************************/
#define VOLTAGE 405 /************************** Error not exceed 2%; **************************/
#define MAX_ELIGHT 30008 #define MAX_LASER 60000
#define TWO_LANGUAGE 0 /************************** 0 单语 1 双语 / #define PAGE_OFFSET 0 / 页面偏移量,双语界面时有效 **************************/
#define EIGHT_SWITCH 1 /************************** 5/4 8INCH 1 5.6INCH **************************/
#define RF_TYPE 0 /************************** 0 5 PIN 1 6 PIN **************************/
#define COUNTER_TYPE 0 /************************** 0 subtration 1 addition with limit 2 addition whitout limit **************************/
#define MACHINE_TYPE 2 /************************** 0 IPL 1 ELIGHT 2 LONG_PULSE **************************/
#define STEP_AH PORTC &= 0xFE #define STEP_AL PORTC |= 0x01
#define STEP_BH PORTG &= 0xFD #define STEP_BL PORTG |= 0x02
#define STEP_CH PORTG &= 0xFE #define STEP_CL PORTG |= 0x01
#define STEP_DH PORTD &= 0x7F #define STEP_DL PORTD |= 0x80
#define AIR0_L PORTD &= 0xBF #define AIR0_H PORTD |= 0x40
#define AIR1_L PORTD &= 0xDF #define AIR1_H PORTD |= 0x20
#define AIR2_L PORTD &= 0xEF #define AIR2_H PORTD |= 0x10
#define AIR3_L PORTD &= 0xFD #define AIR3_H PORTD |= 0x02
#define AIR4_L PORTD &= 0xFE #define AIR4_H PORTD |= 0x01
/*DA控制定义/
#define CS_LASER_L PORTB &= 0xF7 #define CS_LASER_H PORTB |= 0x08
#define CS_IF_L PORTB &= 0x7F #define CS_IF_H PORTB |= 0x80
#define SCK_L PORTB &= 0xEF #define SCK_H PORTB |= 0x10
#define DIN_L PORTB &= 0xDF #define DIN_H PORTB |= 0x20
/激光控制定义*/
#define PULSE_L PORTB &= 0xFB #define PULSE_H PORTB |= 0x04
#define SIMMER_L PORTB &= 0xFD #define SIMMER_H PORTB |= 0x02
#define CHARGE_L PORTB &= 0xFE #define CHARGE_H PORTB |= 0x01
/射频控制定义*/
#define RFCTL0_L PORTA &= 0xFE #define RFCTL0_H PORTA |= 0x01
#define RFCTL1_L PORTA &= 0xFD #define RFCTL1_H PORTA |= 0x02
#define RFRUN_L PORTA &= 0xFD #define RFRUN_H PORTA |= 0x02
#define RFCTL2_L PORTA &= 0xFB #define RFCTL2_H PORTA |= 0x04
#define RFCTL3_L PORTA &= 0xF7 #define RFCTL3_H PORTA |= 0x08
#define RFCS_L PORTA &= 0xF7 #define RFCS_H PORTA |= 0x08
#define RFCTL4_L PORTA &= 0xEF #define RFCTL4_H PORTA |= 0x10
#define RFDOWN_L PORTA &= 0xEF #define RFDOWN_H PORTA |= 0x10 //=========================================== #define RFCTL5_L PORTA &= 0xDF #define RFCTL5_H PORTA |= 0x20
#define RF_SUB PORTA &= 0xDF #define RF_ADD PORTA |= 0x20
#define RFUP_L PORTA &= 0xDF #define RFUP_H PORTA |= 0x20 //=========================================== #define RFCTL6_L PORTA &= 0xBF #define RFCTL6_H PORTA |= 0x40
#define RFCTL_L PORTA &= 0xBF #define RFCTL_H PORTA |= 0x40 //=========================================== #define RFCTL7_L PORTA &= 0x7F #define RFCTL7_H PORTA |= 0x80
#define RF_PULSE_L PORTA &= 0x7F #define RF_PULSE_H PORTA |= 0x80
#define BODY_SEL PORTA &= 0x7F #define FACE_SEL PORTA |= 0x80
#define RFCTL8_L PORTC &= 0x7F #define RFCTL8_H PORTC |= 0x80
#define RFCTL9_L PORTC &= 0xBF #define RFCTL9_H PORTC |= 0x40
#define RFCTL10_L PORTC &= 0xDF #define RFCTL10_H PORTC |= 0x20
#define RFCTL11_L PORTC &= 0xEF #define RFCTL11_H PORTC |= 0x10
#define BEEP_L PORTC &= 0xFD #define BEEP_H PORTC |= 0x02
#define COLD_L PORTC &= 0xFB #define COLD_H PORTC |= 0x04
#define SWITCH_L PORTC &= 0xF7 #define SWITCH_H PORTC |= 0x08
/******************************************* 输入宏定义 *******************************************/ #define WATER_FLOW (PINE & 0x04) #define WATER_TEMP (PINE & 0x08) #define WATER_LEVEL (PINE & 0x10) #define SIM_OK (!(PINE & 0x20)) #define FOOT_IN (!(PINE & 0x40)) #define CAP_FULL (!(PINE & 0x80))
#define VOLT_LASER 0 #define VOLT_RF 1
/******************************************* 信息扣宏定义 *******************************************/
#define ONE_L PORTF &= 0xFE #define ONE_H PORTF |= 0x01
#define ONE_IN (PINF &= 0x01)
//Write Scratchpad #define WSC 0x96
//Read Scratchpad #define RSC 0x69
//Copy Scratchpad #define CSC 0x3C
//Read Subkey #define RSK 0x66
//Write Subkey #define WSK 0x99
//Write Password #define WPS 0x5A
//Read ROM #define RRM 0x33
//Match ROM
#define MRM 0x55
//Skip ROM #define SKROM 0xCC
//SearchROM #define SEROM 0xF0
/******************************************* 输出宏定义 *******************************************/ #define SOFT_VERSION "V1.0"
#define ID_CODE "7850HG"
/************************** Every board must be diffrent; **************************/
#define FREQ 0xA6
#define BUTTON_BEEP 0
/**************************
屏幕尺寸 4/5 : 7寸屏
1 : 8或10寸屏
32/25 : 15寸屏
**************************/
#define EIGHT_SWITCH 1
/************************** Every chip maybe diffrent; **************************/
#define VOLTAGE 500
/************************** Error not exceed 2%; **************************/
#define VOLT_LASER 0 #define VOLT_MICRO 1
//所有数据必须是10的整数 #define WARING_808 20000000 #define MAX_808 10000000
#define RFOUT_L PORTA &= 0xF7 #define RFOUT_H PORTA |= 0x08
#define RF_TO_SELF PORTD &= 0xBF #define RF_TO_VA PORTD |= 0x40
#define RF_TO_FACE PORTD &= 0xDF #define RF_TO_BODY PORTD |= 0x20
#define RF_POSTIVE_SEL1 PORTD &= 0xEF #define RF_POSTIVE_SEL2 PORTD |= 0x10
//这里如果是四极,继电器板不用跳线 //如果是三极,继电器板上的跳线就要短接,端口2和3; #define RF_NEGATIVE_SEL2 PORTD &= 0xFD #define RF_NEGATIVE_SEL3 PORTD |= 0x02
#define STEP_AH PORTC &= 0xFE #define STEP_AL PORTC |= 0x01
#define STEP_BH PORTG &= 0xFD #define STEP_BL PORTG |= 0x02
#define STEP_CH PORTG &= 0xFE #define STEP_CL PORTG |= 0x01
#define STEP_DH PORTD &= 0x7F #define STEP_DL PORTD |= 0x80
#define AIR0_L PORTD &= 0xBF #define AIR0_H PORTD |= 0x40
#define AIR1_L PORTD &= 0xDF #define AIR1_H PORTD |= 0x20
#define LD_L PORTD &= 0xDF #define LD_H PORTD |= 0x20
#define AIR2_L PORTD &= 0xEF #define AIR2_H PORTD |= 0x10
#define AIR3_L PORTD &= 0xFD #define AIR3_H PORTD |= 0x02
#define AIR4_L PORTD &= 0xFE #define AIR4_H PORTD |= 0x01
/*DA控制定义/
#define CS_LASER_L PORTB &= 0xF7 #define CS_LASER_H PORTB |= 0x08
#define CS_IF_L PORTB &= 0x7F #define CS_IF_H PORTB |= 0x80
#define SCK_L PORTB &= 0xEF #define SCK_H PORTB |= 0x10
#define DIN_L PORTB &= 0xDF #define DIN_H PORTB |= 0x20
/激光控制定义*/
#define PULSE_L PORTB &= 0xFB #define PULSE_H PORTB |= 0x04
#define SIMMER_L PORTB &= 0xFD #define SIMMER_H PORTB |= 0x02
#define READY_808 PORTB &= 0xFD #define STOP_808 PORTB |= 0x02
#define CHARGE_L PORTB &= 0xFE #define CHARGE_H PORTB |= 0x01
/射频控制定义*/
#define RFCTL0_L PORTA &= 0xFE #define RFCTL0_H PORTA |= 0x01
#define RF_PULSE_L PORTA &= 0xFE #define RF_PULSE_H PORTA |= 0x01
#define RFCTL1_L PORTA &= 0xFD #define RFCTL1_H PORTA |= 0x02
#define RF_ADD PORTA &= 0xFD #define RF_SUB PORTA |= 0x02
#define RFCTL2_L PORTA &= 0xFB #define RFCTL2_H PORTA |= 0x04
#define RFCS_L PORTA &= 0xFB #define RFCS_H PORTA |= 0x04
#define RFCTL3_L PORTA &= 0xF7 #define RFCTL3_H PORTA |= 0x08
#define RF_RUN_6 PORTA &= 0xF7 #define RF_STOP_6 PORTA |= 0x08
#define RFCTL4_L PORTA &= 0xEF #define RFCTL4_H PORTA |= 0x10
//#define RFDOWN_L PORTA &= 0xEF //#define RFDOWN_H PORTA |= 0x10 //=========================================== #define RFCTL5_L PORTA &= 0xDF #define RFCTL5_H PORTA |= 0x20
//#define RFUP_L PORTA &= 0xDF //#define RFUP_H PORTA |= 0x20 //=========================================== #define RFCTL6_L PORTA &= 0xBF #define RFCTL6_H PORTA |= 0x40
//#define RFCTL_L PORTA &= 0xBF //#define RFCTL_H PORTA |= 0x40 //=========================================== #define RFCTL7_L PORTA &= 0x7F #define RFCTL7_H PORTA |= 0x80
#define BODY_SEL PORTA &= 0x7F #define FACE_SEL PORTA |= 0x80
#define RFCTL8_L PORTC &= 0x7F #define RFCTL8_H PORTC |= 0x80
#define RFCTL9_L PORTC &= 0xBF #define RFCTL9_H PORTC |= 0x40
#define RFCTL10_L PORTC &= 0xDF #define RFCTL10_H PORTC |= 0x20
#define RFCTL11_L PORTC &= 0xEF #define RFCTL11_H PORTC |= 0x10
#define BEEP_L PORTC &= 0xFD #define BEEP_H PORTC |= 0x02
#define COLD_L PORTC &= 0xFB #define COLD_H PORTC |= 0x04
#define HAND2_SEL PORTC &= 0xFB #define HAND3_SEL PORTC |= 0x04
#define HAND23_SEL PORTC &= 0xF7 #define HAND1_SEL PORTC |= 0x08 /******************************************* 输入宏定义 *******************************************/ #define WATER_FLOW (PINE & 0x04) #define WATER_TEMP (PINE & 0x08) #define WATER_LEVEL (PINE & 0x10) #define SIM_OK (!(PINE & 0x20)) #define FOOT_IN (!(PINE & 0x40)) #define CAP_FULL (!(PINE & 0x80))
#define VOLT_LASER 0 #define VOLT_RF 1
/******************************************* 数据保存区宏定义,注意如果某个地址保存的是 整形,那么这个地址之后的两位会被占用,如果 是长整形,那就是四位; 本机所有数据存储皆保存3份,以防止出错; *******************************************/
//#define DYNAMIC_ADD 0x0000 //#define MACHINE_TOTAL_ADD 0x0100
#define TOTAL_TIME 0x0000 #define TOTAL_COUNT 0x0100
/*#define REGULAR_ADD 0x0090 #define BEEP_ADD 0x00b0 #define FLOW_ADD 0x00C0 #define CLEAR_TIMES_ADD 0x00b4 #define WATER_LEVEL_ADD 0x00c0 #define WATER_TEMP_ADD 0x00c4 #define WATER_FLOW_ADD 0x00c8 #define WORK_STOP 0x3000
#define LED_BODY_L PORTC &= 0xF7*/ /******************************************* 信息扣宏定义 *******************************************/
#define ONE_L PORTF &= 0xFE #define ONE_H PORTF |= 0x01
#define ONE_IN (PINF &= 0x01)
#define uint unsigned int #define uchar unsigned char #define ulong unsigned long
//Write Scratchpad #define WSC 0x96 //Read Scratchpad #define RSC 0x69 //Copy Scratchpad #define CSC 0x3C
//Read Subkey #define RSK 0x66
//Write Subkey #define WSK 0x99
//Write Password #define WPS 0x5A
//Read ROM #define RRM 0x33
//Match ROM
#define MRM 0x55
//Skip ROM #define SKROM 0xCC
//SearchROM #define SEROM 0xF0
#define f_count 182 //定时器初值,定时器加一计数 #define timer_clk 0x07 //时钟1024分频
#define Data_IO PORTB //数码管数据口 #define Data_DDR DDRB //数码管数据口方向寄存器
#define Data_IO1 PORTD //数码管数据口 #define Data_DDR1 DDRD //数码管数据口方向寄存器 #define A_LE00 PORTA &= ~(1 << PA0) //数码管段控制位为0,锁存端口数据 #define A_LE01 PORTA |= (1 << PA0) //数码管段控制位为1,锁存器输出与端口一致 #define A_LE10 PORTA &= ~(1 << PA1) //数码管段控制位为0,锁存端口数据 #define A_LE11 PORTA |= (1 << PA1) //数码管段控制位为1,锁存器输出与端口一致 #define A_LE20 PORTA &= ~(1 << PA2) //数码管段控制位为0,锁存端口数据 #define A_LE21 PORTA |= (1 << PA2) //数码管段控制位为1,锁存器输出与端口一致 #define A_LE30 PORTA &= ~(1 << PA3) //数码管段控制位为0,锁存端口数据 #define A_LE31 PORTA |= (1 << PA3) //数码管段控制位为1,锁存器输出与端口一致 #define A_LE40 PORTA &= ~(1 << PA4) //数码管段控制位为0,锁存端口数据 #define A_LE41 PORTA |= (1 << PA4) //数码管段控制位为1,锁存器输出与端口一致 #define A_LE50 PORTA &= ~(1 << PA5) //数码管段控制位为0,锁存端口数据 #define A_LE51 PORTA |= (1 << PA5) //数码管段控制位为1,锁存器输出与端口一致 #define A_LE60 PORTA &= ~(1 << PA6) //数码管段控制位为0,锁存端口数据 #define A_LE61 PORTA |= (1 << PA6) //数码管段控制位为1,锁存器输出与端口一致 #define A_LE70 PORTA &= ~(1 << PA7) //数码管段控制位为0,锁存端口数据 #define A_LE71 PORTA |= (1 << PA7) //数码管段控制位为1,锁存器输出与端口一致
#define B_LE00 PORTB &= ~(1 << PB0) //数码管段控制位为0,锁存端口数据 #define B_LE01 PORTB |= (1 << PB0) //数码管段控制位为1,锁存器输出与端口一致 #define B_LE10 PORTB &= ~(1 << PB1) //数码管段控制位为0,锁存端口数据 #define B_LE11 PORTB |= (1 << PB1) //数码管段控制位为1,锁存器输出与端口一致 #define B_LE20 PORTB &= ~(1 << PB2) //数码管段控制位为0,锁存端口数据 #define B_LE21 PORTB |= (1 << PB2) //数码管段控制位为1,锁存器输出与端口一致 #define B_LE30 PORTB &= ~(1 << PB3) //数码管段控制位为0,锁存端口数据 #define B_LE31 PORTB |= (1 << PB3) //数码管段控制位为1,锁存器输出与端口一致 #define B_LE40 PORTB &= ~(1 << PB4) //数码管段控制位为0,锁存端口数据 #define B_LE41 PORTB |= (1 << PB4) //数码管段控制位为1,锁存器输出与端口一致 #define B_LE50 PORTB &= ~(1 << PB5) //数码管段控制位为0,锁存端口数据 #define B_LE51 PORTB |= (1 << PB5) //数码管段控制位为1,锁存器输出与端口一致 #define B_LE60 PORTB &= ~(1 << PB6) //数码管段控制位为0,锁存端口数据 #define B_LE61 PORTB |= (1 << PB6) //数码管段控制位为1,锁存器输出与端口一致 #define B_LE70 PORTB &= ~(1 << PB7) //数码管段控制位为0,锁存端口数据 #define B_LE71 PORTB |= (1 << PB7) //数码管段控制位为1,锁存器输出与端口一致
#define C_LE00 PORTC &= ~(1 << PC0) //数码管段控制位为0,锁存端口数据 #define C_LE01 PORTC |= (1 << PC0) //数码管段控制位为1,锁存器输出与端口一致 #define C_LE10 PORTC &= ~(1 << PC1) //数码管段控制位为0,锁存端口数据 #define C_LE11 PORTC |= (1 << PC1) //数码管段控制位为1,锁存器输出与端口一致 #define C_LE20 PORTC &= ~(1 << PC2) //数码管段控制位为0,锁存端口数据 #define C_LE21 PORTC |= (1 << PC2) //数码管段控制位为1,锁存器输出与端口一致 #define C_LE30 PORTC &= ~(1 << PC3) //数码管段控制位为0,锁存端口数据 #define C_LE31 PORTC |= (1 << PC3) //数码管段控制位为1,锁存器输出与端口一致 #define C_LE40 PORTC &= ~(1 << PC4) //数码管段控制位为0,锁存端口数据 #define C_LE41 PORTC |= (1 << PC4) //数码管段控制位为1,锁存器输出与端口一致 #define C_LE50 PORTC &= ~(1 << PC5) //数码管段控制位为0,锁存端口数据 #define C_LE51 PORTC |= (1 << PC5) //数码管段控制位为1,锁存器输出与端口一致 #define C_LE60 PORTC &= ~(1 << PC6) //数码管段控制位为0,锁存端口数据 #define C_LE61 PORTC |= (1 << PC6) //数码管段控制位为1,锁存器输出与端口一致 #define C_LE70 PORTC &= ~(1 << PC7) //数码管段控制位为0,锁存端口数据 #define C_LE71 PORTC |= (1 << PC7) //数码管段控制位为1,锁存器输出与端口一致
#define D_LE00 PORTD &= ~(1 << PD0) //数码管段控制位为0,锁存端口数据 #define D_LE01 PORTD |= (1 << PD0) //数码管段控制位为1,锁存器输出与端口一致 #define D_LE10 PORTD &= ~(1 << PD1) //数码管段控制位为0,锁存端口数据 #define D_LE11 PORTD |= (1 << PD1) //数码管段控制位为1,锁存器输出与端口一致 #define D_LE20 PORTD &= ~(1 << PD2) //数码管段控制位为0,锁存端口数据 #define D_LE21 PORTD |= (1 << PD2) //数码管段控制位为1,锁存器输出与端口一致 #define D_LE30 PORTD &= ~(1 << PD3) //数码管段控制位为0,锁存端口数据 #define D_LE31 PORTD |= (1 << PD3) //数码管段控制位为1,锁存器输出与端口一致
#define E_LE40 PORTE &= ~(1 << PE4) //数码管段控制位为0,锁存端口数据 #define E_LE41 PORTE |= (1 << PE4) //数码管段控制位为1,锁存器输出与端口一致 #define E_LE50 PORTE &= ~(1 << PE5) //数码管段控制位为0,锁存端口数据 #define E_LE51 PORTE |= (1 << PE5) //数码管段控制位为1,锁存器输出与端口一致 #define E_LE60 PORTE &= ~(1 << PE6) //数码管段控制位为0,锁存端口数据 #define E_LE61 PORTE |= (1 << PE6) //数码管段控制位为1,锁存器输出与端口一致 #define E_LE70 PORTE &= ~(1 << PE7) //数码管段控制位为0,锁存端口数据 #define E_LE71 PORTE |= (1 << PE7) //数码管段控制位为1,锁存器输出与端口一致
#define F_LE00 PORTF &= ~(1 << PF0) //数码管段控制位为0,锁存端口数据 #define F_LE01 PORTF |= (1 << PF0) //数码管段控制位为1,锁存器输出与端口一致 #define F_LE10 PORTF &= ~(1 << PF1) //数码管段控制位为0,锁存端口数据 #define F_LE11 PORTF |= (1 << PF1) //数码管段控制位为1,锁存器输出与端口一致 #define F_LE20 PORTF &= ~(1 << PF2) //数码管段控制位为0,锁存端口数据 #define F_LE21 PORTF |= (1 << PF2) //数码管段控制位为1,锁存器输出与端口一致
#define beep00 PORTE &= ~(1 << PE7) //蜂鸣器所在IO口PD6 #define beep01 PORTE |= (1 << PE7)
#define beep10 PORTE &= ~(1 << PE6) //蜂鸣器所在IO口PD6 #define beep11 PORTE |= (1 << PE6)
#define beep20 PORTE &= ~(1 << PE5) //蜂鸣器所在IO口PD6 #define beep21 PORTE |= (1 << PE5)
#define beep30 PORTE &= ~(1 << PE4) //蜂鸣器所在IO口PD6 #define beep31 PORTE |= (1 << PE4)
#define relay00 PORTD &= ~(1 << PD0) //蜂鸣器所在IO口PD6 #define relay01 PORTD |= (1 << PD0)
#define relay10 PORTD &= ~(1 << PD1) //蜂鸣器所在IO口PD6 #define relay11 PORTD |= (1 << PD1)
#define relay20 PORTD &= ~(1 << PD2) //蜂鸣器所在IO口PD6 #define relay21 PORTD |= (1 << PD2)
#define relay30 PORTD &= ~(1 << PD3) //蜂鸣器所在IO口PD6 #define relay31 PORTD |= (1 << PD3)
#include <iom64v.h> #include <macros.h> #include <STDLIB.H> #include "eeprom.h" #include "ibutton.h"
#define uint unsigned int #define ushort unsigned int #define uchar unsigned char #define ulong unsigned long /***************************************** MCU内部EEPROM读操作程序 *****************************************/
unsigned char EEPROM_read(unsigned int uiAddress) { /* 禁止中断*/ _CLI();
/* 等待上一次写操作结束 / while(EECR & (1<<EEWE)) ; / 设置地址寄存器*/ EEAR = uiAddress; /* 设置EERE 以启动读操作*/ EECR |= (1<<EERE); /* 自数据寄存器返回数据 */
/* 置位全局中断使能标志*/ _SEI();
return EEDR; }
/************************************************ MCU内部EEPROM写操作程序 ************************************************/
void EEPROM_write(unsigned int uiAddress, unsigned char ucData) { /* 等待上一次写操作结束 / while(EECR & (1<<EEWE)) ; / 设置地址和数据寄存器*/ EEAR = uiAddress; EEDR = ucData; /* 置位EEMWE / EECR |= (1<<EEMWE); / 置位EEWE 以启动写操作*/ EECR |= (1<<EEWE); }
//======================================== //单字节数据EEPROM读写函数 //======================================== unsigned char ReadUcharSaveData(unsigned int address) { unsigned char read_data[4]; unsigned char i=0; for(i = 0; i < 4; i++) { read_data[i] = EEPROM_read(address + i); }
if((read_data[0] == read_data[1]) || (read_data[0] == read_data[2]) || (read_data[0] == read_data[3])) return read_data[0];
else if((read_data[1] == read_data[2]) || (read_data[1] == read_data[3])) return read_data[1];
else if(read_data[2] == read_data[3]) return read_data[2];
else return read_data[3]; }
//======================================== //单字节数据数据EEPROM读写函数 //======================================== void WriteUcharSaveData(unsigned int address, unsigned char write_data) { unsigned char i=0; for(i = 0; i < 4; i++) { EEPROM_write(address + i, write_data); } }
//======================================== //长整形数据EEPROM读写函数 //======================================== unsigned long ReadUlongData(unsigned int address) { unsigned long read_data = 0;
read_data = EEPROM_read(address); read_data = (read_data << 8) + EEPROM_read(address+1); read_data = (read_data << 8) + EEPROM_read(address+2); read_data = (read_data << 8) + EEPROM_read(address+3);
return read_data; }
//======================================== //长整形数据EEPROM读写函数 //======================================== void WriteUlongData(unsigned int address, unsigned long write_data) { unsigned char i=0; do { EEPROM_write(address,(unsigned char)(write_data >> 24)); EEPROM_write(address+1,(unsigned char)(write_data >> 16)); EEPROM_write(address+2,(unsigned char)(write_data >> 8)); EEPROM_write(address+3,(unsigned char)write_data); i++; }while( (ReadUlongData(address) != write_data) && (i < 10) ); }
//======================================== //长整形数据EEPROM读写函数 //======================================== unsigned long ReadUlongSaveData(unsigned int address) { unsigned long read_data[4]; unsigned char i=0; for(i = 0; i < 4; i++) { read_data[i] = ReadUlongData(address + (i*4)); }
if((read_data[0] == read_data[1]) || (read_data[0] == read_data[2]) || (read_data[0] == read_data[3])) return read_data[0];
else if((read_data[1] == read_data[2]) || (read_data[1] == read_data[3])) return read_data[1];
else if(read_data[2] == read_data[3]) return read_data[2];
else return read_data[3]; }
//======================================== //长整形数据EEPROM读写函数 //======================================== void WriteUlongSaveData(unsigned int address, unsigned long write_data) { unsigned char i=0; for(i = 0; i < 4; i++) { WriteUlongData(address + (i*4), write_data); } }
unsigned char EEPROM_read(unsigned int uiAddress); void EEPROM_write(unsigned int uiAddress, unsigned char ucData);
unsigned long ReadUlongData(unsigned int address); void WriteUlongData(unsigned int address, unsigned long write_data); void WriteUlongSaveData(unsigned int address, unsigned long write_data); unsigned long ReadUlongSaveData(unsigned int address); unsigned char ReadUcharSaveData(unsigned int address); void WriteUcharSaveData(unsigned int address, unsigned char write_data); unsigned long ReadUlongSaveData(unsigned int address); void WriteUlongSaveData(unsigned int address, unsigned long write_data);
#include <iom64v.h> #include <macros.h> #include <STDLIB.H> #include "ibutton.h" #include "define.h"
/******************************************* 信息扣宏定义 *******************************************/
#define ONE_L PORTF &= 0xFE #define ONE_H PORTF |= 0x01
#define ONE_IN (PINF &= 0x01)
#define uint unsigned int #define uchar unsigned char #define ulong unsigned long
//Write Scratchpad #define WSC 0x96 //Read Scratchpad #define RSC 0x69 //Copy Scratchpad #define CSC 0x3C
//Read Subkey #define RSK 0x66
//Write Subkey #define WSK 0x99
//Write Password #define WPS 0x5A
//Read ROM #define RRM 0x33
//Match ROM
#define MRM 0x55
//Skip ROM #define SKROM 0xCC
//SearchROM #define SEROM 0xF0
unsigned char ibutton_value[8]; unsigned char ibutton_flag = 0;
unsigned char iBid00[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08}; //0区 id unsigned char iBpw00[]={0x1a,0x23,0xfe,0xd5,0x37,0x49,0xba,0xee}; //0区 passwork
const unsigned char iBid01[]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15}; //1区 id const unsigned char iBpw01[]={0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18}; //1区 passwork
const unsigned char iBid02[]={0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25}; //2区 id const unsigned char iBpw02[]={0x28,0x28,0x28,0x28,0x28,0x28,0x28,0x28}; //2区 passwork
/************************************************ 1线子程序 ************************************************/
/延迟5微秒*/ void Delay5us(void) { _NOP(); _NOP(); _NOP(); _NOP();
_NOP(); _NOP(); _NOP(); _NOP();
_NOP(); _NOP(); _NOP(); _NOP();
_NOP(); _NOP(); _NOP(); _NOP();
}
/延迟5微秒*/ void Delay15us(void) { unsigned char i; for(i=0; i<3; i++) { Delay5us(); } }
/延迟60微秒*/
void Delay60us(void) { unsigned char i; for(i=0; i<12; i++) { Delay5us(); } }
/1线子程序*/ void Write0TS(void) { CLI(); //disable all interrupts SEI();
DDRF = 0x01; /1微秒低电平同步信息扣,不用恢复 高电平,保持低电平让信息扣采集/ ONE_H; ONE_L; Delay60us(); ONE_H; Delay15us(); Delay15us(); SEI(); }
void Write1TS(void) { CLI(); DDRF = 0x01; /1微秒低电平同步信息扣/ ONE_H; ONE_L; _NOP(); _NOP(); _NOP(); _NOP(); ONE_H;
/保持60微秒高电平让信息扣采集/ Delay60us(); Delay15us(); SEI(); }
unsigned char ReadTS(void)
{
unsigned char i;
CLI();
DDRF = 0x01;
/1微秒低电平同步信息扣/ ONE_H; ONE_L; _NOP(); _NOP(); _NOP(); _NOP(); ONE_H;
/变为输入,5微秒之后读取数据/ DDRF = 0x00; Delay5us(); i = ONE_IN;
/60微秒用来让信息扣释放总线/ Delay60us(); Delay15us(); SEI(); return i; }
void ResetTS(void) //复位iButton { unsigned char i; CLI(); DDRF = 0x01; ONE_H; ONE_L; //保持低电平480US for(i=0;i<10;i++) Delay60us();
ONE_H; //释放总线,上拉高 DDRF = 0x00; Delay15us(); //Delay15us();
i = 40; DDRF = 0x00; //等待反馈,最多等100US while(ONE_IN && i) { Delay5us(); i--; }; //if(i) //DisString(20,453,0xffff,0x7182,0,"Ibutton reset ok! "); //else //DisString(20,453,0xffff,0x7182,0,"Ibutton reset err!");
for(i=0;i<10;i++) Delay60us(); SEI(); }
void WriteByteTS(unsigned char byte) //写一个字节(byte) { unsigned char i; for(i=0; i<8; i++) { if(byte & 0x01) Write1TS(); else Write0TS(); byte = byte >> 1; } }
unsigned char ReadByteTS(void) //读一个字节(byte) { unsigned char i,j,b; j = 0; for(i=0;i<8;i++) { b = ReadTS(); j += (b << i); } return j; }
//==================================================== //函数功能:初始化手具密码 //==================================================== void SetIbuttonPassword(void) { unsigned char i; unsigned char id[8]; ResetTS(); WriteByteTS(SKROM); WriteByteTS(WPS); //写密码 WriteByteTS(0x00); // 0 区 xx 000000 00, //00位0区,01为2区,10为3区 密码为6个零 WriteByteTS(0xff); //0x00的补码 for(i=0; i<8; i++) { id[i] = ReadByteTS();//RC 00 id //DisNumber(280+i*40,453,0xffff,0x7182,0,id[i]); } for(i=0;i<8;i++)WriteByteTS(id[i]); for(i=0;i<8;i++)WriteByteTS(iBid00[i]);//tr for(i=0;i<8;i++)WriteByteTS(iBpw00[i]);//tr ResetTS(); }
//==================================================== //函数功能:初始化手具 //函数参数1:手具类型 //函数参数2:手具次数,一般情况下,都设置为0 //==================================================== void InitIbutton(unsigned char h_type, unsigned long counter) { unsigned char i,j; unsigned int id_code = 0; unsigned int machine_id = 0; unsigned char id[8];
j = 0; //while(((GetIbutton(machine_id) != h_type) || (machine_id != ID_CODE)) && ((j++) < 4)) { ResetTS(); WriteByteTS(SKROM); WriteByteTS(WSK); WriteByteTS(0x20); //00 100000 WriteByteTS(0xdf);
for(i=0; i<8; i++) id[i] = ReadByteTS();//RC 00 id
for(i=0;i<8;i++)WriteByteTS(iBpw00[i]);//tr
//公司标识 WriteByteTS(0x12); WriteByteTS(0x34); WriteByteTS(0x56); WriteByteTS(0x78);
//手具标识 switch (h_type) { case 1: //ipl WriteByteTS(0x19); WriteByteTS(0x80); WriteByteTS(0x11); WriteByteTS(0x05); break;
case 2: //Q switch laser
WriteByteTS(0x19);
WriteByteTS(0x80);
WriteByteTS(0x12);
WriteByteTS(0x06);
break;
case 3: //Long pulse laser
WriteByteTS(0x19);
WriteByteTS(0x80);
WriteByteTS(0x13);
WriteByteTS(0x07);
break;
case 4: //Er laser
WriteByteTS(0x19);
WriteByteTS(0x80);
WriteByteTS(0x14);
WriteByteTS(0x08);
break;
case 5: //elight
WriteByteTS(0x19);
WriteByteTS(0x80);
WriteByteTS(0x15);
WriteByteTS(0x09);
break;
case 6: //808nm
id_code = ID_CODE;
WriteByteTS((unsigned char)(id_code/256));
WriteByteTS((unsigned char)id_code);
WriteByteTS(0x16);
WriteByteTS(0x0a);
break;
default:
break;
}
WriteTotal(counter); } }
//==================================================== //函数功能:初始化手具类型 //函数参数1:手具次数,一般情况下,都设置为0 //==================================================== void WriteTotal(unsigned long counter) { unsigned char i; unsigned char id[8]; unsigned long total_read = 0;
ResetTS(); WriteByteTS(SKROM); WriteByteTS(WSK); WriteByteTS(0x10); //00 100000 WriteByteTS(0xef);
//地址00-07,ID for(i=0; i<8; i++) id[i] = ReadByteTS();//RC 00 id //地址08-0f,Password for(i=0;i<8;i++)WriteByteTS(iBpw00[i]);//tr
//手具剩余次数//地址10-3f,这里我们要多备份几组数据以防止出错;
WriteByteTS ((unsigned char)(counter >> 24)); //10 dizhi WriteByteTS ((unsigned char)(counter >> 16)); //10 dizhi WriteByteTS ((unsigned char)(counter >> 8)); //TOTAL COUNT S WriteByteTS ((unsigned char)(counter)); //10 dizhi
WriteByteTS ((unsigned char)(counter >> 24)); //10 dizhi WriteByteTS ((unsigned char)(counter >> 16)); //10 dizhi WriteByteTS ((unsigned char)(counter >> 8)); //TOTAL COUNT S WriteByteTS ((unsigned char)(counter)); //10 dizhi
WriteByteTS ((unsigned char)(counter >> 24)); //10 dizhi WriteByteTS ((unsigned char)(counter >> 16)); //10 dizhi WriteByteTS ((unsigned char)(counter >> 8)); //TOTAL COUNT S WriteByteTS ((unsigned char)(counter)); //10 dizhi
WriteByteTS ((unsigned char)(counter >> 24)); //10 dizhi WriteByteTS ((unsigned char)(counter >> 16)); //10 dizhi WriteByteTS ((unsigned char)(counter >> 8)); //TOTAL COUNT S WriteByteTS ((unsigned char)(counter)); //10 dizhi ResetTS(); i = 0; do { total_read = GetTotal(); i++; }while((total_read != counter) && (i < 10)); }
//==================================================== //函数功能:初始化手具 //函数返回值:手具出光次数 //==================================================== unsigned long GetTotal(void) { unsigned char i; unsigned char id[8]; unsigned char read_data[12]; unsigned long read[4]; ResetTS();
WriteByteTS(SKROM); WriteByteTS(RSK); WriteByteTS(0x10); WriteByteTS(0xef);
for(i=0; i<8; i++) id[i] = ReadByteTS();
for(i=0;i<8;i++) WriteByteTS(iBpw00[i]);
for(i=0;i<12;i++) read_data[i] = ReadByteTS();
ResetTS();
for(i = 0; i < 4; i++) { read[i] = read_data[i4]; read[i] = (read[i] << 8) + read_data[i4 + 1]; read[i] = (read[i] << 8) + read_data[i4 + 2]; read[i] = (read[i] << 8) + read_data[i4 + 3]; }
if((read[0] == read[1]) || (read[0] == read[2]) || (read[0] == read[3])) return read[0];
else if((read[1] == read[2]) || (read[1] == read[3])) return read[1];
else if(read[2] == read[3]) return read[2];
else return read[3]; }
//============================================================== //函数功能:初始化手具 //函数返回值:0-失败,1-ipl,2-Qswitch,3-LongPulse,4-Er,5-Elight,6-808nm //============================================================== unsigned long GetIbutton(void) { unsigned char i,j = 3; unsigned char id[8]; unsigned long return_id = 0; ResetTS(); do { WriteByteTS(SKROM); WriteByteTS(RSK); WriteByteTS(0x20); WriteByteTS(0xdf);
for(i=0; i<8; i++)
id[i] = ReadByteTS();
for(i=0;i<8;i++)
WriteByteTS(iBpw00[i]);
for(i=0;i<8;i++)
ibutton_value[i] = ReadByteTS();
ResetTS();
if((ibutton_value[0] == 0x12) && (ibutton_value[1] == 0x34) && (ibutton_value[2] == 0x56) && (ibutton_value[3] == 0x78))
{
return_id = ibutton_value[4];
return_id = (return_id << 8) + ibutton_value[5];
if((ibutton_value[6] == 0x11) && (ibutton_value[7] == 0x05))
return 1;
if((ibutton_value[6] == 0x12) && (ibutton_value[7] == 0x06))
return 2;
if((ibutton_value[6] == 0x13) && (ibutton_value[7] == 0x07))
return 3;
if((ibutton_value[6] == 0x14) && (ibutton_value[7] == 0x08))
return 4;
if((ibutton_value[6] == 0x15) && (ibutton_value[7] == 0x09))
return 5;
if((ibutton_value[6] == 0x16) && (ibutton_value[7] == 0x0a))
return (return_id*10 + 6);
}
else
j --;
} while(j);
return 0; }
void SetIbuttonPassword(void); void InitIbutton(unsigned char h_type, unsigned long counter); void WriteTotal(unsigned long counter); unsigned long GetIbutton(void); unsigned long GetTotal(void);
void Interrupt_Init() { EIMSK|=0x03; //使能外部中断0和外部中断1 EICRA=0x0A; //下降沿触发方式 MCUCSR=0x00; //控制和状态寄存器初始化
// MCUCR |= (1 << ISC11) | (1 << ISC01) | (1 << ISC00); //INT0设置为上升沿中断,INT1为下降沿中断请求
//MCUCR |= (1 << ISC01) | (1 << ISC11) | (1 << ISC21)| (1 << ISC31)| (1 << ISC41)| (1 << ISC51)| (1 << ISC61)| (1 << ISC71); //INT0设置为上升沿中断,INT1为下降沿中断请求
}
//************************************************************************* // 中断服务子程序 //*************************************************************************
#pragma interrupt_handler INT0_ISR:iv_INT0 //int0_ISR:中断函数名,接着是中断向量号 void INT0_ISR() //中断0服务程序 { //if(++count>=16) //count=0; }
#pragma interrupt_handler INT1_ISR:iv_INT1 void INT1_ISR() //中断1服务程序 { if(!(PIND&(1<<PD2)))//?按键真正按下后,进行相应处理? { //PWM0(); delay_ns(readdata10);//调整PWM波形占空比
//B_LE01; //打开蜂鸣器
//B_LE11;
//B_LE21;
//B_LE31;
B_LE41;
delay_ns(readdata20);//调整PWM波形占空比
//B_LE00; //打开蜂鸣器
// B_LE10;
//B_LE20;
//B_LE30;
B_LE40;
while(!(PIND&(1<<PD2)));// } }
#pragma interrupt_handler INT2_ISR:iv_INT2 //int2_ISR:中断函数名,接着是中断向量号 void INT2_ISR() //中断0服务程序 { if(!(PIND&(1<<PD2)))//?按键真正按下后,进行相应处理? { //PWM0(); delay_ns(readdata10);//调整PWM波形占空比
//B_LE01; //打开蜂鸣器
//B_LE11;
//B_LE21;
//B_LE31;
B_LE41;
delay_ns(readdata20);//调整PWM波形占空比
//B_LE00; //打开蜂鸣器
// B_LE10;
//B_LE20;
//B_LE30;
B_LE40;
while(!(PIND&(1<<PD2)));//
} }
#pragma interrupt_handler INT3_ISR:iv_INT3 void INT3_ISR() //中断1服务程序 { //if(count) --count; // else count=15; } #pragma interrupt_handler INT4_ISR:iv_INT4 //int2_ISR:中断函数名,接着是中断向量号 void INT4_ISR() //中断0服务程序 { if(!(PINE&(1<<PE4)))//?按键真正按下后,进行相应处理? { //PWM0(); miaopwm(); while(!(PINE&(1<<PE4)));//
} }
#pragma interrupt_handler INT5_ISR:iv_INT5 void INT5_ISR() //中断1服务程序 { if(!(PINE&(1<<PE5)))//?按键真正按下后,进行相应处理? { //PWM0(); miaopwm(); while(!(PINE&(1<<PE5)));//
} } #pragma interrupt_handler INT6_ISR:iv_INT6 //int2_ISR:中断函数名,接着是中断向量号 void INT6_ISR() //中断0服务程序 { if(!(PINE&(1<<PE6)))//?按键真正按下后,进行相应处理? { //PWM0(); miaopwm(); while(!(PINE&(1<<PE6)));//
} }
#pragma interrupt_handler INT7_ISR:iv_INT7 void INT7_ISR() //中断1服务程序 { if(!(PINE&(1<<PE7)))//?按键真正按下后,进行相应处理? { //PWM0(); miaopwm(); while(!(PINE&(1<<PE7)));//
} } //char s[];
void Watchdog_init(void) {
WDR();//this?prevents?a?timout?on?enabling
WDTCR=0x0F;//WATCHDOG?ENABLED?-?dont?forget?to?issue?WDRs?
}
//加入了喂狗的延时程序
void Delay1(void)
{
unsigned char m,n;
for(m=200;m>0;m--)
{
for(n=200;n>0;n--)
{
WDR(); //这里喂狗
}
}
}
long fun(chars)
{
int i,t;
long sum=0;
for(i=0;s[i];i++)
{
if(s[i]<='9')t=s[i]-'0';
else t=s[i]-'a'+10;
sum=sum16+t;
}
return sum;
}
//ICC-AVR application builder : 2010-3-29 13:59:16
// Target : M64
// Crystal: 4.0000Mhz
#include <iom64v.h> #include <macros.h>
void port_init(void) { PORTA = 0x00; DDRA = 0x00; PORTB = 0x03; DDRB = 0x03; PORTC = 0x00; //m103 output only DDRC = 0xFF; PORTD = 0x00; DDRD = 0x00; PORTE = 0x00; DDRE = 0x00; PORTF = 0x00; DDRF = 0x00; PORTG = 0x00; DDRG = 0x07; }
//UART0 initialize // desired baud rate: 9600 // actual: baud rate:9615 (0.2%) // char size: 8 bit // parity: Disabled void uart0_init(void) { UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x19; //set baud rate lo UBRR0H = 0x00; //set baud rate hi UCSR0B = 0x98; }
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC void uart0_rx_isr(void) { //uart has received a character in UDR }
#pragma interrupt_handler int0_isr:iv_INT0 void int0_isr(void) { //external interupt on INT0 }
//call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts XDIV = 0x00; //xtal divider XMCRA = 0x00; //external memory port_init(); uart0_init();
MCUCR = 0x80; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x01; TIMSK = 0x00; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } //ICC-AVR application builder : 2010-6-22 15:14:03 // Target : M64A // Crystal: 4.0000Mhz /* 修改宏定义以实现不同功能, */
#include "main.h"
/******************************************* 向串口1发送单个数据,查询方式 ***************************************/ void TxUart1(unsigned char i) { //CLI(); //disable all interrupts //DelayMs(1); while (!(UCSR0A & (1<<UDRE0))); / 等待发送缓冲器为空/ UDR0 = i; / 发送数据/ //SEI(); //re-enable interrupts }
/******************************************* 向串口0发送数组,查询方式 参数1:数组指针; 参数2:数组长度; *******************************************/ void TxArrayUart1(unsigned char *ptr,unsigned char number) { //CLI(); //disable all interrupts uchar i; for(i = 0; i < number; i++) { TxUart1(ptr[i]); } //SEI(); //re-enable interrupts }
/******************************************* 向串口1发送单个数据,查询方式
void TxUart1(unsigned char i) { //CLI(); //disable all interrupts while (!(UCSR1A & (1<<UDRE1))); //等待发送缓冲器为空 UDR1 = i; //发送数据 //SEI(); //re-enable interrupts }
/******************************************* 向串口0发送数组,查询方式 参数1:数组指针; 参数2:数组长度;
void TxArrayUart1(unsigned char *ptr,unsigned char number) { //CLI(); //disable all interrupts uchar i; for(i = 0; i < number; i++) { TxUart1(ptr[i]); } //SEI(); //re-enable interrupts }
/******************************************* 数据接收,等待查询方式 ***************************************/ unsigned char uart_receive1(void) { while (!(UCSR1A & (1<<RXC1))); / 等待接收数据/ return UDR1; / 获取并返回数据/ }
//UART0 initialize // desired baud rate: 9600 // actual: baud rate: 9615 (0.2%) // char size: 8 bit // parity: Disabled void uart0_init(void) { UCSR0B = 0x00; //disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x0C; //set baud rate lo UBRR0H = 0x00; //set baud rate hi UCSR0B = 0x98; }
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC void uart0_rx_isr(void) { //uart has received a character in UDR uart1_data = UDR0; switch (uart1_counter) { case 0: if (uart1_data == 0xaa) uart1_counter ++; else uart1_counter = 0; break; case 1: if ((uart1_data == 0x78) || (uart1_data == 0x79)) uart1_counter ++; else uart1_counter = 0; button_type = uart1_data; break;
case 2: if (uart1_data == 0x00) { uart1_counter ++; } else uart1_counter = 0; break; case 3: uart1_counter ++; button = uart1_data; break; case 4: if (uart1_data == 0xcc) uart1_counter ++; else uart1_counter = 0; break; case 5: if (uart1_data == 0x33) uart1_counter ++; else uart1_counter = 0; break; case 6: if (uart1_data == 0xc3) uart1_counter ++; else uart1_counter = 0; break; case 7: uart1_counter = 0; if (uart1_data == 0x3c) { switch(button) { case 0x57: case 0x58: case 0x63: if(button_time == 0) { button_flag = 1; button_time = 110;
}
break;
default:
if((button_time == 0) && (button_type == 0x78))
{
button_flag = 1;
}
break;
}
} break; default: uart1_counter = 0; break; } }
/* #pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC void uart1_rx_isr(void) { //uart has received a character in UDR uart1_data = UDR1; switch (uart1_counter) { case 0: if (uart1_data == 0xaa) uart1_counter ++; else uart1_counter = 0; break; case 1: if ((uart1_data == 0x78) || (uart1_data == 0x9b)) uart1_counter ++; else uart1_counter = 0; break; case 2: if ((uart1_data == 0x00) || (uart1_data == 0x5a)) { uart1_counter ++; if(uart1_data == 0x5a) time_get = 1; } else uart1_counter = 0; break; case 3: if(time_get) { time[time_get - 1] = uart1_data; if(time_get < 6) time_get ++; else { //time_get = 0; uart1_counter ++; } } else { uart1_counter ++; button = uart1_data; } break; case 4: if (uart1_data == 0xcc) uart1_counter ++; else uart1_counter = 0; break; case 5: if (uart1_data == 0x33) uart1_counter ++; else uart1_counter = 0; break; case 6: if (uart1_data == 0xc3) uart1_counter ++; else uart1_counter = 0; break; case 7: uart1_counter = 0; if (uart1_data == 0x3c) { if(time_get) { time_get = 0; time_flag = 1; } else button_flag = 1; } break; default: uart1_counter = 0; break; } }*/
//UART1 initialize // desired baud rate:19200 // actual baud rate:19231 (0.2%) // char size: 8 bit // parity: Disabled void uart1_init(void) { UCSR1B = 0x00; //disable while setting baud rate UCSR1A = 0x00; UCSR1C = 0x06; UBRR1L = 0x0C; //set baud rate lo UBRR1H = 0x00; //set baud rate hi UCSR1B = 0x98; }
//TIMER0 initialize - prescale:32 // WGM: Normal // desired value: 1KHz // actual value: 1.000KHz (0.0%) void timer0_init(void) { TCCR0 = 0x00; //stop ASSR = 0x00; //set async mode TCNT0 = 0x83; //set count OCR0 = 0x7D; // TCCR0 = 0x03; //start timer }
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF void timer0_ovf_isr(void) { TCNT0 = 0x83; //reload counter value if(ms) ms--; } //TIMER1 initialize - prescale:64 // WGM: 0) Normal, TOP=0xFFFF // desired value: 1KHz // actual value: 1.008KHz (0.8%) void timer1_init(void) { TCCR1B = 0x00; //stop TCNT1H = 0xFF; //setup TCNT1L = 0xC2; OCR1AH = 0x00; OCR1AL = 0x3E; OCR1BH = 0x00; OCR1BL = 0x3E; OCR1CH = 0x00; OCR1CL = 0x3E; ICR1H = 0x00; ICR1L = 0x3E; TCCR1A = 0x00; TCCR1B = 0x03; //start Timer }
#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF void timer1_ovf_isr(void) { //TIMER1 has overflowed TCNT1H = 0xFF; //reload counter high value TCNT1L = 0xC2; //reload counter low value if(laser_ms) laser_ms --; if(button_time) button_time --; if(rf_out_time) { rf_out_time --; if(RF_TYPE) RFRUN_L; else RFCTL_L; } else { //if(RF_TYPE) RFRUN_H; //else RFCTL_H; }
cold_count = (cold_count < 3) ? (cold_count + 1) : 0; if(cold_count < cold_max) COLD_L; else COLD_H; }
//TIMER2 initialize - prescale:1024 // WGM: Normal // desired value: 20Hz // actual value: 20.032Hz (0.2%) void timer2_init(void) { TCCR2 = 0x00; //stop TCNT2 = 0x3D; //setup OCR2 = 0xC3; TCCR2 = 0x05; //start }
#pragma interrupt_handler timer2_ovf_isr:iv_TIM2_OVF void timer2_ovf_isr(void) { TCNT2 = 0x3D; //reload counter value WDR (); if(ad_time < 20) { ad_time++; } else { ad_time = 0; if(miniter == 60) { miniter = 0; total_time ++; EEPROM_write(0x110,total_time>>16); EEPROM_write(0x111,(unsigned char)total_time>>8); EEPROM_write(0x112,(unsigned char)total_time); } else miniter ++;
if(lamp_ok) { if(miniter_rdy == 60) { miniter_rdy = 0; total_time ++; EEPROM_write(0x113,total_time_rdy >> 16); EEPROM_write(0x114,(unsigned char)total_time_rdy >> 8); EEPROM_write(0x115,(unsigned char)total_time_rdy); } else miniter_rdy ++; } /每一秒启动一次温度采集/ ADCSRA = 0xcf; } if(beep_time) { beep_time--; BEEP_L; } else BEEP_H; }
//Watchdog initialize
// prescale: 512K
void watchdog_init(void)
{
WDR (); //this prevents a timeout on enabling
WDTCR |= (1<<WDCE) | (1<<WDE);/* 30-Oct-2006 Umesh*/
WDTCR = 0x0D; //WATCHDOG ENABLED - dont forget to issue WDRs
}
void port_init(void) { PORTA = 0xFF; DDRA = 0xFF; PORTB = 0xFF; DDRB = 0xFF; PORTC = 0x0E; //m103 output only DDRC = 0x0F; PORTD = 0x00; DDRD = 0x93; PORTE = 0x00; DDRE = 0x00; PORTF = 0x01; DDRF = 0x01; PORTG = 0x00; DDRG = 0x13; }
#pragma interrupt_handler int0_isr:iv_INT0 void int0_isr(void) { //external interupt on INT0 }
//ADC initialize // Conversion time: 16uS void adc_init(void) { ADCSRA = 0x00; //disable adc ADMUX = 0xc1; //select adc input 1 ACSR = 0x80; ADCSRA = 0xcf;//|| 0x40; }
#pragma interrupt_handler adc_isr:iv_ADC void adc_isr(void) { //conversion complete, read value (int) using... ad_value=ADCL; //Read 8 low bits first (important) ad_value|=(int)ADCH << 8; //read 2 high bits and shift into top byte temp_flag = 1; }
//call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts XDIV = 0x00; //xtal divider XMCRA = 0x00; //external memory port_init(); //watchdog_init(); //adc_init(); //timer0_init(); //timer1_init(); //timer2_init(); uart0_init(); uart1_init();
MCUCR = 0x00; EICRA = 0x00; //extended ext ints EICRB = 0x00; //extended ext ints EIMSK = 0x00; TIMSK = 0x45; //timer interrupt sources ETIMSK = 0x00; //extended timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized }
/************************************************ 发送需要显示的字符/坐标到液晶控制器; 参数1:坐标X; 参数2:坐标Y; 参数3:字符串数组; ************************************************/ void DisString(unsigned short x,unsigned short y,unsigned int word_color,unsigned int ground_color,unsigned char big,char * string) { unsigned char i = 0;
SetColor(word_color,ground_color);
//AA 55 00 00 00 00 49 CC 33 C3 3C
TxUart1(0xaa); if(big) TxUart1(0x55); else TxUart1(0x6f);
TxUart1( (uchar)((xEIGHT_SWITCH) >> 8) ); TxUart1( (uchar)(xEIGHT_SWITCH) ); TxUart1( (uchar)((yEIGHT_SWITCH) >> 8) ); TxUart1( (uchar)(yEIGHT_SWITCH) );
while(string[i] != 0) { TxUart1(string[i]); i++; }
TxUart1(0xcc); TxUart1(0x33); TxUart1(0xc3); TxUart1(0x3c); }
/************************************************ 发送需要显示的数字/坐标到液晶控制器; 参数1:坐标X; 参数2:坐标Y; 参数3:数字; ************************************************/ void DisNumber(unsigned short x,unsigned short y,unsigned short word_color,unsigned short ground_color,unsigned char big, unsigned long number) { char string[10]; ultoa(string, number, 10 ); DisString(x,y,word_color,ground_color,big,string); }
/************************************************ 设定显示字符的前景色,背景色 参数1:前景色; 参数2:背景色; ************************************************/ void SetColor(unsigned short front_color,unsigned short back_color) { //AA 40 FF FF 00 1F CC 33 C3 3C TxUart1(0xaa); TxUart1(0x40);
TxUart1((uchar)(front_color >> 8)); TxUart1((uchar)front_color); TxUart1((uchar)(back_color >> 8)); TxUart1((uchar)back_color);
TxUart1(0xcc); TxUart1(0x33); TxUart1(0xc3); TxUart1(0x3c); }
/************************************************ 在液晶上显示指定的页面 参数:页面号; ************************************************/ void DisPage(unsigned char page_id) { unsigned char tx_data[7] = {0xaa,0x70,0x00,0xcc,0x33,0xc3,0x3c}; tx_data[2] = page_id + (language_sel * PAGE_OFFSET); TxArrayUart1(tx_data,7); }
/************************************************ 从某个页面上复制一部分显示在当前页面坐标上; 参数1:页面号; 参数2:复制部分的左上角X坐标; 参数3:复制部分的左上角y坐标; 参数4:复制部分的右下角X坐标; 参数5:复制部分的右下角y坐标;; 参数6:显示位置的左上角x坐标; 参数7:显示位置的左上角y坐标; ************************************************/ void DisCopyArea(uchar p_id,ushort l_x,ushort l_y,ushort r_x,ushort r_y,ushort x,ushort y) { TxUart1(0xaa); TxUart1(0x71); TxUart1(p_id + (language_sel * PAGE_OFFSET));
TxUart1((uchar)((l_xEIGHT_SWITCH)>>8)); TxUart1((uchar)(l_xEIGHT_SWITCH)); TxUart1((uchar)((l_yEIGHT_SWITCH)>>8)); TxUart1((uchar)(l_yEIGHT_SWITCH));
TxUart1((uchar)((r_xEIGHT_SWITCH)>>8)); TxUart1((uchar)(r_xEIGHT_SWITCH)); TxUart1((uchar)((r_yEIGHT_SWITCH)>>8)); TxUart1((uchar)(r_yEIGHT_SWITCH));
TxUart1((uchar)((xEIGHT_SWITCH)>>8)); TxUart1((uchar)(xEIGHT_SWITCH)); TxUart1((uchar)((yEIGHT_SWITCH)>>8)); TxUart1((uchar)(yEIGHT_SWITCH));
TxUart1(0xcc); TxUart1(0x33); TxUart1(0xc3); TxUart1(0x3c); }
/************************************************ 函数功能:在界面上显示时间 入口参数:时间显示的横坐标; 入口参数:时间显示的竖坐标; 入口参数:时间显示的颜色; 入口参数:时间显示的字体尺寸; ************************************************/ void DisTime(unsigned int x, unsigned int y, unsigned int color, unsigned char size) {
unsigned char tx_data[15] = {0xAA, 0x9B, 0xFF, 0x00, 0x04, 0xFF, 0xFF, 0x00, 0x14, 0x00, 0x0A, 0xCC, 0x33, 0xC3, 0x3C};
tx_data[4] = (unsigned char)size; tx_data[5] = (unsigned char)(color >>8); tx_data[6] = (unsigned char)color; tx_data[7] = (unsigned char)((xEIGHT_SWITCH) >> 8); tx_data[8] = (unsigned char)(xEIGHT_SWITCH); tx_data[9] = (unsigned char)((yEIGHT_SWITCH) >> 8); tx_data[10] = (unsigned char)(yEIGHT_SWITCH);
TxArrayUart1(tx_data,15); }
/************************************************ 函数功能: 关闭时间显示; ************************************************/ void CloseTime(void) { unsigned char tx_data[7] = {0xAA, 0x9B, 0x00, 0xCC, 0x33, 0xC3, 0x3C}; TxArrayUart1(tx_data,7); }
/************************************************ 函数功能: 调整时间; 入口参数: 年月日时分秒; / void AdjustTime(void) { unsigned char tx_data[16] = {0xAA, 0xE7, 0x55, 0xAA, 0x5A, 0xA5, 0x11, 0x03, 0x12, 0x14, 0x31, 0x04, 0xCC, 0x33, 0xC3, 0x3C}; tx_data[9] = time[3]; tx_data[10] = time[4]; TxArrayUart1(tx_data,16); } / 函数功能: 获取系统时间; ************************************************/ void GetTime(void) { unsigned char tx_data[7] = {0xAA, 0x9B, 0x5A, 0xCC, 0x33, 0xC3, 0x3C}; TxArrayUart1(tx_data,7); while(!time_flag) {}; time_flag = 0; }
/************************************************
函数功能: 打开蜂鸣器;只能在19200波特率下设置;
/
void BeepOpen(void)
{
beep_flag = 1;
}
/
函数功能: 关闭蜂鸣器,只能在19200波特率下设置;
/
void BeepClose(void)
{
beep_flag = 0;
}
/
函数功能: 蜂鸣器鸣叫;只能在19200波特率下设置;
入口参数: 鸣叫时间;
***********************************************/
void Beep(unsigned char ms)
{
//unsigned char tx_data[7] = {0xAA, 0x79, 0x14, 0xCC, 0x33, 0xC3, 0x3C};
if(beep_flag)
beep_time = ms;
//tx_data[2] = ms5;
//TxArrayUart1(tx_data,7);
}
/************************************************ 初始化显示界面; ************************************************/ void InitDisplay(void) { DisPage(0); }
/************************************************ 显示E光RF能量 ************************************************/ void DisRfPower(void) { DisCopyArea(2,310,180,360,210,310,180); DisNumber(310,185,0,0xffff,0,(rf_pwr << 3)); //DisCopyArea(2,235,134,275,263,235,134); DisCopyArea(3,239,263-(rf_pwr+1) * 5,270,263,239,263- (rf_pwr+1) * 5); DisCopyArea(2,239,263-(rf_pwr+2) * 5,270,263-(rf_pwr+1) * 5,239,263- (rf_pwr+2) * 5); //DisCopyArea(3,235,283,275,420,235,283); }
/************************************************ 显示E光IPL能量 ************************************************/ void DisPower(void) { DisCopyArea(12,204,133,445,155,204,133); DisCopyArea(13,204,133,204 + (240 * record[record_number][7])/100,155,204,133);
//DisCopyArea(3,239,414-((record[record_number][7]+1)5)/2,270,414,239,414- ((record[record_number][7]+1)5)/2); //DisCopyArea(2,239,414-((record[record_number][7]+2)5)/2,270,414-((record[record_number][7]+1)5)/2,239,414- ((record[record_number][7]+2)5)/2); } /******************************************* 显示激光能量 ************************************************/