MSP430 + LCD "рдорд┐рдирд┐рдХрд╛ 1101F" рд╕реЗ

рдЫрд╡рд┐
"MSP430" рдЯреИрдЧ рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреА рддрд░рд╣, рдЗрд╕ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкрд░рд┐рдЪрд┐рдд рдХреА рд╢реБрд░реБрдЖрдд рдЯреЗрдХреНрд╕рд╛рд╕ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд MSP430 рдбреЗрд╡рд▓рдкрд░ рдХреА рдХрд┐рдЯ рдХреЗ рдиреЛрдЯ рд╕реЗ рд╣реБрдИред 5 рджрд┐рдиреЛрдВ рдореЗрдВ рдЖрджреЗрд╢рд┐рдд рдХрд┐рдЯ рдЖ рдЧрдИред рдлрд┐рд░ рдПрд▓рдИрдбреА "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб" рдФрд░ ... рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рд╕рдордп рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рд▓реЙрдХрд░ рдореЗрдВ рд╡рд╛рдкрд╕ рд░рдЦ рджрд┐рдпрд╛ рдЧрдпрд╛ ...
... рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдЧреЛрджрд╛рдо рдореЗрдВ рдЕрдкреНрд░рдпреБрдХреНрдд рдЯрд┐рдХрдЯ рдХрд╛рд░реНрдпрд╛рд▓рдп "рдорд┐рдирд┐рдХрд╛ 1101F" рдорд┐рд▓рд╛ред рдмрдЪрдкрди рд╕реЗ, рдкрд░рд┐рдЪрд┐рдд рд╕рд╡рд╛рд▓ "рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ?" рдЕрдкрдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛ :)

рдЕрдВрджрд░, IZhC13-8 / 7-01 рдПрд▓рд╕реАрдбреА рдХреЛ рдЬрд╛рджреБрдИ рд╕рдВрдЦреНрдпрд╛ 5.104.704 рдХреЗ рд╕рд╛рде рдПрдХ рдмреЛрд░реНрдб рдкрд░ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдпрд╣ рдмреЛрд░реНрдб рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ
рдЫрд╡рд┐рдЫрд╡рд┐

рд╡рд┐рд╖рдпрдЧрдд рдордВрдЪреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ рдПрдХ рд╕рд░реНрдХрд┐рдЯ рдмреЛрд░реНрдб рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдкрд╛рд░ рдЖрдпрд╛ред
рдмреЛрд░реНрдб рджреЛ-рддрд░рдлрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ 2 KR1820VG1 рдорд╛рдЗрдХреНрд░реЛрдХреНрд░реЗрд╕реАрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рд╣рд╛рдБ, рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реИ, рджреЛ рдореЗрдВ рд╕реЗ - рдЪрд┐рддреНрд░ рдореЗрдВ рдЙрдирдореЗрдВ рд╕реЗ 4 рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрди рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдЬреЛ рдмреЛрд░реНрдб рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИрдВ)ред рдпрд╣ рдЪрд┐рдк рдЯреЗрдХреНрд╕рд╛рд╕ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреНрд╕ COP472-3 рдЪрд┐рдк рдХрд╛ рдкреВрд░рд╛ рдПрдирд╛рд▓реЙрдЧ рд╣реИред рдореИрдВ рдбреЗрдЯрд╢реАрдЯ рд▓рд╛рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рд╕реЛрд╡рд┐рдпрдд (рдпрд╛ рд░реВрд╕реА?) рдбрд┐рдЬрд╝рд╛рдЗрдирд░реЛрдВ рдиреЗ рдХреНрд▓реЛрди рдХрд┐рдпрд╛ рдерд╛!
рдкреНрд░рддреНрдпреЗрдХ microcircuit рд╕рдВрдХреЗрддрдХ рдХреЗ 4 рдбрд┐рдЬрд┐рдЯрд▓ рдЕрдВрдХреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕ рд╕реВрдЪрдХ рдореЗрдВ 8 рдЕрдВрдХ рд╣реИрдВ)ред рдЗрд╕рд▓рд┐рдП, рдорд╛рдЗрдХреНрд░реЛрдХреНрд░рд┐рд╕реНрдЪреБрдЯреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ 4 рд╡рд░рд┐рд╖реНрда рдмрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ 4 рдирд┐рдЪрд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдПред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдиреЗ рдХреБрдЦреНрдпрд╛рдд K561LN2 рдореЗрдВ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдЗрдирд╡рд░реНрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ (рдХреНрдпреЛрдВ - рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛, рд╢рд╛рдпрдж рдпрд╣ рдХреЗрдВрджреНрд░реАрдп рдирдХрджреА рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗрдВрджреНрд░реАрдп рдмреНрд▓реЙрдХ рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдерд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╣реА рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рдЪреБрдХрд╛ рдерд╛)ред

