[C8] Hỏi về code trên led7seg

pas_mgcaru

Thành Viên PIF
mới lấy cái kit launchpad :1cool_byebye: ngồi vọc phá code sùm thui chứ em củng mới đi học ngày đầu nhưng mà có mấy chổ chưa hiểu:
+tại sao khi hiển thị led7seg phải dùng lệnh POUT1^=,mà ko dùng lênh khác. &=,|=...
+nếu cho POUT1=0xff (thì nó ko lên)
+ cho POUT=01010101(theo số nhị phân cho tường minh) thì có dk ko?
+cho em xin ít cái code mẩu về PxREN,PxIN,PxSEl.. để tìm hiểu..
+code em bên dưới nếu có thể rút gọn hay chỉnh sửa gì thì giúp em(code này cho led7seg hiển thị từ 0->6) thanks nhìu:botay:

Code:
#include <msp430.h>
 
unsigned int i = 0;
 
 
void init_port(void)
{
 
    P1DIR |= 0xff;
}
 
 
void main (void)
{
 
    WDTCTL = WDTPW + WDTHOLD;
 
    init_port();
 
    while (1) //__ Vong lap vo tap
    {
        P1OUT = 0xff;
        P1OUT ^= 0x3f;//0
        __delay_cycles(1000000);
        P1OUT = 0xff;
        P1OUT ^= 0x06;//1
        __delay_cycles(1000000);
        P1OUT = 0xff;
        P1OUT ^= 0x5d;//2
        __delay_cycles(1000000);
        P1OUT = 0xff;
        P1OUT ^= 0x4f;//3
        __delay_cycles(1000000);
        P1OUT = 0xff;
        P1OUT ^= 0x66;//4
        __delay_cycles(1000000);
        P1OUT = 0xff;
        P1OUT ^= 0x6b;//5
        __delay_cycles(1000000);
        P1OUT = 0xff;
        P1OUT ^= 0x7b;//6
        __delay_cycles(1000000);
 
    }
}
 

honghiep

Cố Vấn CLB
Staff member
+tại sao khi hiển thị led7seg phải dùng lệnh POUT1^=,mà ko dùng lênh khác. &=,|=...
Việc "phải" ở đây là hoàn toàn không đúng. Nếu bạn muốn có thể sử dụng bất cứ toán tử nào bởi ngay toán tử "^" cũng có thể được biểu diễn bởi các toán tử khác
+nếu cho POUT1=0xff (thì nó ko lên)
Vì bạn đang sử dụng LED 7 đoạn anot chung nên khi P1OUT = 0xff; (Các pin đều ở mức 1) thì tất nhiên là không có LED nào có thể sáng được
+ cho POUT=01010101(theo số nhị phân cho tường minh) thì có dk ko?
Nếu bạn viết bằng CCS thì không được, bởi CCS không hỗ trợ cách viết này
 

pas_mgcaru

Thành Viên PIF
nếu gán trực tiếp ko qua xor P1OUT=0x.xx bất kì thì hiển thị 1 số ko wa số khác dk.
 

pas_mgcaru

Thành Viên PIF
nếu gán trực tiếp cho POUT1 giá trị bất kỳ chẵng hạn
POUT1=0xed;
POUT1=0x4f;
POUT1=0x45;
ko dùng phép toán ^= thì ko hiển thị dk hết 3 cái trên chỉ hiển thị dk 1 cái.
 

honghiep

Cố Vấn CLB
Staff member
nếu gán trực tiếp cho POUT1 giá trị bất kỳ chẵng hạn
POUT1=0xed;
POUT1=0x4f;
POUT1=0x45;
ko dùng phép toán ^= thì ko hiển thị dk hết 3 cái trên chỉ hiển thị dk 1 cái.
Sau mỗi lệnh bạn có cho delay để mắt kịp nhìn không? Nếu chưa có thì thêm vô nhé
P.S: P1OUT chứ không phải POUT1 nhé :)
 
có delay thì tính toán delay cho hợp lý em nhé. Tốt nhất là viết hàm delay dùng timer, như thế theo dõi quá trình delay trong khi debug sẽ tiện hơn.
em có thể dùng breakpoint để xem khi nào hết delay.
P/S: hình như PIF mình chưa có 1 cái tut nào hướng dẫn debug bằng CCS :gach:
 

Kisses Hacker

Art Supporter
Staff member
:Dnhầm.có delay (1M) lun vẫn ko next qua trạng thái kế tiếp:gach
Bạn delay bao nhiêu?

Ví dụ 1 đoạn code:

P1OUT = 0x01;
_delay_cycles(1000000); // 1 000 000us = 1s
P1OUT = 0x02;
_delay_cycles(1000000);
P1OUT = 0x04;
_delay_cycles(1000000);
 

pas_mgcaru

Thành Viên PIF
:Dnhầm.có delay (1M) lun vẫn ko next qua trạng thái kế tiếp:gach
Bạn delay bao nhiêu?

Ví dụ 1 đoạn code:

P1OUT = 0x01;
_delay_cycles(1000000); // 1 000 000us = 1s
P1OUT = 0x02;
_delay_cycles(1000000);
P1OUT = 0x04;
_delay_cycles(1000000);
em làm giống giống vậy đó
nhưng chú led ko next sang trạng thái k...
em mới đi học bửa đầu C8 nên còn gà lắm chưa pít gì. chĩ mò mẫm dk đoạn code như vậy thui
 

uhphuc44

Trứng gà
Mấy anh, chị, bạn (nhiều đối tượng quá hihi:D) cho hỏi sao ở đây lại dùng "P1DIR |= 0xff" hay 0x gì gì đó trong khi trong giáo trình lại biểu diễn bằng BIT0, BIT6, hay BIT...gì gì đó. Thanks in advance!!!
 

Kisses Hacker

Art Supporter
Staff member
0xFF (hexa) = 1111 1111 (nhị phân).

BIT0, BIT1, BIT2,... là những từ được định nghĩa sẵn trong file msp430g2553.h, giúp chúng ta dễ dàng hơn khi lập trình.

Ví dụ:
BIT0 = 0x01 = 0000 0001
BIT1 = 0x02 = 0000 0010
BIT5 = 0x20 = 0010 0000

Có thể thấy là 0xFF = BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7

Nếu có từ nào không hiểu các bạn có thể nhấn giữ CTRL rồi click vào từ đó, CCS sẽ chuyển đến dòng định nghĩa của từ đó cho bạn.
 
Top