Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <msp430x14x.h>
- #define set_bit(var,bitNo) ((var)|=1<<(bitNo)) //ustawienie bitu na pozycji bitNo
- #define clr_bit(var,bitNo) ((var)&=~(1<<(bitNo))) //czyszczenie bitu na pozycji bitNo
- #define E 3 //P2.3
- #define RS 2 //P2.2
- #define DISPLAY P2OUT // wyswietlacz pod3aczony do portu P2
- #define _50ms 2000
- #define _5ms 200
- #define _50us 2
- #define _2ms 80
- #define _200us 8
- #define CLR_DISP 0x01 // clear display
- #define CUR_HOME 0x02 // return home
- #define ENTRY_INC 0x06 // entry mode increment
- #define ENTRY_INC_ROL 0x07 // entry mode increment with rol data
- #define ENTRY_DEC 0x04 // entry mode decrement
- #define ENTRY_DEC_ROL 0x05 // entry mode decrement witch rol dat
- #define DISP_OFF 0x08 // all display off
- #define DISP_ON 0x0c // all display on
- #define DATA_ROL_LEFT 0x18 // rol data left
- #define DATA_ROL_RIGHT 0x1c // rol data right
- #define CUR_SHIFT_LEFT 0x10 // shift coursor left
- #define CUR_SHIFT_RIGHT 0x14 // shift coursor right
- #define DD_RAM_ADDR 0x80 // set DD_RAM 1 line
- #define DD_RAM_ADDR2 0xc0 // set DD_RAM 2 line
- #define DD_RAM_ADDR3 0x28 //
- #define CG_RAM_ADDR 0x40 // set CG_RAM
- //polecenia steruj1ce wyowietlaczem
- #define ON_LCD 0x0c // wlaczenie wyswietlania
- #define CLR_LCD 0x01 // czyszczenie wyswietlacza
- #define ROW 0x40 // jeden wiersz
- const unsigned char message[]="HELLO WORLD !!!";
- void ini_display(void);
- void send_char (unsigned char c);
- void send_cmd(unsigned char cmd);
- void toggle_E(void);
- void wait_25us(void);
- void wait (unsigned int n);
- void zad1();
- void zad2();
- void zad3();
- void main (void)
- {
- WDTCTL = WDTPW + WDTHOLD;
- P2DIR=~BIT0; //linia P2.O pozostaje jako wejocie
- ini_display();
- P4DIR &= ~0x10;
- //inicjalizacja wyswietlacza
- //zad1();
- //zad2();
- zad3();
- }
- void ini_display(void)
- {
- wait(_50ms); // czekaj na ustabilizowanie napiecia
- DISPLAY=0x30; // procedura inicjalizacyjna
- toggle_E();
- wait(_5ms);
- toggle_E();
- wait(_200us);
- toggle_E();
- wait(_200us); //koniec inicjalizacji
- DISPLAY&=~BIT4; //interfejs 4-bitowy
- toggle_E();
- send_cmd(ROW);
- send_cmd(ON_LCD);
- send_cmd(CLR_LCD);
- wait(_2ms);
- }
- void send_char (unsigned char c)
- {
- unsigned char temp;
- //wysylanie starszego polbajtu
- temp=c&0xf0;
- DISPLAY&=0x0f;
- DISPLAY|=temp;
- set_bit(DISPLAY,RS); //wysylane beda dane
- toggle_E();
- //wait(_0,5us) - stosowac przy wiekszych czestotliwosciach zegara
- //wysylanie mlodszej polowki bajtu
- temp=c&0x0f;
- temp=temp<<4;
- DISPLAY&=0x0f;
- DISPLAY|=temp;
- toggle_E();
- //wait(_05us);
- wait (_50us);
- }
- void send_cmd(unsigned char cmd)
- {
- unsigned char temp;
- temp=cmd&0xf0;
- DISPLAY&=0x0f;
- DISPLAY|=temp;
- clr_bit(DISPLAY,RS);
- toggle_E();
- //wait(_0.5us);
- temp=cmd&0x0f;
- temp=temp<<4;
- DISPLAY&=0x0f;
- DISPLAY|=temp;
- toggle_E();
- // wait(_0.5us);
- wait (_50us);
- }
- void toggle_E(void)
- {
- set_bit (DISPLAY,E);
- wait_25us (); //min 0,25us
- clr_bit(DISPLAY,E);
- }
- void wait_25us(void) // 2 cykle (przekazanie arg.)+5(call)+1(i=1)+3(i<n)+3(i++)+3(i<n)+3(ret)=20cykli
- { // 20*1/800kHz=25us
- unsigned int i;
- for(i=0;i<1;i++);
- }
- void wait(unsigned int n)
- {
- unsigned int i;
- for(i=0;i<n;i++)
- wait_25us();
- }
- //----------ZADANIE1--------------
- void zad1(){
- while(1){
- int i =0;
- if( (P4IN & 0x10) == 0){
- send_cmd(CLR_DISP);
- wait(50);
- i = 0;
- send_cmd(DD_RAM_ADDR2);
- while (message[i])
- {
- send_char(message[i]);
- i++;
- }
- }
- if((P4IN & 0x20) == 0){
- send_cmd(CLR_DISP);
- wait(50);
- i = 0;
- send_cmd(DD_RAM_ADDR);
- while (message[i])
- {
- send_char(message[i]);
- i++;
- }
- }
- }
- }
- //----------ZADANIE 2--------------
- void zad2(){
- while(1){
- int i =0;
- if( (P4IN & 0x10) == 0){
- send_cmd(CLR_DISP);
- wait(50);
- i = 0;
- send_cmd(DD_RAM_ADDR2);
- while (message[i])
- {
- send_char(message[i]);
- i++;
- }
- }
- if((P4IN & 0x20) == 0){
- send_cmd(CLR_DISP);
- wait(50);
- i = 0;
- send_cmd(DD_RAM_ADDR);
- while (message[i])
- {
- send_char(message[i]);
- i++;
- }
- }
- if((P4IN & 0x40) == 0){
- send_cmd(DATA_ROL_LEFT);
- wait(500);
- }
- if((P4IN & 0x80) == 0){
- send_cmd(DATA_ROL_RIGHT);
- wait(500);
- }
- }
- }
- //-----------ZADANIE 3----------
- void zad3(){
- int i = 0;
- send_cmd(CLR_DISP);
- wait(50);
- i = 0;
- send_cmd(DD_RAM_ADDR);
- while (message[i])
- {
- send_char(message[i]);
- i++;
- }
- int a = strlen(message)- 1;//sizeof(message)/sizeof( unsigned char);
- while(1){
- i = 0;
- if((P4IN & 0x40) == 0){
- send_cmd(DATA_ROL_LEFT);
- a--;
- wait(500);
- }
- if((P4IN & 0x80) == 0){
- send_cmd(DATA_ROL_RIGHT);
- a++;
- wait(500);
- }
- i = (strlen(message)- 1) - a;
- if(a < strlen(message)- 1){
- send_cmd(DD_RAM_ADDR2);
- while (i!=0)
- {
- send_char(message[i]);
- i--;
- }
- wait(500);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement