现开发了单片机控制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] = 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); } /******************************************* 显示激光能量 ************************************************/ 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;
}