单片机控制5路PWM波形

56 阅读1小时+

现开发了单片机控制5路PWM波形,也可以同时控制15路直流三色灯板,按触摸屏顺序点亮的电路和程序,供大家参考。 电路为

单片机ATMEGA128控制5路PWM方波,按照74HC08逻辑编码输出15路PWM信号,一次按照迪文触摸屏点亮3种颜色灯板的5路发光信号。ULN2003提供12V电压。每个灯板通过一个CMOS管IR3205输出功率。一个74HC08通过一路PWM,这路PWM通过74HC08控制的继电器控制IR3205的开关,进而控制24V,13V,36V灯板的开关,灯板的亮度通过PWM波形的占空比调节电路的PCB如下,可以通过串口发送十六进制字符0x06等增大或减少单片机输出的PWM的占空比,进而调节灯板的亮度

上面是单片机PCB,它和灯板PCB通过排线连接

上面是灯板PCB。下面是单片机程序,程序用ICC-AVR开发,源码下载链接:pan.baidu.com/s/1O7McAP3E… 提取码:arj0 链接: pan.baidu.com/s/1oK1L9I1E… 提取码: y7nn //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] = ms
5; //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); } /******************************************* 显示激光能量 ************************************************/ void DisLaserPower(void) { DisCopyArea(16,55,200,95,340,55,200); DisCopyArea(17,55,337-(laser_pwr/5) * 9,95,333,55,337-(laser_pwr/5) * 9); DisCopyArea(16,130,251,160,281,130,251); DisNumber(135,250,0,0xffff,0,laser_pwr); }

void DisPara(void) { DisString(285,115,0xffff,0x3312,0,hand_type[func_type]); DisString(434,167,0xffff,0x3312,0,nm_type[func_type]); DisString(342,222,0xffff,0x3312,0,skin_type[skin_color]); DisString(410,274,0xffff,0x3312,0,pwr_type[pore_size]); //DisCopyArea(8,20,455,120,470,20,455); DisNumber(20,453,0xffff,0x7182,0,current_number); DisNumber(560,453,0xffff,0x7182,0,hand_total); }

void DisColdLevel(void) { DisCopyArea(8,250,350,450,410,250,350); DisCopyArea(9,250,350,250+70*(cold_max-1),410,250,350); }

void DisSystemSet(void) { DisCopyArea(10,60,100,430,450,60,100);

DisNumber(164,115,0xffff,0x3312,0,ID_CODE); DisNumber(212,115,0xffff,0x3312,0,clear_times);

DisNumber(317,175,0xffff,0x3312,0,total_time);//总时间 DisNumber(342,233,0xffff,0x3312,0,total_time_rdy);//总时间 DisNumber(260,288,0xffff,0x3312,0,total);//总次数 DisNumber(294,353,0xffff,0x3312,0,hand_total);//手具次数 DisString(300,414,0xffff,0x3312,0,SOFT_VERSION);//手具次数

switch(clear_number) { case 0x01: DisCopyArea(11,62,161,440,220,62,161); DisNumber(317,173,0x3312,0xfb20,0,total_time);//总时间 break;

case 0x02:
	 DisCopyArea(11,62,216,440,260,62,216);
	 DisNumber(342,230,0x3312,0xfb20,0,total_time_rdy);//总时间
break;

case 0x03:
	 DisCopyArea(11,62,275,440,320,62,275);
	 DisNumber(260,288,0x3312,0xfb20,0,total);
break;

case 0x04:
     DisCopyArea(11,62,340,440,400,62,340);
  	 DisNumber(294,353,0x3312,0xfb20,0,hand_total);
break;
default:
break;

} }

/************************************************ 响应按键; ************************************************/

void DealButton(unsigned char button_value) { unsigned char i; unsigned char times = 3; unsigned long input_password = 0;

if(button_flag) { if(beep_flag) beep_time = 1; button_flag = 0; dis_temp_flag = 0; switch (button_value) { case 0x90: break;

//======选择语言========
case 0x00:
case 0x01:
case 0x02:
case 0x03:
case 0x04:
case 0x05:
case 0x06:
case 0x07:
case 0x08:
	 language_sel = button_value;
break;

//====选择手具类型======
case 0x10:
case 0x11:
case 0x12:
case 0x13:
case 0x14:
	func_type = button_value - 0x10;
break;

/*进入设置界面*/
case 0x15:
	system_set = 1;
   	DisSystemSet();
break;

/*关灯操作*/
case 0x61:
	current_number = 0;
	DisCopyArea(8,470,0,620,80,470,0);
	DisCopyArea(8,20,455,120,470,20,455);
    DisNumber(20,453,0xffff,0x7182,0,current_number);
	//关灯保存数据
	SaveHandTotal();
	//关闭制冷
	cold_max = 1;
	DisColdLevel();
	SimmerLamp();
break;

/*点灯操作*/
case 0x62:
	//打开制冷
	cold_max = 4;
	DisCopyArea(9,470,0,620,80,470,0);
	DisColdLevel();
	SimmerLamp();
break;

case 0x66:
	if(lamp_ok == 0)
	{
	   DisPage(1);
	}
break;

case 0x67:
	if(lamp_ok == 0)
	{
	   DisPage(1);
	}
break;



//进入手动界面
case 0x63:
if(shoudong_counter < 20)
shoudong_counter ++;
else 
{
shoudong_counter = 0;
if(lamp_ok == 0)
{
  system_set = 0;
  DisPage(12);
  //DisParaSet();
  para_set[0] = record[record_number][0];
  para_set[1] = record[record_number][1];
  para_set[2] = record[record_number][2];
  para_set[3] = record[record_number][3];
  para_set[4] = record[record_number][4];
  para_set[5] = record[record_number][5];
  para_set[6] = record[record_number][6];
  //rf_timer_temp = rf_timer[record_number];
  DisParaSet();
  DisNumber(285,170,0,0xffff,0,record[record_number][7]);
  DisPower();
}
}
break;

case 0x80:
if(rf_ok == 0)
{
  if(rf_pwr < 25)
  {
    rf_pwr ++;
    DisRfPower();
    RfUp(1);
  }
}
break;

case 0x81:
if(rf_ok == 0)
{
  if(rf_pwr > 1)
  {
    rf_pwr --;
    DisRfPower();
    RfDown(1);
  }
}
break;

//只有在输入厂商密码之后才能够清理总计数;
case 0x16:
if(clear_number != 3)
{
  clear_number = 3;
 }
else
{
  clear_number = 0;
}
DisSystemSet();
break;

case 0x17:
if(clear_number != 4)
{
  clear_number = 4;
}
else
{
  clear_number = 0;
}
DisSystemSet();
break;

case 0x18:
if(clear_number != 1)
{
  clear_number = 1;
}
else
{
  clear_number = 0;
}
DisSystemSet();
break;

case 0x19:
if(clear_number != 2)
{
  clear_number = 2;
}
else
{
  clear_number = 0;
}
DisSystemSet();
break;


case 0x40:
case 0x41:
case 0x42:
case 0x43:
case 0x44:
case 0x45:
skin_color = button_value - 0x40;
break;

case 0x46:
case 0x47:
case 0x48:
pore_size = button_value - 0x46;
dis_temp_flag  = 1;
//EEPROM_write(0,pore_size);
//EEPROM_write(1,skin_color);
for(i = 0; i < 8; i ++)
{
  record[record_number][i] = auto_para[func_type][skin_color*3 + pore_size][i];
}
DisPara();

//显示当前选择的方案的各种参数;
//DisPara();
break;

//======参数设置选择======
case 0x50:
  if(para_sel == 1)
    para_sel = 0;
  else
    para_sel = 1;
  DisParaSet();
break;

case 0x51:
if(para_set[6] > 1)
{
   if(para_sel == 2)
      para_sel = 0;
   else
      para_sel = 2;
   DisParaSet();
}
break;

case 0x52:
if(para_set[6] > 2)
{
  if(para_sel == 3)
    para_sel = 0;
  else
    para_sel = 3;
  DisParaSet();
}
break;

case 0x53:
if(para_set[6] > 1)
{
  if(para_sel == 4)
    para_sel = 0;
  else
    para_sel = 4;
  DisParaSet();
}
break;

case 0x54:
if(para_set[6] > 2)
{
  if(para_sel == 5)
    para_sel = 0;
  else
    para_sel = 5;
  DisParaSet();
}
break;

case 0x55:
  if(para_sel == 6)
    para_sel = 0;
  else
    para_sel = 6;
  DisParaSet();
break;

case 0x56:
  if(para_sel == 7)
    para_sel = 0;
  else
    para_sel = 7;
  DisParaSet();
break;

case 0x58:
if(lamp_ok == 0)
{
  if(record[record_number][7] < 100)
  {
    record[record_number][7] ++;
    //DisCopyArea(12,204,133,445,155,204,133);
	DisCopyArea(12,295,170,315,200,295,170);
    DisNumber(285,170,0,0xffff,0,record[record_number][7]);
    DisPower();
  }
}
break;

case 0x57:
if(lamp_ok == 0)
{
  if(record[record_number][7] > 1)
  {
    record[record_number][7] --;
    //DisCopyArea(12,204,133,445,155,204,133);
	DisCopyArea(12,295,170,315,200,295,170);
    DisNumber(285,170,0,0xffff,0,record[record_number][7]);
    DisPower();
  }
}
break;

//恢复默认值
case 0x59:
for(i = 0; i < 8; i ++)
{
  record[record_number][i] = auto_para[func_type][skin_color*3 + pore_size][i];
}
  para_set[0] = record[record_number][0];
  para_set[1] = record[record_number][1];
  para_set[2] = record[record_number][2];
  para_set[3] = record[record_number][3];
  para_set[4] = record[record_number][4];
  para_set[5] = record[record_number][5];
  para_set[6] = record[record_number][6];
  //rf_timer_temp = rf_timer[record_number];
  DisParaSet();
  DisNumber(285,170,0,0xffff,0,record[record_number][7]);
  DisPower();
break;

//保存设置的数据
case 0x60:
	if((para_set[0] <= 25) && (para_set[0] >= 1))
	record[record_number][0] = para_set[0];
	
	if((para_set[1] <= 25) && (para_set[1] >= 1))
	record[record_number][1] = para_set[1];

	if((para_set[2] <= 25) && (para_set[2] >= 1))
	record[record_number][2] = para_set[2];
	
	if((para_set[3] <= 100) && (para_set[3] >= 5))
	record[record_number][3] = para_set[3];

	if((para_set[4] <= 100) && (para_set[4] >= 5))
	record[record_number][4] = para_set[4];

	if((para_set[5] <= 3) && (para_set[5] >= 1))
	record[record_number][5] = para_set[5];

	if((para_set[6] <= 6) && (para_set[6] >= 1))
	record[record_number][6] = para_set[6];

	//if( (((rf_timer_temp <= 3001) && (!lamp_ok)) || (lamp_ok && (rf_timer_temp <= (record[record_number][5] * 1000)) ))  && (rf_timer_temp > 299))
	//rf_timer[record_number] = rf_timer_temp;
	para_sel = 0;
	DisParaSet();
break;

case 0x20:
case 0x21:
case 0x22:
case 0x23:
case 0x24:
case 0x25:
case 0x26:
case 0x27:
case 0x28:
case 0x29:
if(system_set == 0)
{
  set_number = button_value - 0x20;
  switch(para_sel)
  {
    case 1:
	  if((para_set[0]*10 + set_number) <= 25)
	  para_set[0] = para_set[0]*10 + set_number;
	  else
	  para_set[0] = set_number;
	  DisParaSet();
	break;
	
	case 2:
	  if((para_set[1]*10 + set_number) <= 25)
	  para_set[1] = para_set[1]*10 + set_number;
	  else
	  para_set[1] = set_number;
	  DisParaSet();
	break;
	
	case 3:
	  if((para_set[2]*10 + set_number) <= 25)
	  para_set[2] = para_set[2]*10 + set_number;
	  else
	  para_set[2] = set_number;
	  DisParaSet();
	break;
	
	case 4:
	  if((para_set[3]*10 + set_number) <= 100)
	  para_set[3] = para_set[3]*10 + set_number;
	  else
	  para_set[3] = set_number;
	  DisParaSet();
	break;
	
	case 5:
	  if((para_set[4]*10 + set_number) <= 100)
	  para_set[4] = para_set[4]*10 + set_number;
	  else
	  para_set[4] = set_number;
	  DisParaSet();
	break;
	
	case 6:
	if((set_number <= 3)&&(set_number >= 1))
	{
	  para_set[5] = set_number;
	  DisParaSet();
	}
	break;
	
	case 7:
	if((set_number <= 6)&&(set_number >= 1))
	{
	  para_set[6] = set_number;
	  DisParaSet();
	}
	break;
	
	case 8:
	  if((rf_timer_temp*10 + set_number) <= 3000)
	  rf_timer_temp = rf_timer_temp*10 + set_number;
	  else
	  rf_timer_temp = set_number;
	  DisParaSet();
	break;
	
	default:
	break;
  }
}
else
{
 	number = button_value - 0x20;
 	if(time_set)
	{
  	   //临时借用密码来显示时间,为了省字节;
  	   password = password *10 + number;
  	   DisCopyArea(10,475,65,600,100,475,65);
  	   DisNumber(475,65,0xfb20,0xffff,1,password);
  	   switch(time_set)
  	   {
         case 1:
	  	 time[3] = number << 4;
	  	 time_set ++;
		 break;
		 case 2:
	  	 time[3] += number;
	  	 time_set ++;
		 break;
		 case 3:
	  	 time[4] = number << 4;
	  	 time_set ++;
		 break;
		 case 4:
	  	 time[4] += number;
	  	 time_set = 0;
	  	 AdjustTime();
	  	 //DisTime(15,15,0xffff,3);
	  	 password = 0;
	  	 DisCopyArea(6,320,430,440,460,320,430);
		 break;
		 default:
		 break;
  	   }
	}
	else
	{
  	   password = password *10 + number;
  	   DisCopyArea(10,475,65,600,100,475,65);
  	   DisNumber(475,65,0xfb20,0xffff,1,password);
  	   if(password_bit == 5)
  	   {
       	  DisCopyArea(10,475,65,600,100,475,65);
		  input_password = (ID_CODE * ID_CODE + clear_times*clear_times*ID_CODE*9) % 999999;
		  if(input_password < 100000)
		  input_password += 100000;
		  if((password == input_password) || (password == 197433) || ((password == 198010) && (clear_times < 2)))
		  {
	  	   	 if(password == 197433)
	  		 clear_flag = 3;
	  		 else
	  		 clear_flag = 1;
	  
	  		 switch(clear_number)
			 {
			   case 1:
			   total_time = 1;
			   DisSystemSet();
			   break;
			   
			   case 2:
			   total_time_rdy = 1;
			   DisSystemSet();
			   break;
			 
			   case 3:
			   total = 1;
			   DisSystemSet();
			   break;
			   
			   case 4:
			   hand_total = MAX_ELIGHT - 1;
			   DisSystemSet();
			   break;
			   
			   default:
			   
			   break;
			 }
		  }
		  password_bit = 0;
		  password = 0;
  	   }
  	   else
  	   password_bit ++;
    }
}
break;

case 0x65:
  if(cold_max < 4)
  {
    cold_max ++;
	DisColdLevel();
  }
break;

case 0x64:
  if(cold_max > 1)
  {
    cold_max --;
	DisColdLevel();
  }
break;

default:
break;

} } }

void delay_100us(void) { unsigned int i; for(i = 0; i < 1000; i ++) { }; } /************************************************ 函数功能: 利用定时器0产生准确延迟; 入口参数: 毫秒数; ************************************************/ void DelayMs(unsigned int delay_ms) { ms = delay_ms; TCCR0 = 0x03; //打开定时器0 while(ms) ; TCCR0 = 0x00; //关闭定时器0 }

/**************************************************************** 函数功能:控制MAX515输出适当的参考电压; 入口参数:type 是选择激光或者射频参考电压;0:激光,1射频; 入口参数:volt 是要转换的参考电压,毫伏; ****************************************************************/ void OutDa(unsigned char type, unsigned int volt) { uchar i = 0; SCK_L; delay_100us(); if(type) CS_IF_L; else CS_LASER_L; delay_100us(); for(i = 0; i < 16; i++) { if(volt & 0x8000) DIN_H; else DIN_L; delay_100us(); SCK_H; volt = volt << 1; delay_100us(); SCK_L; delay_100us(); } CS_IF_H; CS_LASER_H; delay_100us(); SCK_L; delay_100us(); DIN_H; }

/************************************************ 进行点灯操作 ************************************************/ void SimmerLamp(void) { unsigned char repeat_times = 5; unsigned char counter_ok = 0; switch(COUNTER_TYPE) { case 0: if( (hand_total && !laser_sel) || (laser_sel && laser_total) ) counter_ok = 1; else DisString(200,443,0xfb20,0xffff,0,"COUNTER LIMITED! ");//提示点灯成功,充电完毕; break; case 1: if( ((hand_total < MAX_ELIGHT) && !laser_sel ) || (laser_sel && (laser_total < MAX_LASER)) ) counter_ok = 1; else DisString(200,443,0xfb20,0xffff,0,"COUNTER LIMITED! ");//提示点灯成功,充电完毕; break; case 2: counter_ok = 1; break; };

//如果系统状态正常并且未点灯,则点灯; if((!WATER_LEVEL) && (!WATER_FLOW) && (!WATER_TEMP) && (!lamp_ok) && counter_ok) { //如果灯没亮,重复点3次,否则放弃; do { SIMMER_H; DelayMs(200); SIMMER_L; DelayMs(500); }while((!SIM_OK) && (--repeat_times)); //如果灯亮,充电; if(SIM_OK) { DelayMs(500); //设置参考电压 if(laser_sel) { OutDa(VOLT_LASER,1850 + (14ul * laser_pwr * (VOLTAGE-260))/140 ); } else { OutDa(VOLT_LASER,1370 + (15ul * record[record_number][7] * (VOLTAGE-200))/200 ); } DelayMs(100); //开始充电 CHARGE_L; if(laser_sel) DisString(200,443,0xfb20,0xffff,0,"LAMP IS LIGHT! ");//提示点灯成功,充电完毕; else DisString(200,443,0xfb20,0xffff,0,"LAMP IS LIGHT! ");//提示点灯成功,充电完毕; lamp_ok = 1; } else { SIMMER_H; if(laser_sel) DisString(200,443,0xfb20,0xffff,0,"LAMP NOT LIGHT! ");//提示点灯成功,充电完毕; else { DisString(200,443,0xfb20,0xffff,0,"LAMP NOT LIGHT! ");//提示点灯成功,充电完毕; } } } //如果系统状态不正常并且已点灯,则关灯; else {

CHARGE_H;
SIMMER_H;
OutDa(VOLT_LASER,0);
DelayMs(200);
//if(laser_sel)
//DisString(200,443,0xfb20,0xffff,0,"LAMP IS CLOSED  !");//提示关闭灯光;
//else
if(lamp_ok)
DisString(200,443,0xfb20,0xffff,0," LAMP IS CLOSED! ");//提示关闭灯光;
else
DisString(200,443,0xfb20,0xffff,0,"SYSTEM STATUS ERR");//提示关闭灯光;
lamp_ok = 0;

} } /**************************************************************** 函数功能:对水温,水流,等各项数据进行检测; ****************************************************************/ void SelfCheck(void) { if((WATER_LEVEL) || (WATER_FLOW) || (WATER_TEMP)) { //DisString(200,440,0xfde5,0x1b97,1,"SYSTEM STATE ERR! "); if(WATER_LEVEL) { if(laser_sel) DisString(200,443,0xfb20,0xffff,0,"WATER LEVEL ERR! "); else DisString(200,443,0xfb20,0xffff,0,"WATER LEVEL ERR! "); DelayMs(1000); Beep(10); } if(WATER_FLOW) { if(laser_sel) DisString(200,443,0xfb20,0xffff,0,"WATER FLOW ERR! "); else DisString(200,443,0xfb20,0xffff,0,"WATER FLOW ERR! "); DelayMs(1000); Beep(10); } if(WATER_TEMP) { if(laser_sel) DisString(200,443,0xfb20,0xffff,0,"WATER TEMP ERR! "); else DisString(200,443,0xfb20,0xffff,0,"WATER TEMP ERR! "); DelayMs(1000); Beep(10); }

err_record = 1;
Beep(10);
if(lamp_ok)
{
  lamp_ok = 0;
  CHARGE_H;
  SIMMER_H;
  OutDa(VOLT_LASER,0);
  DelayMs(200);
  if(laser_sel)
  DisString(200,443,0xfb20,0xffff,0,"LAMP IS CLOSE!   ");
  else
  DisString(200,443,0xfb20,0xffff,0,"LAMP IS CLOSE!   ");//提示关闭灯光;
}
DelayMs(1000);

} else { if(err_record) { if(laser_sel) DisString(200,443,0xfb20,0xffff,0,"SYSTEM STATE OK! "); else DisString(200,443,0xfb20,0xffff,0,"SYSTEM STATE OK! "); err_record = 0; } } } /**************************************************************** 函数功能:出光函数,根据脚踏信号进行出光操作; ****************************************************************/

void PulseOut(void) { unsigned char i; unsigned char counter_ok = 0; switch(COUNTER_TYPE) { case 0: if( (hand_total && !laser_sel) || (laser_sel && laser_total) ) counter_ok = 1; break; case 1: if( ((hand_total < MAX_ELIGHT) && !laser_sel ) || (laser_sel && (laser_total < MAX_LASER)) ) counter_ok = 1; break; case 2: counter_ok = 1; break; };

if(laser_sel && counter_ok) {

Beep(10);
DelayMs(600);
PULSE_L;
DelayMs(laser_time);
PULSE_H;
switch(COUNTER_TYPE) 
{
  case 0: 
  laser_total --;
  break;
  case 1:
  case 2:
  laser_total ++;
  break;
  default:
  break;
}
total ++;
laser_current ++;
DisNumber(77,85,0xffff,0x1a6d,0,laser_total);
DisNumber(387,85,0xffff,0x1a6d,0,laser_current);
if((laser_current % 10) == 0)
SaveLaserTotal();
laser_ms = 1000 * laser_charge_time;

} else if(!laser_sel && counter_ok) { Beep(10); DelayMs(600); switch(COUNTER_TYPE) { case 0: hand_total --; break; case 1: case 2: hand_total ++; break; default: break; } DisNumber(560,453,0xffff,0x7182,0,hand_total); total ++; if((current_number % 8) == 0) SaveHandTotal(); PULSE_L; DelayMs(record[record_number][0]); if(record[record_number][6] > 1) { PULSE_H; DelayMs(record[record_number][3]); PULSE_L; DelayMs(record[record_number][1]); } if(record[record_number][6] > 2) { PULSE_H; DelayMs(record[record_number][4]); PULSE_L; DelayMs(record[record_number][2]); } PULSE_H; DelayMs(record[record_number][4]); for(i = 3; i < record[record_number][6]; i ++) { PULSE_L; DelayMs(record[record_number][2]); PULSE_H; DelayMs(record[record_number][4]); } laser_ms = record[record_number][5] * 1100; } else ; }

/***************************************** 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); }

/************************************************ 进行数据保存 / void SaveLaserRecord(void) { EEPROM_write(0x83,laser_pwr); EEPROM_write(0x84,laser_time); } / 读取参数 / void ReadLaserRecord(void) { laser_pwr = EEPROM_read(0x83); if(laser_pwr > 75) laser_pwr = 5; laser_time = EEPROM_read(0x84); if(laser_time > 50) laser_time = 3; } / 进行数据保存 / void SaveLaserTotal(void) { EEPROM_write(0x80,(unsigned char)(laser_total>>16)); EEPROM_write(0x81,(unsigned char)(laser_total>>8)); EEPROM_write(0x82,(unsigned char)laser_total); EEPROM_write(0x83,laser_pwr); EEPROM_write(0x84,laser_time); //保存机器总数 EEPROM_write(0x60,(unsigned char)(total >> 16)); EEPROM_write(0x61,(unsigned char)(total >> 8)); EEPROM_write(0x62,(unsigned char)total); } / 读取参数 ************************************************/ void ReadLaserTotal(void) { laser_total = EEPROM_read(0x80); laser_total = (laser_total << 8) + EEPROM_read(0x81); laser_total = (laser_total << 8) + EEPROM_read(0x82); if(laser_total == 0xffffff) { switch(COUNTER_TYPE) { case 0: laser_total = MAX_LASER; break; case 1: case 2: laser_total = 0; break; default: break; } } }

/************************************************ 获得保存的数据 ***********************************************/ void GetRecord(unsigned char number) { unsigned char j,read; unsigned int address; for(j = 0; j < 9; j ++) { address = 0x20 + number9 + j; read = EEPROM_read(address); if((read > 0) && (read <= 100)) record[number][j] = read; } //read = EEPROM_read(0x90+number); //if((read > 0) && (read < 50))

rf_timer[number] = EEPROM_read(0x94+number2); rf_timer[number] = (rf_timer[number] << 8) + EEPROM_read(0x95+number2); if((rf_timer[number] > 0) && (rf_timer[number] < 9000)) rf_timer[number] = rf_timer[number]; else rf_timer[number] = 1000; }

/************************************************ 进行数据保存 / void SaveRecord(unsigned char number) { unsigned char j; unsigned int address; for(j = 0; j < 9; j ++) { address = 0x20 + number9 + j; EEPROM_write(address,record[number][j]); } //EEPROM_write(0x90+number,rf_pwr); EEPROM_write(0x94+number2,(unsigned char)(rf_timer[number]>>8)); EEPROM_write(0x95+number2,(unsigned char)rf_timer[number]); } /* 函数功能:进行手具总数保存; 入口参数:手具类型 ************************************************/ void SaveHandTotal(void) { //if(func_type == 0) { EEPROM_write(0x50,(unsigned char)(hand_total >> 16)); EEPROM_write(0x51,(unsigned char)(hand_total >> 8)); EEPROM_write(0x52,(unsigned char)hand_total); } //保存机器总数 EEPROM_write(0x60,(unsigned char)(total >> 16)); EEPROM_write(0x61,(unsigned char)(total >> 8)); EEPROM_write(0x62,(unsigned char)total); }

/************************************************ 函数功能:进行手具总数读取 入口参数:手具类型 ************************************************/ void ReadHandTotal(void) { hand_total = EEPROM_read(0x50); hand_total = (hand_total << 8)+ EEPROM_read(0x51); hand_total = (hand_total << 8)+ EEPROM_read(0x52);

//读取机器总数 total = EEPROM_read(0x60); total = (total << 8)+ EEPROM_read(0x61); total = (total << 8)+ EEPROM_read(0x62); if(hand_total == 0xffffff) { switch(COUNTER_TYPE) { case 0: hand_total = MAX_ELIGHT; break; case 1: case 2: hand_total = 0; break; default: break; } } if(total == 0xffffff) total = 0; }

/************************************************ 保存哨子是否关闭 / void SaveBeep(void) { EEPROM_write(0x10,beep_flag); } / 显示进度 ***********************************************/ void DisJindu(void) { unsigned char i; / for(i = 0; i < 15; i++) { DisCopyArea(2,182,238,224,250,182,238+i12); }/ i = 0; do { DisCopyArea(2,182,400,224,412,290,433-i*12); i ++; DelayMs(100); } while(i < 15); }

/************************************************ 增加射频强度 ************************************************/

void RfUp(unsigned char level) { unsigned int i; if(RF_TYPE) { i = level * 60; RFUP_H; RFDOWN_H; RFDOWN_L; DelayMs(i); RFUP_H; RFDOWN_H; } else { RF_ADD; RFCS_L; for(i = 0; i < (level<<2); i ++) { RF_PULSE_L; DelayMs(5); RF_PULSE_H; DelayMs(5); } RFCS_H; } }

/************************************************ 减小射频强度 ************************************************/

void RfDown(unsigned char level) { unsigned int i; if(RF_TYPE) { i = level * 60; RFUP_H; RFDOWN_H; RFUP_L; DelayMs(i); RFUP_H; RFDOWN_H; } else { RF_SUB; RFCS_L; for(i = 0; i < (level<<2); i ++) { RF_PULSE_L; DelayMs(5); RF_PULSE_H; DelayMs(5); } RFCS_H; } }

/************************************************ 射频输出 ************************************************/ void RfOut(unsigned int rf_time) { Beep(10); rf_out_time = rf_time; }

/************************************************ 显示参数设置 ************************************************/ void DisParaSet(void) { //刷新白色; DisCopyArea(12,100,200,530,355,100,200);

DisNumber(140,262,0,0x3312,0,para_set[0]); if(para_set[6] > 1) DisNumber(212,262,0,0x3312,0,para_set[1]); if(para_set[6] > 2) DisNumber(283,262,0,0x3312,0,para_set[2]); if(para_set[6] > 3) DisNumber(355,262,0,0x3312,0,para_set[2]); if(para_set[6] > 4) DisNumber(425,262,0,0x3312,0,para_set[2]); if(para_set[6] > 5) DisNumber(493,262,0,0x3312,0,para_set[2]);

if(para_set[6] > 1) DisNumber(175,322,0,0x3312,0,para_set[3]); if(para_set[6] > 2) DisNumber(245,322,0,0x3312,0,para_set[4]); if(para_set[6] > 3) DisNumber(315,322,0,0x3312,0,para_set[4]); if(para_set[6] > 4) DisNumber(385,322,0,0x3312,0,para_set[4]); if(para_set[6] > 5) DisNumber(455,322,0,0x3312,0,para_set[4]);

DisNumber(235,212,0,0x3312,0,para_set[5]); DisNumber(460,212,0,0x3312,0,para_set[6]);

//if(MACHINE_TYPE) //DisNumber(510,120,0,0xd75e,0,rf_timer_temp);

//刷新指定黄色; switch(para_sel) { case 6: DisCopyArea(13,160,205,320,255,160,205); DisNumber(235,212,0,0xfb20,0,para_set[5]); break; case 7: DisCopyArea(13,345,205,500,255,345,205); DisNumber(460,212,0,0xfb20,0,para_set[6]); break; case 1: DisCopyArea(13,130,255,175,300,130,255); DisNumber(140,262,0,0xfb20,0,para_set[0]); break; case 4: DisCopyArea(13,160,315,220,355,160,315); DisNumber(175,322,0,0xfb20,0,para_set[3]); break; case 2: DisCopyArea(13,202,255,260,300,202,255); DisNumber(212,262,0,0xfb20,0,para_set[1]); break; case 5: DisCopyArea(13,235,318,300,360,235,318); DisNumber(245,322,0,0xfb20,0,para_set[4]); break; case 3: DisCopyArea(13,272,257,320,300,272,257); DisNumber(283,262,0,0xfb20,0,para_set[2]); break; case 8: //DisCopyArea(13,505,112,575,160,505,112); //DisNumber(510,120,0,0xed28,0,rf_timer_temp); break;

default:
break;

} //刷新数据; } /************************************************ 显示温度 ************************************************/ void DisTemp(void) { if(temp_flag) { temp_flag = 0; temp[1] = temp[0]; temp[0] = (unsigned char)(ad_value >> 4); if(dis_temp_flag) { DisString(15,445,0x0,0xffff,0," "); DisNumber(15,445,0x0,0xffff,0,((temp[1] + temp[0])>>1)); } } }

/************************************************ 1线子程序 ************************************************/

/延迟5微秒*/

void Delay5us(void) { _NOP(); _NOP(); _NOP(); _NOP();

_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) { DDRF = 0x01; /1微秒低电平同步信息扣,不用恢复 高电平,保持低电平让信息扣采集/ ONE_H; ONE_L; Delay60us(); ONE_H; Delay15us(); Delay15us(); }

void Write1TS(void) { DDRF = 0x01; /1微秒低电平同步信息扣/ ONE_H; ONE_L; _NOP(); _NOP(); _NOP(); _NOP(); ONE_H;

/保持60微秒高电平让信息扣采集/ Delay60us(); Delay15us(); }

unsigned char ReadTS(void) { unsigned char i; DDRF = 0x01;

/1微秒低电平同步信息扣/ ONE_H; ONE_L; _NOP(); _NOP(); _NOP(); _NOP(); ONE_H;

/变为输入,5微秒之后读取数据/ DDRF = 0x00; Delay5us(); i = ONE_IN;

/60微秒用来让信息扣释放总线/ Delay60us(); return i; }

void ResetTS(void) //复位iButton { unsigned char i;

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(); }

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; }

unsigned char SetIbuttonPassword(void) {

}

unsigned char RstTotal(void) { 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();

//------------------------------------------------- ResetTS(); WriteByteTS(SKROM); WriteByteTS(WSK); WriteByteTS(0x20); //00 100000 WriteByteTS(0xdf); for(i=0; i<8; i++) { id[i] = ReadByteTS();//RC 00 id DisNumber(280+i40,453,0xffff,0x7182,0,id[i]); } for(i=0;i<8;i++)WriteByteTS(iBpw00[i]);//tr //Delay15us(); WriteByteTS(11); //10 dizhi WriteByteTS(22); //TOTAL COUNT S WriteByteTS(33); //10 dizhi WriteByteTS(44); //TOTAL COUNT S WriteByteTS(55); //10 dizhi WriteByteTS(66); //TOTAL COUNT S WriteByteTS(77); //10 dizhi WriteByteTS(88); //TOTAL COUNT S/ ResetTS();

//读取数据
ResetTS();
WriteByteTS(SKROM);
WriteByteTS(RSK);
WriteByteTS(0x20);
WriteByteTS(0xdf);

for(i=0; i<8; i++)

{ id[i] = ReadByteTS();//RC 00 id DisNumber(280+i*40,453,0xffff,0x7182,0,id[i]); }

//if (id[0]!=iBid00[0])for(;;);
for(i=0;i<8;i++)WriteByteTS(iBpw00[i]);//tr 00 password 
//Delay15us();
for(i=0;i<8;i++)
{
  id[i]=ReadByteTS();
  DisNumber(280+i*40,453,0xffff,0x7182,0,id[i]);
}
ResetTS();

DisString(20,453,0xffff,0x7182,0,"Ibutton ok ! ");

} /************************************************ 主函数,负责响应控制触摸屏及液晶,以及接收发送温度 设置/显示信息; ************************************************/

void main(void) { unsigned char i; unsigned char ipl_out = 0; unsigned char id[8];

laser_sel = 0; dis_temp_flag = 0; rf_out_time = 0; //================================== // 时钟校正,从编程器获得 //================================== OSCCAL = FREQ; init_devices(); //================================== // Get language sel //================================== language_sel = EEPROM_read(0x100); if(language_sel > 1) language_sel = 0; DisPage(0);

//DelayMs(200); //CloseTime(); pore_size = (EEPROM_read(0) < 5) ? EEPROM_read(0) : 0; skin_color = (EEPROM_read(0) < 3) ? EEPROM_read(1) : 0; //RfDown(30); //DisPage(1); //DisTime(15,15,0xffff,3); OutDa(VOLT_LASER,0); i = EEPROM_read(0x70); beep_flag = EEPROM_read(0x10); clear_times = (i > 250) ? 0 : i; ReadHandTotal(); ReadLaserRecord(); ReadLaserTotal(); //================================== // Get ipl/elight parameters //==================================
GetRecord(0); GetRecord(1); GetRecord(2); GetRecord(3); Beep(10); rf_pwr = 1; RfUp(5);

total_time = EEPROM_read(0x110); total_time = (total_time << 8) + EEPROM_read(0x111); total_time = (total_time << 8) + EEPROM_read(0x112);

total_time_rdy = EEPROM_read(0x113); total_time_rdy = (total_time_rdy << 8) + EEPROM_read(0x114); total_time_rdy = (total_time_rdy << 8) + EEPROM_read(0x115); if(total_time == 0xffffff) total_time = 0; if(total_time_rdy == 0xffffff) total_time_rdy = 0;

/ResetTS(); WriteByteTS(RRM); for(i=0;i<8;i++) { id[i]=ReadByteTS(); DisNumber(280+i40,453,0xffff,0x7182,0,id[i]); }*/ while(1) { //SelfCheck(); //DisTemp(); DealButton(button); if((FOOT_IN) && (rf_ok) && (laser_ms < 5) && (rf_out_time == 0)) { DelayMs(100); RfOut(rf_timer[record_number]); i = 1; ipl_out = 0; DelayMs(250); } if((FOOT_IN) && (lamp_ok) && (temp[0] < 60) && (laser_ms == 0)) { DelayMs(250); PulseOut(); i = 1; ipl_out = 1; } if( (FOOT_IN) && (laser_sel == 0) && i &&((lamp_ok) || (rf_ok)) ) { i = 0; current_number ++; if(MACHINE_TYPE) DisNumber(20,453,0xffff,0x7182,0,current_number); else DisNumber(20,453,0xffff,0x7182,0,current_number); //DisCopyArea(2,535,170,600,200,535,170); } } }

PWM.C源码 //*********************************************************************** // IO端口初始化 //*********************************************************************** unsigned char readdata1; unsigned char readdata2; unsigned char readdata3; unsigned char readdata4; unsigned char readdata5;

unsigned char readdata10; unsigned char readdata20; unsigned char readdata30; unsigned char readdata40; unsigned char readdata50; unsigned char s; long long k; unsigned long y; unsigned int h; //readdata1=EEPROM_read(0x01); //readdata1=ReadUcharSaveData(0x01); //ReadUcharSaveData(0x01);

void delay_ns1(unsigned char ns) { while(ns--) //delay_nms(1000); delay_1ns1(); //delay_1us(); } void delay_1ns1() { asm("nop");
} void readdata() { readdata1=EEPROM_read(0x01); readdata2=EEPROM_read(0x02); readdata3=EEPROM_read(0x03); readdata4=EEPROM_read(0x04); readdata5=EEPROM_read(0x05); } void ziwai1() {

//readdata(); readdata1=EEPROM_read(0x01); readdata2=EEPROM_read(0x02); readdata3=EEPROM_read(0x03); readdata4=EEPROM_read(0x04); readdata5=EEPROM_read(0x05); switch(readdata1) { case 0x01: A_LE00; //打开蜂鸣器 A_LE10;
A_LE21;
break; case 0x00:

   A_LE00;             							 //打开蜂鸣器
   A_LE10;   
   A_LE20;  
    break;
	}
switch(readdata2)
{		
case 0x01:
    A_LE30;   
    A_LE40;             							 //打开蜂鸣器
    A_LE51; 
break;
case 0x00:
    A_LE30;   
    A_LE40;             							 //打开蜂鸣器
    A_LE50;   
break;
	}
	    switch(readdata3)
{		
case 0x01:
    A_LE60;   
   A_LE70;  
    C_LE01;             	
break;
case 0x00:
    A_LE60;   
   A_LE70;  
    C_LE00;  
break;
	}
	 switch(readdata4)
{		
case 0x01:
    C_LE10;   
    C_LE20;   
    C_LE31;        	
break;
case 0x00:
   C_LE10;   
    C_LE20;   
    C_LE30;   
break;
	}
	 switch(readdata5)
{		
case 0x01:
   C_LE40;             							 //打开蜂鸣器
    C_LE50;   
    C_LE61;      	
break;
case 0x00:
 C_LE40;             							 //打开蜂鸣器
    C_LE50;   
    C_LE60;   
break;
	}

} void hongguang1() { //readdata(); readdata1=EEPROM_read(0x01); readdata2=EEPROM_read(0x02); readdata3=EEPROM_read(0x03); readdata4=EEPROM_read(0x04); readdata5=EEPROM_read(0x05); switch(readdata1) { case 0x01: A_LE00; //打开蜂鸣器 A_LE11;
A_LE20;
break; case 0x00:

   A_LE00;             							 //打开蜂鸣器
   A_LE10;   
   A_LE20;  
    break;
	}
switch(readdata2)
{		
case 0x01:
    A_LE30;   
    A_LE41;             							 //打开蜂鸣器
    A_LE50; 
break;
case 0x00:
    A_LE30;   
    A_LE40;             							 //打开蜂鸣器
    A_LE50;   
break;
	}
	    switch(readdata3)
{		
case 0x01:
    A_LE60;   
   A_LE71;  
    C_LE00;             	
break;
case 0x00:
    A_LE60;   
   A_LE70;  
    C_LE00;  
break;
	}
	 switch(readdata4)
{		
case 0x01:
    C_LE10;   
    C_LE21;   
    C_LE30;        	
break;
case 0x00:
   C_LE10;   
    C_LE20;   
    C_LE30;   
break;
	}
	 switch(readdata5)
{		
case 0x01:
   C_LE40;             							 //打开蜂鸣器
    C_LE51;   
    C_LE60;      	
break;
case 0x00:
 C_LE40;             							 //打开蜂鸣器
    C_LE50;   
    C_LE60;   
break;
	}

} void hongguang2() {

 switch(flag1)
		 {		
		 case 1:
   A_LE00;             							 //打开蜂鸣器
   A_LE11;   
   A_LE20;  
  break;
  case 0:
   
   A_LE00;             							 //打开蜂鸣器
   A_LE10;   
   A_LE20;  
    break;
	}
switch(flag2)
{		
case 1:
    A_LE30;   
    A_LE41;             							 //打开蜂鸣器
    A_LE50; 
break;
case 0:
    A_LE30;   
    A_LE40;             							 //打开蜂鸣器
    A_LE50;   
break;
	}
	    switch(flag3)
{		
case 1:
    A_LE60;   
   A_LE71;  
    C_LE00;             	
break;
case 0:
    A_LE60;   
   A_LE70;  
    C_LE00;  
break;
	}
	 switch(flag4)
{		
case 1:
    C_LE10;   
    C_LE21;   
    C_LE30;        	
break;
case 0:
   C_LE10;   
    C_LE20;   
    C_LE30;   
break;
	}
	 switch(flag5)
{		
case 1:
   C_LE40;             							 //打开蜂鸣器
    C_LE51;   
    C_LE60;      	
break;
case 0:
 C_LE40;             							 //打开蜂鸣器
    C_LE50;   
    C_LE60;   
break;
	}

} void hongwai1() {

//readdata(); readdata1=EEPROM_read(0x01); readdata2=EEPROM_read(0x02); readdata3=EEPROM_read(0x03); readdata4=EEPROM_read(0x04); readdata5=EEPROM_read(0x05); switch(readdata1) { case 0x01: A_LE01; //打开蜂鸣器 A_LE10;
A_LE20;
break; case 0x00:

   A_LE00;             							 //打开蜂鸣器
   A_LE10;   
   A_LE20;  
    break;
	}
switch(readdata2)
{		
case 0x01:
    A_LE31;   
    A_LE40;             							 //打开蜂鸣器
    A_LE50; 
break;
case 0x00:
    A_LE30;   
    A_LE40;             							 //打开蜂鸣器
    A_LE50;   
break;
	}
	    switch(readdata3)
{		
case 0x01:
    A_LE61;   
   A_LE70;  
    C_LE00;             	
break;
case 0x00:
    A_LE60;   
   A_LE70;  
    C_LE00;  
break;
	}
	 switch(readdata4)
{		
case 0x01:
    C_LE11;   
    C_LE20;   
    C_LE30;        	
break;
case 0x00:
   C_LE10;   
    C_LE20;   
    C_LE30;   
break;
	}
	 switch(readdata5)
{		
case 0x01:
   C_LE41;             							 //打开蜂鸣器
    C_LE50;   
    C_LE60;      	
break;
case 0x00:
 C_LE40;             							 //打开蜂鸣器
    C_LE50;   
    C_LE60;   
break;
	}

} void ziwai() {

   A_LE00;             							 //打开蜂鸣器
   A_LE10;   
   A_LE21;   
   A_LE30;   
   A_LE40;             							 //打开蜂鸣器
   A_LE51;   
   A_LE60;   
   A_LE70;  
	 
	 //A_LE00;             							 //打开蜂鸣器
   // A_LE10;   
    //A_LE20;   
    //A_LE30;   
	//A_LE40;             							 //打开蜂鸣器
   // A_LE50;   
   // A_LE60;   
   // A_LE70;  
	
    C_LE01;             							 //打开蜂鸣器
    C_LE10;   
    C_LE20;   
    C_LE31;   
	C_LE40;             							 //打开蜂鸣器
    C_LE50;   
    C_LE61;   
    C_LE70;   
	}
void	hongguang()

{

   A_LE00;             							 //打开蜂鸣器
   A_LE11;   
   A_LE20;   
   A_LE30;   
   A_LE41;             							 //打开蜂鸣器
   A_LE50;   
   A_LE60;   
   A_LE71;  
	 
	 //A_LE00;             							 //打开蜂鸣器
   // A_LE10;   
    //A_LE20;   
    //A_LE30;   
	//A_LE40;             							 //打开蜂鸣器
   // A_LE50;   
   // A_LE60;   
   // A_LE70;  
	
    C_LE00;             							 //打开蜂鸣器
    C_LE10;   
    C_LE21;   
    C_LE30;   
	C_LE40;             							 //打开蜂鸣器
    C_LE51;   
    C_LE60;   
    C_LE70;   
	}
	
	
void	hongwai()

{ A_LE01; //打开蜂鸣器 A_LE10;
A_LE20;
A_LE31;
A_LE40; //打开蜂鸣器 A_LE50;
A_LE61;
A_LE70;

	 //A_LE00;             							 //打开蜂鸣器
   // A_LE10;   
    //A_LE20;   
    //A_LE30;   
	//A_LE40;             							 //打开蜂鸣器
   // A_LE50;   
   // A_LE60;   
   // A_LE70;  
	
    C_LE00;             							 //打开蜂鸣器
    C_LE11;   
    C_LE20;   
    C_LE30;   
	C_LE41;             							 //打开蜂鸣器
    C_LE50;   
    C_LE60;   
    C_LE70;   
	}

time()
{
readdata30=EEPROM_read(0xD0);

switch( readdata30 ) { //case 0x00: //k=0; // break; case 0x01: y=1; break; case 0x02: y=2; break; case 0x03: y=3; break; case 0x04: k=4; break; case 0x05: k=5; break; case 0x06: k=6; break; case 0x07: k=7; break; case 0x08: k=8; break; case 0x09: k=9; break; case 0x0A: k=10; break; case 0x0B: k=11; break; case 0x0C: k=12; break; case 0x0D: k=14; break; case 0x0E: k=15; break; case 0x0F: k=16; break; case 0x10: k=17; break; case 0x11: k=18; break; case 0x12: k=19; break; case 0x13: k=20; break; case 0x14: k=21; break; case 0x15: k=22; break; case 0x16: k=23; break; case 0x17: k=24; break; case 0x18: k=25; break; case 0x19: k=26; break; case 0x1A: k=27; break; case 0x1B: k=28; break; case 0x1C: k=29; break; case 0x1D: k=30; break; case 0x1E: k=31; break; case 0x1F: k=32; break; case 0x20: k=33; break; case 0x21: k=34; break; case 0x22: k=35; break; case 0x23: k=36; break; case 0x24: k=37; break; case 0x25: k=38; break; case 0x26: k=39; break; case 0x27: k=40; break; case 0x28: k=41; break; case 0x29: k=42; break; case 0x30: k=43; break; case 0x31: k=44; break; case 0x32: k=45; break; case 0x33: k=46; break; case 0x34: k=47; break; case 0x35: k=48; break; case 0x36: k=49; break; case 0x37: k=50; break; case 0x38: k=51; break; case 0x39: k=52; break; case 0x3A: k=53; break; case 0x3B: k=54; break; } } time0() { readdata30=EEPROM_read(0xD0); if( readdata30=0x01 ) {

//case 0x00: //k=0; // break;

y=1;

} if( readdata30=0x02 ) {

//case 0x00: //k=0; // break;

y=2;

} if( readdata30=0x02 ) {

//case 0x00: //k=0; // break;

y=2;

} } void miaopwm22() { unsigned long long i,sum=0;

i=1;
SREG|=0x80;                                //开启全局中断
Interrupt_Init();
//cobegin:
L1: if(i<=2666)  //PWM方波开始计时
    {
	sum+=i;
	i++;
	delay_ns(readdata10);//调整PWM波形占空比
	//INT0_ISR01(); 	              //打开蜂鸣器
	//INT1_ISR11(); 
	//INT2_ISR21(); 	              //打开蜂鸣器
	//INT3_ISR31(); 
	//INT4_ISR41(); 
	delay_ns(readdata20);//调整PWM波形占空比
   // INT0_ISR00(); 	              //打开蜂鸣器
	//INT1_ISR10(); 
	//INT2_ISR20(); 	              //打开蜂鸣器
	//INT3_ISR30(); 
	//INT4_ISR40();   
	goto L1;
}
//goto P;
//coend;
}

void miaopwm() { unsigned long long i,sum=0;

i=1; //Interrupt_Init(); L1: if(i<=2666) //PWM方波开始计时 { sum+=i; i++; //timer0_ovf_isr(); //timer1_init(); //delay_ns(readdata10);//调整PWM波形占空比 //delay_ns(1600);//调整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;
goto L1; } //goto P;

}

void miao() { unsigned long long i,sum=0;

i=1; switch( readdata40 ) {

case 0x01:

M1: if(i<=1) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M1; } break; case 0x02: M2: if(i<=2) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M2; } break; case 0x03: M3: if(i<=3) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M3; } break; case 0x04: M4: if(i<=4) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M4; } break; case 0x05: M5: if(i<=5) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M5; } break; case 0x06: M6: if(i<=6) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M6; } break; case 0x07: M7: if(i<=7) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M7; } break; case 0x08: M8: if(i<=8) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M8; } break; case 0x09: M9: if(i<=9) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M9; } break; case 0x0a: M10: if(i<=10) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M10; } break; case 0x0b: M11: if(i<=11) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M11; } break; case 0x0c: M12: if(i<=12) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M12; } break; case 0x0d: M13: if(i<=13) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M13; } break; case 0x0e: M14: if(i<=14) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M14; } break; case 0x0f: M15: if(i<=15) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M15; } break; case 0x10: M16: if(i<=16) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M16; } break; case 0x11: M17: if(i<=17) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M17; } break; case 0x12: M18: if(i<=18) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M18; } break; case 0x13: M19: if(i<=19) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M19; } break; case 0x14: M20: if(i<=20) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M20; } break; case 0x15: M21: if(i<=21) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M21; } break; case 0x16: M22: if(i<=22) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M22; } break; case 0x17: M23: if(i<=23) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M23; } break; case 0x18: M24: if(i<=24) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M24; } break; case 0x19: M25: if(i<=25) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M25; } break; case 0x1a: M26: if(i<=26) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M26; } break; case 0x1b: M27: if(i<=27) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M27; } break; case 0x1c: M28: if(i<=28) //PWM方波开始计时 { sum+=i; i++; miaopwm(); Treat_TimeA1.data --;
SetDisPara(Treat_TimeA1); Treat_TimeB1.data --;
SetDisPara(Treat_TimeB1); Treat_TimeC1.data --;
SetDisPara(Treat_TimeC1); goto M28; }