рд╕рдВрдмрдВрдз


рдПрд▓рд╕реАрдбреА рдореЙрдбреНрдпреВрд▓ 6-рдкрд┐рди X7 рдХрдиреЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХреИрд╢ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдореБрдЦреНрдп рдмреЛрд░реНрдб рд╕реЗ рдЬреБрдбрд╝рд╛ рдерд╛ред рдпрд╣рд╛рдВ рдореБрдЭреЗ рдЙрд╕ рдХреНрд░рдо рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪрдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдкрд░реНрдХ рдХрдиреЗрдХреНрдЯрд░ рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВред
рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХрдВрдбрдХреНрдЯрд░ рдХрд╣рд╛рдВ рдЬрд╛ рд░рд╣реЗ рдереЗ рдФрд░ рдПрдордПрд╕рдкреА 430 рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдПрдХ рдЪрд┐рддреНрд░ рдмрдирд╛ рджрд┐рдпрд╛ред рдЫрд╡рд┐
рдкреЛрд░реНрдЯ MSP430G2553 рдЯреНрд░реЗрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ:

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо


KR1820VG1 microcircuits рдХреЗ рдСрдкрд░реЗрд╢рди рдХреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд┐рдпреЛрдирд┐рдб рдЗрд╡рд╛рдиреЛрд╡рд┐рдЪ рд░рд┐рдбрд┐рдХреЛ рдХрд╛рд░ рдШрдбрд╝реА-рдерд░реНрдорд╛рдореАрдЯрд░-рд╡рд╛рд▓реНрдЯрдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ 1990 рдХреЗ рдкреНрд░рд╕рд┐рджреНрдз рд▓реЗрдЦ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рднреА, рдЗрд▓реЗрдХреНрдЯреНрд░рд╛рдирд┐рдХреНрд╕ рдкрддреНрд░рд┐рдХрд╛ рдХрд╛ рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕реНрдХреИрди рдкрд╛рдпрд╛ рдЧрдпрд╛: рд╡рд┐рдЬреНрдЮрд╛рди, рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА, рд╡реНрдпрд╡рд╕рд╛рдп 5/2007 ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рджреЛ KR1820VG1 рдорд╛рдЗрдХреНрд░реЛрдХреНрд░реЗрд╕реАрд╡реНрд╕ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЫрд╡рд┐

рд╕реЗрд╡рд╛ рдмрд┐рдЯ рд╕реЗрдЯ рдХреЛ рдмрдбрд╝реА рдЪрддреБрд░рд╛рдИ рд╕реЗ "рдЬреВрдирд┐рдпрд░ 1/2" рдФрд░ "рд╕реЗрдирд┐рдпрд░" рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЫрд╡рд┐
рд╣рдо рдХреИрд╕реНрдХреЗрдб рдореЗрдВ рд╡реАрдЬреА 1 рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред "рдмреЛрд░реНрдб рдСрдкрд░реЗрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо" рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рд╣рдордиреЗ рд╕рднреА рдмреЛрд░реНрдб рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЗрдирд╡рд░реНрдЯрд░ рдХреЛ рдорд┐рд▓рд╛рдпрд╛ рд╣реИ ред
рдХрд╛рдо рдореЗрдВ 1) рдЖрд░рдВрднреАрдХрд░рдг рдФрд░ 2) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдЯреНрд░реЗрд╕ рд╣реЛрддрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ:
1) рджреЛрдиреЛрдВ рдЪрд┐рдкреНрд╕ рдкрд░ рд╣рдордиреЗ ^ CS1,2 = 0 рд╕реЗрдЯ рдХрд┐рдпрд╛;
2) рд╣рдо "рдбреА" рд▓рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 32 рдмрд┐рдЯ рдбреЗрдЯрд╛ рджреЗрддреЗ рд╣реИрдВ;
3) рд╡рд┐рд╢реЗрд╖ рдЦрдВрдбреЛрдВ рдХреЗ 4 рдмрд┐рдЯреНрд╕ рджреЗрдВ (рдЗрд╕ рд╕реВрдЪрдХ рдореЗрдВ, рдпреЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдКрдкрд░ рдбреИрд╢ рд╣реИрдВ);
4) рд╣рдо 4 рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдЯреНрд╕ 0111 рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ (рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджреЗрдЦреЗрдВред "BEST1");
5) рджреЛрдиреЛрдВ рдЪрд┐рдкреНрд╕ рдкрд░ рд╣рдордиреЗ ^ CS1,2 = 1 рд╕реЗрдЯ рдХрд┐рдпрд╛;
6) рд╡рд░рд┐рд╖реНрда рдЪрд┐рдк рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ^ CS2 = 0, рдпрд╣ рдЕрдм рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛;
7) рд╣рдо "рдбреА" рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП 32 рдмрд┐рдЯ рдбреЗрдЯрд╛ рджреЗрддреЗ рд╣реИрдВ; рд╣рдо рд╡рд┐рд╢реЗрд╖ рдЦрдВрдбреЛрдВ рдХреЗ 4 рдмрд┐рдЯреНрд╕ рджреЗрддреЗ рд╣реИрдВ; 4 рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдЯреНрд╕ 1000 рджреЗрдВ (рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджреЗрдЦреЗрдВред "рд╕реЗрдирд┐рдпрд░");
8) ^ рд╕реАрдПрд╕ = 0ред
рдЖрд░рдВрднреАрдХрд░рдг рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ
/* *  LCD */ void initLCD(){ P1OUT |= CS1+CS2; //      ~CS  "0" // ( -  ,     "1") //       spi_IO(0); spi_IO(0); spi_IO(0); spi_IO(0); // 4   spi_IO(0x07); // 4   + 4  P1OUT &= ~(CS1 + CS2); //  ~CS=1    (   ) P1OUT |= CS2; //  ~CS=0   -      spi_IO(0); spi_IO(0); spi_IO(0); spi_IO(0); //  4  spi_IO(0x08); // 4   + 4  P1OUT &= ~(CS2 + CS1); //  ~CS=1 (!) } 

рдХреЛрдИ рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп
 /* "1"    */ void bit1() { P1OUT &= ~D; P1OUT &= ~CLK; P1OUT |= CLK; } /* "0"    */ void bit0() { P1OUT |= D; P1OUT &= ~CLK; P1OUT |= CLK; } /*      */ void spi_IO( unsigned int data ) { unsigned int i; for( i = 0; i < 8; i++ ) { //      if( data & 0x80 ) bit1(); else bit0(); data <<= 1; } } 

рдЪрд┐рдк рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдореЗрдВ рдЪрд▓реА рдЬрд╛рддреА рд╣реИред
рдЕрдм, рдЙрдЪреНрдЪ / рдирд┐рдореНрди 4 рдбрд┐рдЬрд┐рдЯрд▓ рдЕрдВрдХреЛрдВ (рдпрд╛рдиреА, рдЙрдЪреНрдЪ / рдирд┐рдореНрди рдЪрд┐рдк) рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдмрд╕ рд╡рд╛рдВрдЫрд┐рдд рдЪрд┐рдк рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рддреБрд░рдВрдд рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рдо рдореЛрдб:
1) рдЖрд╡рд╢реНрдпрдХ рдЪрд┐рдк рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ (рд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ ^ CS1 = 0 рдпрд╛ рдЙрдЪреНрдЪрддрдо ^ CS2 = 0);
2) 32 рдмрд┐рдЯ рдбреЗрдЯрд╛ рднреЗрдЬреЗрдВ;
3) рд╡рд┐рд╢реЗрд╖ рдЦрдВрдбреЛрдВ рдХреЗ 4 рдмрд┐рдЯреНрд╕ рднреЗрдЬреЗрдВ;
4) 4 рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдЯреНрд╕ рднреЗрдЬреЗрдВ (рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ "BEST2" рдХреЗ рд▓рд┐рдП 0110 рдпрд╛ рд╡рд░рд┐рд╖реНрда рдХреЗ рд▓рд┐рдП 1000);
5) "рд╣рдо рдЫрдБрдЯрд╛рдИ рдХрд░ рд░рд╣реЗ рд╣реИрдВ" рдЪрд┐рдк (рд╡рд╣ рдЬреЛ рдЖрдЗрдЯрдо 1. 1 рдореЗрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛)ред
рдХреГрдкрдпрд╛ рдкрдЧрдбрдВрдбреА рдХреЗ рд▓рд┐рдП рдХрдбрд╝рд╛рдИ рд╕реЗ рдиреНрдпрд╛рдп рди рдХрд░реЗрдВред рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛ред рдЖрдк рдЕрдиреБрдХреВрд▓рди рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ :)
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
 /* *    * data -  * n -   * dot -   () */ void print_LCD( char data[], char n, char dot ) { unsigned char copy[8]; unsigned char i; if(n<1) return ; if(n>8) n=8; for( i = 0; i < 8; i++ ) if(i+1>n) copy[i] = ' ' ; else copy[i] = data[i]; //  //   4  P1OUT |= CS1; for(i=0;i<4;i++){ if( dot & 0x80 ) spi_IO(char2byte(copy[i])+0x80); else spi_IO(char2byte(copy[i])); dot <<= 1; } // 4  ,   ( ) bit0(); bit0(); bit0(); bit0(); //   bit0(); bit1(); bit1(); bit0(); P1OUT &= ~CS1; //   4  P1OUT |= CS2; for(i=4; i<8; i++){ if( dot & 0x80 ) spi_IO(char2byte(copy[i])+0x80); else spi_IO(char2byte(copy[i])); dot <<= 1; } // 4  ,   ( ) bit0(); bit0(); bit0(); bit0(); //   bit1(); bit0(); bit0(); bit0(); P1OUT &= ~CS2; } 

рдЕрдм рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЦрдВрдбреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдЪрд░рд┐рддреНрд░ рдЬрдирд░реЗрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!

рдЬрдирд░реЗрдЯрд░ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░реЗрдВ


рдЗрд╕ рддрд╕реНрд╡реАрд░ рдореЗрдВ рд╣рдо рдХреЛрдб рдкреИрдХреЗрдЬ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХрд╛ рдХреНрд░рдо рджреЗрдЦрддреЗ рд╣реИрдВ (рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдкреИрд░рд╛ 2 рджреЗрдЦреЗрдВ)ред
рдЫрд╡рд┐
рдФрд░ рдЗрд╕ рдкрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрд▓рд╕реАрдбреА рд╡рд╛рдпрд░рд┐рдВрдЧ рдЖрд░реЗрдЦ рд╣реИ (рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, "рдХреЗ" рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдКрдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдиреАрдЪреЗ рд╣реИ)ред
рдЫрд╡рд┐
рдЪрд░рд┐рддреНрд░ рдЬрдирд░реЗрдЯрд░ рдХреЗ рдХреЛрдб рдореЗрдВ рд╕рдм рдХреБрдЫ рдорд╛рдорд▓реЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИ, рдореИрдВ рдорд╛рдлреА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБ :)
рдЪрд░рд┐рддреНрд░ рдЬрдирд░реЗрдЯрд░ рдХреЛрдб
 /* *       */ int char2byte( char ch ){ switch(ch){ case '1' : return 0x06; case '2' : return 0x5B; case '3' : return 0x4F; case '4' : return 0x66; case '5' : return 0x6D; case '6' : return 0x7D; case '7' : return 0x07; case '8' : return 0x7F; case '9' : return 0x6F; case 'O' : case 'o' : case '0' : return 0x3F; case 'a' : case 'A' : return 0x77; case 'b' : case 'B' : return 0x7C; case 'c' : case 'C' : return 0x39; case 'd' : case 'D' : return 0x5E; case 'e' : case 'E' : return 0x79; case 'f' : case 'F' : return 0x71; case '-' : return 0x40; case ' ' : return 0x00; case 'p' : case 'P' : return 0x73; case 'g' : case 'G' : return 0x31; case 'l' : case 'L' : return 0x38; case 'h' : case 'H' : return 0x76; case 'y' : case 'Y' : return 0x38; case 'r' : case 'R' : return 0x50; case 'u' : return 0x1C; case 'U' : return 0x3E; case '|' : return 0x30; case '~' : return 0x01; //   case '_' : return 0x08; //  case '=' : return 0x09; //    case 'j' : return 0x21; //    (      - //   jkmn  ) case 'k' : return 0x03; //    case 'm' : return 0x0C; //    case 'n' : return 0x18; //    default: return 0x00; } } 

рдЕрдЧрд▓рд╛, рдХрдИ рдбреЗрдореЛ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗ рдЧрдП рдереЗ, рдЬрд┐рдиреНрд╣реЗрдВ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХ рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрдВрддрднрд╛рд╖рдг


рдПрд▓рд╕реАрдбреА рдмреЛрд░реНрдб 5 рд╡реА рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реИред MSP430 рд▓реЙрдиреНрдЪрдкреИрдб рдкрд░, рдХреЗрд╡рд▓ 3.3V рд╡рд╛рдпрд░реНрдб рд╣реИред рдЙрдирд╕реЗ, рдмреЛрд░реНрдб рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕реБрд╕реНрддред рд╕рдВрднрд╡рддрдГ, R3 * рд░реЛрдХрдиреЗрд╡рд╛рд▓рд╛ рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ, рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдЪрдордХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди USB рдЗрдирдкреБрдЯ рдкрд░ рдкрд┐рди рдХреЛ рдЯрд╛рдВрдХрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдЗрд╕рдореЗрдВ рд╕реЗ 5V рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рднреА рдХрд╛рдо рд╣реЛрддрд╛ рд╣реИ :) рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рддреИрдпрд╛рд░ рдЙрддреНрдкрд╛рдж рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рд▓реЗрдЖрдЙрдЯ рд╣реИред

рдореИрдВ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдмреЛрд░реНрдб рдкрд░, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЙрдЪреНрдЪрддрдо 4 рдЦрдВрдб рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╣реИрдВ, рдФрд░ рдмрд╛рдИрдВ рдУрд░ рдЫреЛрдЯреЗ рд╣реИрдВ ред

рдкреВрд░реНрдг рдлрд░реНрдорд╡реЗрдпрд░ рдХреЛрдб рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛
рджреЗрдЦрдирд╛
 #include <msp430g2553.h> #define CS1 BIT1 //    #define CS2 BIT2 //    #define CLK BIT5 //  #define D BIT7 //   char flag_next=0; //      (   ) /* "1"    */ void bit1() { P1OUT &= ~D; P1OUT &= ~CLK; P1OUT |= CLK; } /* "0"    */ void bit0() { P1OUT |= D; P1OUT &= ~CLK; P1OUT |= CLK; } /* *  ( ) */ void delay( unsigned int ms) { while (ms--) __delay_cycles(16000); } /*      */ void spi_IO( unsigned int data ) { unsigned int i; for( i = 0; i < 8; i++ ) { //      if( data & 0x80 ) bit1(); else bit0(); data <<= 1; } } /* *       */ int char2byte( char ch ){ switch(ch){ case '1' : return 0x06; case '2' : return 0x5B; case '3' : return 0x4F; case '4' : return 0x66; case '5' : return 0x6D; case '6' : return 0x7D; case '7' : return 0x07; case '8' : return 0x7F; case '9' : return 0x6F; case 'O' : case 'o' : case '0' : return 0x3F; case 'a' : case 'A' : return 0x77; case 'b' : case 'B' : return 0x7C; case 'c' : case 'C' : return 0x39; case 'd' : case 'D' : return 0x5E; case 'e' : case 'E' : return 0x79; case 'f' : case 'F' : return 0x71; case '-' : return 0x40; case ' ' : return 0x00; case 'p' : case 'P' : return 0x73; case 'g' : case 'G' : return 0x31; case 'l' : case 'L' : return 0x38; case 'h' : case 'H' : return 0x76; case 'y' : case 'Y' : return 0x38; case 'r' : case 'R' : return 0x50; case 'u' : return 0x1C; case 'U' : return 0x3E; case '|' : return 0x30; case '~' : return 0x01; //   case '_' : return 0x08; //  case '=' : return 0x09; //    case 'j' : return 0x21; //    (      - //   jkmn  ) case 'k' : return 0x03; //    case 'm' : return 0x0C; //    case 'n' : return 0x18; //    default: return 0x00; } } /* *    * data -  * n -   * dot -   () */ void print_LCD( char data[], char n, char dot ) { unsigned char copy[8]; unsigned char i; if(n<1) return ; if(n>8) n=8; for( i = 0; i < 8; i++ ) if(i+1>n) copy[i] = ' ' ; else copy[i] = data[i]; //  //   4  P1OUT |= CS1; for(i=0;i<4;i++){ if( dot & 0x80 ) spi_IO(char2byte(copy[i])+0x80); else spi_IO(char2byte(copy[i])); dot <<= 1; } // 4  ,   ( ) bit0(); bit0(); bit0(); bit0(); //   bit0(); bit1(); bit1(); bit0(); P1OUT &= ~CS1; //   4  P1OUT |= CS2; for(i=4; i<8; i++){ if( dot & 0x80 ) spi_IO(char2byte(copy[i])+0x80); else spi_IO(char2byte(copy[i])); dot <<= 1; } // 4  ,   ( ) bit0(); bit0(); bit0(); bit0(); //   bit1(); bit0(); bit0(); bit0(); P1OUT &= ~CS2; } /* *  LCD */ void initLCD(){ P1OUT |= CS1+CS2; //      ~CS  "0" // ( -  ,     "1") //       spi_IO(0); spi_IO(0); spi_IO(0); spi_IO(0); // 4   spi_IO(0x07); // 4   + 4  P1OUT &= ~(CS1 + CS2); //  ~CS=1    (   ) P1OUT |= CS2; //  ~CS=0   -      spi_IO(0); spi_IO(0); spi_IO(0); spi_IO(0); //  4  spi_IO(0x08); // 4   + 4  P1OUT &= ~(CS2 + CS1); //  ~CS=1 (!) } /* *   */ void clear_LCD() { print_LCD( " " , 8, 0); //       -     } /* *  */ void demo() { int demo_n = 1; while(1){ switch(demo_n){ case 0:{ int ms=50; while(1){ print_LCD("~~ " ,8,0); delay(ms); print_LCD(" ~~ " ,8,0); delay(ms); print_LCD(" ~~ " ,8,0); delay(ms); print_LCD(" ~~ " ,8,0); delay(ms); print_LCD(" ~~ " ,8,0); delay(ms); print_LCD(" ~~ " ,8,0); delay(ms); print_LCD(" ~~" ,8,0); delay(ms); print_LCD(" k" ,8,0); delay(ms); print_LCD(" 1" ,8,0); delay(ms); print_LCD(" m" ,8,0); delay(ms); print_LCD(" __" ,8,0); delay(ms); print_LCD(" __ " ,8,0); delay(ms); print_LCD(" __ " ,8,0); delay(ms); print_LCD(" __ " ,8,0); delay(ms); print_LCD(" __ " ,8,0); delay(ms); print_LCD(" __ " ,8,0); delay(ms); print_LCD("__ " ,8,0); delay(ms); print_LCD("n " ,8,0); delay(ms); print_LCD("| " ,8,0); delay(ms); print_LCD("j " ,8,0); delay(ms); if(flag_next==1) { demo_n=1; flag_next=0; break; } } } case 1:{ clear_LCD(); while(1){ print_LCD( " H" , 8, 0); delay(200); print_LCD( " HE" , 8, 0); delay(200); print_LCD( " HEL" , 8, 0); delay(200); print_LCD( " HELL", 8, 0); delay(200); print_LCD( " HELLO", 8, 0); delay(200); print_LCD( " HELLO ", 8, 0); delay(200); print_LCD( " HELLO ", 8, 0); delay(1000); print_LCD( "HELLO ", 8, 0); delay(200); print_LCD( "ELLO ", 8, 0); delay(200); print_LCD( "LLO " , 8, 0); delay(200); print_LCD( "LO " , 8, 0); delay(200); print_LCD( "O " , 8, 0); delay(200); print_LCD( " H" , 8, 0); delay(200); print_LCD( " HA" , 8, 0); delay(200); print_LCD( " HAB" , 8, 0); delay(200); print_LCD( " HABR", 8, 1); delay(200); print_LCD( " HABRR", 8, 2); delay(200); print_LCD( " HABRRu", 8, 4); delay(200); print_LCD( " HABRRu ", 8, 8); delay(1000); print_LCD( "HABRRu ", 8, 16); delay(200); print_LCD( "ABRRu ", 8, 32); delay(200); print_LCD( "BRRu ", 8, 64); delay(200); print_LCD( "RRu " , 8, 128); delay(200); print_LCD( "Ru " , 8, 0); delay(200); print_LCD( "u " , 8, 0); delay(200); if(flag_next==1) { demo_n=2; flag_next=0; break; } } //while } case 3:{ clear_LCD(); int ms=50; while(1){ print_LCD( "~~~~~~~~",8,0); delay(ms); print_LCD( "kkkkkkkk ",8,0); delay(ms); print_LCD( "11111111",8,0); delay(ms); print_LCD( "mmmmmmmm ",8,0); delay(ms); print_LCD( "nnnnnnnn ",8,0); delay(ms); print_LCD( "||||||||",8,0); delay(ms); print_LCD( "jjjjjjjj ",8,0); delay(ms); if(flag_next==1) { demo_n=0; flag_next=0; break; } } } } } } /* * main.c */ void main( void) { //   WDTCTL = WDTPW + WDTHOLD; //   -   delay() BCSCTL1 = CALBC1_16MHZ; DCOCTL = CALDCO_16MHZ; // These are the pins we need to drive. P1DIR |= CLK + D + CS1 + CS2; P1SEL &= ~BIT3; //  1.3    P1DIR &= ~BIT3; // Port 1 P1.3 (push button) as input, 0 is input P1REN |= BIT3; //   P1IE |= BIT3; //     P1IFG &= ~BIT3; //    delay(500); // ,     initLCD(); //  LCD __bis_SR_register(GIE); //    demo(); //   } #pragma vector=PORT1_VECTOR __interrupt void Port_1( void) { P1IFG &= ~BIT3; //    flag_next=1; //      } 
рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рджрд┐рд▓ рдХреЗ рдмреЗрд╣реЛрд╢ рди рд╣реЛрдВ :)

рдЦреИрд░, рдХрд╛рдо рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡реАрдбрд┐рдпреЛ


рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХ рд╕реБрдЭрд╛рд╡, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ!
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрдпреЛрдЧреА рд▓рдЧреЗрдЧреАред
рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЬрд▓реНрдж рд╣реА рдорд┐рд▓рддреЗ рд╣реИрдВред

PS рдФрд░ рдорд┐рдирд┐рдХ рдореЗрдВ рднреА рдРрд╕реЗ рдХреВрд▓ рдерд░реНрдорд▓ рдкреНрд░рд┐рдВрдЯрд░ ...;)

Source: https://habr.com/ru/post/In159083/


All Articles