void LCD_Reset()//LCD复位 { RST_1; DelayM(5); RST_0; DelayM(5); RST_1; DelayM(5); }
void LCD_Config()//LCD配置 { LCD_Init(); LCD_Reset(); CS_0;//CS=0 打开片选 Write_Reg(0x0000,0x0000); Write_Reg(0x0000,0x0000); Write_Reg(0x0000,0x0000); Write_Reg(0x0000,0x0000); DelayM(2); Write_DAT(0x0000); Write_DAT(0x0000); Write_DAT(0x0000); Write_DAT(0x0000); DelayM(2); Write_Reg(0x0008,0x0808); Write_Reg(0x0400,0x6200); Write_Reg(0x0300,0x0c0c); Write_Reg(0x0301,0xff13); Write_Reg(0x0302,0x0f0f); Write_Reg(0x0303,0x150b); Write_Reg(0x0304,0x1020); Write_Reg(0x0305,0x0a0b); Write_Reg(0x0306,0x0003); Write_Reg(0x0307,0x0d06); Write_Reg(0x0308,0x0504); Write_Reg(0x0309,0x1030); Write_Reg(0x0010,0x001b); Write_Reg(0x0011,0x0101); Write_Reg(0x0012,0x0000); Write_Reg(0x0013,0x0001); Write_Reg(0x0100,0x0330); Write_Reg(0x0101,0x0247); Write_Reg(0x0103,0x1000); Write_Reg(0x0280,0xbf00); Write_Reg(0x0102,0xd1b0); DelayM(5); Write_Reg(0x0001,0x0100); Write_Reg(0x0002,0x0100); Write_Reg(0x0003,0x1030); Write_Reg(0x0009,0x0001); Write_Reg(0x000c,0x0000); Write_Reg(0x0090,0x8000); Write_Reg(0x000f,0x0000); Write_Reg(0x0210,0x0000); Write_Reg(0x0211,0x00ef); Write_Reg(0x0212,0x0000); Write_Reg(0x0213,0x018f); Write_Reg(0x0500,0x0000); Write_Reg(0x0501,0x0000); Write_Reg(0x0502,0x005f); Write_Reg(0x0401,0x0001); Write_Reg(0x0404,0x0000); DelayM(2); Write_Reg(0x0007,0x0100); DelayM(5); Write_Reg(0x0200,0x0000); Write_Reg(0x0201,0x0000); DelayM(2); Write_COM(0x0202); DelayM(2); CS_1; }
void MotorTon(void) //自检流程分析 //############################################################################ { unsigned char ADR_TAB[5] = {0,0,2,1,3}; unsigned int timer = 300,i; unsigned int t = 0; unsigned char anz = 0,MosfetOkay = 0, grenze = 50; // PORTC &= ~ROT; Delay_ms(300 * ADR_TAB[MotorAdresse]); DISABLE_SENSE_INT; //关模拟比较器中断 cli();//Globale Interrupts Ausschalten 关总中断 uart_putchar('\n'); //给串口发一个换行字符 STEUER_OFF;//关断所有场效应管 Strom_max = 0; DelayM(50); RuheStrom = Strom_max; //总漏电流 // uart_putchar(RuheStrom + 'A'); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+ High-Mosfets auf Kurzschluss testen //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Strom = 0; /* LOW_B_EIN; HIGH_A_EIN; if(DelayM(3)) { anz = 1; uart_putchar('1'); } FETS_OFF; Delay(1000); Strom = 0; LOW_A_EIN; HIGH_B_EIN; if(DelayM(3)) { anz = 2; uart_putchar('2'); } FETS_OFF; Delay(1000); Strom = 0; LOW_B_EIN; // Low C ein HIGH_C_EIN; // High B ein if(DelayM(3)) { anz = 3; uart_putchar('3'); } FETS_OFF; Delay(1000); LOW_A_EIN; // Low A ein; und A gegen C HIGH_C_EIN; // High C ein if(DelayM(3)) { anz = 3; uart_putchar('7'); } FETS_OFF; DelayM(10000); if(anz) while(1) RotBlink(anz); // bei Kurzschluss nicht starten */ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+ LOW-Mosfets auf Schalten und Kurzschluss testen //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ if(UDR == ' ') {t = 65535; grenze = 40; uart_putchar('_');} else t = 1000; // Ausführlicher Test Strom = 0; for(i=0;i<t;i++) { LOW_A_EIN; // 打开A相的下单臂 DelayM(1); // 检测一下电流 FETS_OFF; // 关断所有管 Delay(5); HIGH_A_EIN; DelayM(1); FETS_OFF; if(Strom > grenze + RuheStrom) {anz = 4; uart_putchar('4'); FETS_OFF; break;} //grenze ?? anz?? Delay(5); } Delay(10000); Strom = 0; for(i=0;i<t;i++) { LOW_B_EIN; DelayM(1); FETS_OFF; Delay(5); HIGH_B_EIN; DelayM(1); FETS_OFF; if(Strom > grenze + RuheStrom) {anz = 5; uart_putchar('5'); FETS_OFF;break;} Delay(5); } Strom = 0; Delay(10000); for(i=0;i<t;i++) { LOW_C_EIN; DelayM(1); FETS_OFF; Delay(5); HIGH_C_EIN; DelayM(1); FETS_OFF; if(Strom > grenze + RuheStrom) {anz = 6; uart_putchar('6'); FETS_OFF; break;} Delay(5); } if(anz) while(1) RotBlink(anz); // bei Kurzschluss nicht starten //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+ High-Mosfets auf Schalten testen //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SENSE_A; FETS_OFF; LOW_B_EIN; // Low B ein LOW_C_EIN; // Low C ein Strom = 0; #define TONDAUER 40000 //电机上的硅钢片在振动,且频率在高于20HZ小于20000HZ时,能够发出声音 #define SOUND_E 1 // 1 #define SOUND1_A 300 #define SOUND2_A 330 #define SOUND3_A 360 for(i=0; i< (TONDAUER / SOUND2_A) ; i++) { HIGH_A_EIN; // Test A Delay(SOUND_E); if(MessAD(0) > 50) { MosfetOkay |= 0x01; } else { MosfetOkay &= ~0x01;}; PORTB = 0; Delay(SOUND1_A); // 控制Delay参数,就可以控制音调 } FETS_OFF; LOW_A_EIN; // Low A ein LOW_C_EIN; // Low C ein for(i=0; i<(TONDAUER / SOUND1_A); i++) { HIGH_B_EIN; // Test B Delay(SOUND_E); if(MessAD(1) > 50) { MosfetOkay |= 0x02; } else { MosfetOkay &= ~0x02;}; PORTB = 0; Delay(SOUND1_A); } FETS_OFF; LOW_A_EIN; // Low A ein LOW_B_EIN; // Low B ein for(i=0; i<(TONDAUER / SOUND3_A); i++) { HIGH_C_EIN; // Test C Delay(SOUND_E); if(MessAD(2) > 50) { MosfetOkay |= 0x04; } else { MosfetOkay &= ~0x04;}; PORTB = 0; Delay(SOUND2_A); } FETS_OFF; //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //+ Low-Mosfets auf Schalten testen //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // SENSE_B; LOW_A_EIN; // Low A ein for(i=0; i< (TONDAUER / SOUND2_A) ; i++) { HIGH_B_EIN; // Test B Delay(SOUND_E); if(MessAD(0) > 128) { MosfetOkay &= ~0x08;} else { MosfetOkay |= 0x08;}; PORTB = 0; Delay(SOUND2_A); } //++++++++++++++++++++++++++++++++++++ LOW_C_EIN; // Low C ein for(i=0; i<(TONDAUER / SOUND1_A); i++) { HIGH_B_EIN; // Test B Delay(SOUND_E); if(MessAD(2) > 128) { MosfetOkay &= ~0x20;} else { MosfetOkay |= 0x20;}; PORTB = 0; Delay(SOUND3_A); } FETS_OFF; //++++++++++++++++++++++++++++++++++++ FETS_OFF; LOW_B_EIN; // Low B ein for(i=0; i<(TONDAUER / SOUND3_A); i++) { HIGH_C_EIN; // Test C Delay(SOUND_E); if(MessAD(1) > 128) { MosfetOkay &= ~0x10;} else { MosfetOkay |= 0x10;}; PORTB = 0; Delay(SOUND3_A); } FETS_OFF; //++++++++++++++++++++++++++++++++++++ //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sei();//Globale Interrupts Einschalten // Delay_ms(250 * MotorAdresse); /* LOW_A_EIN; // Low B ein #define SOUND8_A 650 for(i=0; i<(TONDAUER / SOUND8_A); i++) { HIGH_B_EIN; // Test B Delay(SOUND_E); PORTB = 0; Delay(SOUND8_A); } */ Delay_ms(300 * (4-ADR_TAB[MotorAdresse])); if(!(MosfetOkay & 0x01)) { anz = 1; UDR='A'; } else if(!(MosfetOkay & 0x02)) { anz = 2; UDR='B'; } else if(!(MosfetOkay & 0x04)) { anz = 3; UDR='C'; } else if(!(MosfetOkay & 0x08)) { anz = 4; UDR='a'; } else if(!(MosfetOkay & 0x10)) { anz = 5; UDR='b'; } else if(!(MosfetOkay & 0x20)) { anz = 6; UDR='c'; } // if(anz) Delay_ms(1000); if(anz) while(1) RotBlink(anz); // bei Kurzschluss nicht starten RotBlink(anz); uart_putchar('.'); }