Exemple #1
0
void LCD_Reset()//LCD复位
{
	RST_1;
	DelayM(5);
	RST_0;
	DelayM(5);
	RST_1;
	DelayM(5);
}
Exemple #2
0
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;
}
Exemple #3
0
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('.');
  }