Bài tập GPIO.

Lê Thành Nhân

Thành Viên PIF
Đây là đoạn code bài tập về nhà của em, chỉ mới làm xong phần ouput và đổ code lên main .
Code hiệu ứng cho led :
Code:
#include <msp430g2553.h>
  unsigned int array[24]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x81,0x42,0x24,0x18,0x24,0x42,0x81,0xff,0xA0,0x50,0x28,0x14,0x0A,0x05,0xFF};                           
  unsigned int i ;
     
  unsigned int main()
{
    WDTCTL = WDTHOLD + WDTPW ;
    P1SEL  &= ~0xff ;
    P1SEL2 &= ~0xff ;
    P1DIR |=  0xff ;
    while(1)
    {
        for(i=0;i<=23;i++)
        {
            P1OUT = array[i];
            _delay_cycles(50000);
        }
    }
}
Các bạn góp ý thêm các hiệu ứng cho nó đẹp.
Video demo :
:D
 

Lê Thành Nhân

Thành Viên PIF
Thêm nữa nè :
Code:
for ( i =0; i < 8; i ++)
P1OUT = 0xFF - ( 0x80>>i);
_delay_cycles(50000);
for ( i =0; i <8;i++)
P1OUT = 0xFF - ( 0x01<<i);
_delay_cycles(50000);
Cảm ơn bạn, mình đã thêm đoạn code này vào hồi tối rồi, nhưng chưa có update lên , bạn còn đoạn code nào nữa không ?
 

Tuất

Thành Viên PIF
hix code này em thây chạy được mà sao không giông y đồ của em gì hêt, nghĩ một đằng code chạy một nẻo :gach, code mây anh đẹp quá, bữa nào gặp hỏi mây anh luôn có nhiều chỗ em chưa hiểu :5cool_beat_plaster:, thấy mấy cái led mấy anh sáng mê ghê :4cool_beauty:

#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= 0xFF;
unsigned int i,j;
while(1)
{ P1OUT |=0xFF;
for (i=0;i<=7;i++)
{ P1OUT=P1OUT<<1;
_delay_cycles(500000);}
P1OUT|=~P1OUT;
_delay_cycles(500000);
for (i=0;i<=7;i++)
{P1OUT=P1OUT>>1;
_delay_cycles(500000);}
P1OUT|=~P1OUT;
_delay_cycles(500000);
P1OUT=0xAA;
for (i=0;i<=19;i++)
{P1OUT=~P1OUT;
_delay_cycles(250000);}
P1OUT |=0xFF;
_delay_cycles(500000);}}
 

Trong Phuong

Trứng gà
e muốn tăng tốc độ nháy của led khi nhấn button thì làm thế nào đây huynh đệ?!:D
e đã thử dùng biến gắn với _delay_cycles nhưng ko dc:D
 

Lê Thành Nhân

Thành Viên PIF
e muốn tăng tốc độ nháy của led khi nhấn button thì làm thế nào đây huynh đệ?!:D
e đã thử dùng biến gắn với _delay_cycles nhưng ko dc:D
Cái này thì với phần GPIO thôi chưa đủ khả năng đâu , bạn muốn làm được thì phải đợi học đến bài timer hay ít nhất là phải biết cách dùng pwm ấy . :-(
 

Lê Thành Nhân

Thành Viên PIF
hix code này em thây chạy được mà sao không giông y đồ của em gì hêt, nghĩ một đằng code chạy một nẻo :gach, code mây anh đẹp quá, bữa nào gặp hỏi mây anh luôn có nhiều chỗ em chưa hiểu :5cool_beat_plaster:, thấy mấy cái led mấy anh sáng mê ghê :4cool_beauty:

#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= 0xFF;
unsigned int i,j;
while(1)
{ P1OUT |=0xFF;
for (i=0;i<=7;i++)
{ P1OUT=P1OUT<<1;
_delay_cycles(500000);}
P1OUT|=~P1OUT;
_delay_cycles(500000);
for (i=0;i<=7;i++)
{P1OUT=P1OUT>>1;
_delay_cycles(500000);}
P1OUT|=~P1OUT;
_delay_cycles(500000);
P1OUT=0xAA;
for (i=0;i<=19;i++)
{P1OUT=~P1OUT;
_delay_cycles(250000);}
P1OUT |=0xFF;
_delay_cycles(500000);}}
Lần sau em nên chèn code vào bài bằng công cụ chèn code đấy, cho nó dễ nhìn, hì .
 

Lê Thành Nhân

Thành Viên PIF
Anh copy lại code của em và cho chạy thử , thấy hiệu ứng cũng hay đó mà !
Anh cho delay thời gian lâu hơn để em thấy rõ cách nó chạy từng dòng lệnh luôn cho dễ hiểu .

Code:
#include <msp430g2553.h>
 
  void main(void)
  {
    WDTCTL = WDTPW + WDTHOLD;
    P1DIR |= 0xFF;
  unsigned int i,j;  // khai bao du bien j .
    while(1)
            { P1OUT |=0xFF; // tat toan bo led .
          for (i=0;i<=7;i++)
            {
              P1OUT=P1OUT<<1 ;
              _delay_cycles(500000);  // dua len sang toan bo .
              }
                P1OUT|=~P1OUT;    // lenh dao toan bo bit 1.
              
                _delay_cycles(3000000);  // sang toan bo led.
          for (i=0;i<=7;i++)
                {P1OUT=P1OUT>>1;
                _delay_cycles(500000);
                }
                  P1OUT|=~P1OUT;
                  _delay_cycles(500000);
                  P1OUT=0xAA;
                  _delay_cycles(2000000);
            for (i=0;i<=19;i++)  //
                {P1OUT=~P1OUT;
                _delay_cycles(2500000);}
                P1OUT |=0xFF;
                _delay_cycles(2000000);
}
}
:D
 

omega5161

Thành Viên PIF
e muốn tăng tốc độ nháy của led khi nhấn button thì làm thế nào đây huynh đệ?!:D
e đã thử dùng biến gắn với _delay_cycles nhưng ko dc:D
em có thể dùng vòng lặp kết hợp với _delay_cycles();
ví dụ thế này
for(i=0;i<x;x++)
{
_delay_cycles(500);
}
em có thể thay đổi biến x bằng cách nhấn nút, như vậy sẽ có thời gian delay theo ý muốn, chúc e thành công
 

Trong Phuong

Trứng gà
em thấy trong example button_int có đoạn code
Code:
P2DIR &= ~BIT0 + ~BIT1; // P2.0, P2.1 input
,thấy kì kì
Code:
P2DIR &= ~(BIT0 + BIT1)//set P2.0 P2.1 input
đúng hơn chứ?!:D
 

Manhdd

Cố Vấn CLB
Staff member
em thấy trong example button_int có đoạn code
Code:
P2DIR &= ~BIT0 + ~BIT1; // P2.0, P2.1 input
,thấy kì kì
Code:
P2DIR &= ~(BIT0 + BIT1)//set P2.0 P2.1 input
đúng hơn chứ?!:D
Uhm. Đúng đó em. Anh nhầm tý :-p
 
Top