You are on page 1of 39

TRƯỜNG ĐẠI HỌC CẦN THƠ

KHOA CÔNG NGHỆ

ÔN TẬP
THỰC TẬP KỸ THUẬT VI XỬ LÍ

Năm Học 2018 - 2019


Biên soạn: Sinh Viên khóa K41
Những điều cần lưu ý:
PxDIR= : là khai báo ngõ ra (BIT 1).
PxDIR&=~ : là khai báo ngõ vào (BIT 0).
PxIN = : khai báo tác động vào.
Động cơ bước nằm tương ứng với các BIT 0,1,2,3.
RELAY nằm ở BIT 4 (0x10).
Speaker nằm ở BIT5 (0x20).
SCAN LED 7 đoạn đã được giải mã nên vị trí các LED 7 đoạn 1,2,3,4 tương ứng với Px0x00,
Px0x01, Px0x02, Px0x03.
Nên học thuộc mã led 7 đoạn để tối ưu thời gian gõ code.
Khi xài các port có tác động ngõ vào thì ta phải jum-out ngay vị trí PORT đó, sau khi nạp xong
chương trình trên Fet thì chuyển sang jum-in. Hoặc ta có thể dùng PORT6 để khai báo ngõ
vào phím đơn để không cần phải thao tác các Jum-in/out.
While(!(P7IN&0x00)) phát hiện cạnh lên dùng để chống dội phím hiệu quả hơn.
PORT1, POR2 dành cho ngắt ngoài INTERRUPT.
PORT7 chỉ dùng cho phím hex.
Lưu ý khi viết chương trình ngắt ngoài, kết thúc xong 1 phím ngắt phải xóa cờ ngắt phím đó
(VD: P2IFG&=~0x04).
Khi viết chương trình nhấn phím hex phải quét các cột phím hex bằng các câu lệnh
P7OUT=0xfe (hoặc P4OUT&=~0x01), P7OUT=0xfd (hoặc P4OUT&=~0x02), P7OUT=0xfb (hoặc
P4OUT&=~0x04).
Lưu ý phím Hex số 1 bắt đầu từ phía trên góc trái đếm qua phải!
Khi nạp chương trình, nếu cảm thấy chương trình viết đúng mà không chạy thì nên kiểm tra
các vấn đề sau:
- Có cài đặt Option chưa. Chọn đúng Msp430fg2553.h chưa?
- Có đầy đủ {} chưa?
- Kiểm tra chương trình có nạp đúng chưa, nếu chắc chắn hơn, ta có thể tạo 1 file project
mới, cài đặt và nạp lại chương trình đó.
- Khai báo PORT cho từng chức năng đúng chưa?
- Kiểm tra phần cứng (dây, port) có hở không, các phím nhấn có bị hư không?
ĐIỀU KHIỂN LED ĐƠN
1. Viết chương trình cho led đơn dịch trái 1 lần, sau đó dịch phải
#include "msp430g2553.h"
char led[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //LED ANODE chung
char led1[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //LED ANODE chung
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //khai bao tat ca cac chan deu la ngo ra
while(1)
{
for(int i=0;i<8;i++)
{
P1OUT=led[i];
__delay_cycles(500000);
}
for(int i=0;i<8;i++)
{
P1OUT=led1[i];
__delay_cycles(500000);
}
}

2. Viết chương trình cho led đơn chạy thuận 3 lần ,sau đó chạy ngược lại 2
lần.
#include "msp430g2553.h"
char led[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //LED ANODE chung
char led1[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //LED ANODE chung
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //khai bao tat ca cac chan deu la ngo ra
while(1)
{
for(int a=0;a<2;a++)
{
for(int i=0;i<8;i++)
{
P1OUT=led[i];
__delay_cycles(500000);
}
}
for(int b=0;b<2;b++)
{
for(int i=0;i<8;i++)
{
P1OUT=led1[i];
__delay_cycles(500000);
}
3. Viết chương trình điều khiển 8 led đơn, 4 bit cao và 4 bit thấp ON/OFF xen
kẽ nhau 25 lần.
#include "msp430g2553.h" //trong phong tt.vixuly dung chip msp430fr4618
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //khai bao tat ca cac chan deu la ngo ra
for(int i=0,i<25,i++)
{
P1OUT=0x0f;
__delay_cycles(500000);
P1OUT=0xf0;
__delay_cycles(500000);
}
P1OUT=0x00;
}

ĐIỀU KHIỂN LED 7 ĐOẠN

4. Viết chương trình hiển thị led 7 đoạn số 2019


#include "msp430g2553.h"

char led7[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//LED ANODE


chung
int i=2019;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //data
P2DIR=0x0f; //scan

while(1)
{
P1OUT=led7[i/1000]; //Khai bao o vi tri hang ngan
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(5000);

P1OUT=led7[(i%1000)/100]; //Khai bao o vi tri hang tram


P2OUT=0x01; //chon led7 doan con thu 2
__delay_cycles(5000);

P1OUT=led7[(i%100)/10]; //Khai bao o vi tri hang chuc


P2OUT=0x02; //chon led7 doan con thu 3
__delay_cycles(5000);

P1OUT=led7[i%10]; //Khai bao o vi tri hang don vi


P2OUT=0x03; //chon led7 doan con thu 4
__delay_cycles(5000);
}

}
5. Viết chương trình led 7 đoạn đếm từ 1 đến 9 tại vị trí led thứ 1.
#include "msp430g2553.h"
char led7[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//LED ANODE
chung

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //data
P2DIR=0x0f; //scan
int i;

while(1)
{
for(i=0;i<10;i++)
{
P1OUT=led7[i]; //Khai bao o vi tri thu i
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(500000);
}
__delay_cycles(500000);
}
}

6. Viết chương trình hiển thị led 7 đoạn. Đếm lên từ 0 đến 9 tại vị trí led thứ
1. Đếm xuống từ 9 về 0 tại vi trí led thứ 2. Đếm chẵn lên từ 0->2->4->6->8
tại vị trí led thứ 3. Đếm lẻ xuống từ 9->7->5->3->1 tại vị trí led thứ 4. Thời
gian nghỉ giữa các giai đoạn là 1s. Sau khi thực hiện xong phải tắt hết các
led 7 đoạn.
#include "msp430g2553.h"
char led7[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//LED ANODE
chung

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //data
P2DIR=0x0f; //scan
int i;

while(1)
{
for(i=0;i<10;i++) //Dem len 0->9
{
P1OUT=led7[i]; //Khai bao o vi tri thu i
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(500000);
}
P2OUT=0x00;
__delay_cycles(1000000);

for(i=9;i>=0;i--) //Dem xuong tu 9->0


{
P1OUT=led7[i]; //Khai bao o vi tri thu i
P2OUT=0x01; //chon led7 doan con thu 2
__delay_cycles(500000);
}
P2OUT=0x00;
__delay_cycles(1000000);

for(i=0;i<10;i=i+2) //Dem chan len tu 0,2,4,6,8


{
P1OUT=led7[i]; //Khai bao o vi tri thu i
P2OUT=0x02; //chon led7 doan con thu 3
__delay_cycles(500000);
}
P2OUT=0x00;
__delay_cycles(1000000);

for(i=9;i>=0;i=i-2) //Dem le xuong tu 9->7->5->3->1 o led7 doan thu 4


{
P1OUT=led7[i]; //Khai bao o vi tri thu i
P2OUT=0x03; //chon led7 doan con thu 4
__delay_cycles(500000);
}
P2OUT=0x00;
__delay_cycles(1000000);
}
}

7. Viết chương trình hiển thị led 7 đoạn. đếm xuống từ giá trị 79 về 35.
#include "msp430g2553.h"
char led7[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//LED ANODE
chung

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //data
P2DIR=0x0f; //scan
int n;
int a;

while(1)
{
for(n=79;n>=35;n--)
{
for(a=0;a<1;a++) //Vong lap for nay de lam so dem cham, do khong the thay
//doi delay_cycles
{
P1OUT=led7[n/100]; //Khai bao o vi tri thu i
P2OUT=0x01; //chon led7 doan con thu 1
__delay_cycles(5000);

P1OUT=led7[(n%10)/10]; //Khai bao o vi tri thu i


P2OUT=0x02; //chon led7 doan con thu 1
__delay_cycles(5000);
}
}
}
}

8. Viết chương trình hiển thị led 7 đoạn, đếm giá trị từ 000 đến 999.
#include "msp430g2553.h"
char led7[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//LED ANODE
chung

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //data
P2DIR=0x0f; //scan
int n;
int a;

while(1)
{
for(n=0;n<100;n++)
{
for(a=0;a<1;a++) //Vong lap for nay de lam so dem cham, do khong the
//thay doi delay_cycles
{
P1OUT=led7[n/100]; //Khai bao o vi tri thu i
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(5000);

P1OUT=led7[(n%10)/10]; //Khai bao o vi tri thu i


P2OUT=0x01; //chon led7 doan con thu 2
__delay_cycles(5000);

P1OUT=led7[n%10]; //Khai bao o vi tri thu i


P2OUT=0x02; //chon led7 doan con thu 3
__delay_cycles(5000);
}
}
}
}

9. Viết chương trình hiển thị led 7 đoạn, đếm lên từ 00 -> 98 ở led 1 và led 3,
sau đó đếm xuống từ 99 -> 1 tại vị trí led 2 và led 4 rồi dừng hẳn.
#include "msp430g2553.h"
char led7[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //data
P2DIR=0x0f; //scan
int m;
int n;
int a;

for(n=0;n<99;n=n+2)
{
for(a=0;a<30;a++) //Vong lap for nay de lam so dem cham, do khong the
//thay doi delay_cycles
{
P1OUT=led7[n/10]; //Khai bao o vi tri thu n/100
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(5000);

P1OUT=led7[n%10]; //Khai bao o vi tri thu n%10


P2OUT=0x02; //chon led7 doan con thu 3
__delay_cycles(5000);
}
}

for(m=99;m>=1;n=n-2)
{
for(a=0;a<30;a++) //Vong lap for nay de lam so dem cham, do khong the
//thay doi delay_cycles
{
P1OUT=led7[n/10]; //Khai bao o vi tri thu n/10
P2OUT=0x01; //chon led7 doan con thu 2
__delay_cycles(5000);

P1OUT=led7[n%10]; //Khai bao o vi tri thu n%10


P2OUT=0x03; //chon led7 doan con thu 4
__delay_cycles(5000);
}
}
P2OUT=0x00;

}
PHÍM ĐƠN, LED 7 ĐOẠN
10. Viết chương trình điều khiển led đơn thông qua phím đơn. Ấn nút 1,
led đơn vị trí 1 chớp – tắt 5 lần. Ấn nút 2, led đơn tại vị trí 2 chớp – tắt 5
lần.
#include "msp430g2553.h"
#include "intrinsics.h"
//------chuong trinh chinh------

void main( void )


{
//unsigned char leddon[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//int n=0;
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff;
P1OUT=0x00;
P2DIR&=~0x0C;
while(1)
{
if((P2IN&0x04)==0) //nhan nut 1
{
for(int i=0;i<5;i++)
{
__delay_cycles(50000); //chong doi phim
P1OUT=0x01;
__delay_cycles(50000);
P1OUT&=~0x01;
__delay_cycles(50000);
}
P1OUT=0x00;
}

if((P2IN&0x08)==0) //nhan nut 2


{
for(int i=0;i<5;i++)
{
__delay_cycles(50000); //chong doi phim
P1OUT=0x02;
__delay_cycles(50000);
P1OUT&=~0x02;
__delay_cycles(50000);
}
P1OUT=0x00;
}
}
}

11. Viết chương trình điều khiển led đơn thông qua phím đơn. Ấn 1 lần
led dịch trái 1 vòng. Ấn 2 lần led dịch phải 1 vòng.
#include "msp430g2553.h"
#include "intrinsics.h"
//------chuong trinh chinh------
unsigned char leddon[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int n=0;
// nen khai bao ben ngoai void main (bien toan cuc)

void main( void )

//khai bao ben trong void main (bien cuc bo)


{

WDTCTL = WDTPW + WDTHOLD;


P1DIR=0xff;
P2DIR&=~0x04;
while(1)
{
if((P2IN&0x04)==0) //nhan nut 1
{
__delay_cycles(500000); //chong doi phim
n++;
if(n==1)
{
for(int i=0;i<8;i++)
{
P1OUT=leddon[i];
__delay_cycles(500000);
}
P1OUT=0x00; //ra khoi vong lap for, dieu khien led tat het
}

if(n==2)
{
for(int i=7;i>=0;i--)
{
P1OUT=leddon[i];
__delay_cycles(500000);
}
P1OUT=0x00;
n=0; //phai khai bao n quay ve 0 trong if thu 2
}
}
}
}

12. Viết chương trình điều khiển led đơn thông qua phím đơn. Ấn nút 1
– 1 lần – led chớp – tắt xen kẽ 5 lần. Ấn nút 1 – 2 lần – dịch xuôi 2 lần. Ấn
nút 2- 2 lần – dịch 2 led 1 lượt sang trái,. Ấn nút 2 – 3 lần – dịch 3 led 1
lượt trái.
#include "msp430g2553.h"
#include "intrinsics.h"
//------chuong trinh chinh------
unsigned char leddon[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char ledxenke[]={0x55,0xaa};
unsigned char led2[]={0x03,0x06,0x0c,0x18,0x30,0x60,0xc0};
unsigned char led3[]={0x07,0x0e,0x1c,0x38,0x070,0xe0};
int n=0; //Phai khai bao bien nho khi nhan so lan nut 1
int m=0; //Phai khai bao bien nho khi nhan so lan nut 2

// nen khai bao ben ngoai void main (bien toan cuc)

void main( void )

//khai bao ben trong void main (bien cuc bo)


{

WDTCTL = WDTPW + WDTHOLD;


P1DIR=0xff;
P1OUT=0x00;
P2DIR&=~0x0C; //khai bao 2 nut bam
while(1)
{
if((P2IN&0x04)==0) //nhan nut 1 bang muc 0
{
__delay_cycles(400000); //chong doi
n++;
if(n==1) //net nhan 1 lan
{
for(int a=0;a<5;a++) //5 LAN chop tat xen ke
{
for(int i=0;i<2;i++) //i chay tu vi tri 0 den vi tri 1
//trong chuoi ledxenke[]
{
P1OUT=ledxenke[i];
__delay_cycles(400000);
}
}
P1OUT=0x00; //ra khoi vong lap for, dieu khien led tat
het
}

if(n==2) //neu nhan 2 lan


{
for(int a=0;a<2;a++) //2 LAN chop tat xen ke
{
for(int i=0;i<8;i++) //i chay tu vi tri 0 den vi tri 7 trong chuoi
leddon[]
{
P1OUT=leddon[i];
__delay_cycles(400000);
}
}
P1OUT=0x00; //ra khoi vong lap for, dieu khien led tat het
n=0; //Dua gia tri n quay ve 0
}
}

if((P2IN&0x08)==0) //Nhan nut 2


{
__delay_cycles(400000); //chong doi phim
m++; //M tang len 1 don vi neu nhan nut
if(m==2) //Neu nhan 2 lan
{
for(int i=0;i<7;i++) //i chay tu vi tri 0 den vi tri 6
//trong chuoi led2[]
{
P1OUT=led2[i];
__delay_cycles(400000);
}
P1OUT=0x00; //Khai bao ngoai vong lap for de tat het led
}

if(m==3) //Neu nhan 3 lan


{
for(int i=0;i<6;i++) //i chay tu vi tri 0 den vi tri 5 trong chuoi
led3[]
{
P1OUT=led3[i];
__delay_cycles(400000);
}
P1OUT=0x00; //Khai bao ngoai vong lap for de tat het led
m=0; //Dua gia tri m quay ve 0
}
}
}
}
NGẮT NGOÀI

13. Viết chương trình ngắt ngoài. Nhấn nút 1 – tăng lên 1 đơn vị đến 9,
sau đó quay 0. Nhấn nút 2 – giảm xuống 1 đơn vị đến 0, sau đó quay về 9.
#include "msp430g2553.h"
#include "intrinsics.h"
//------chuong trinh chinh------
char led7[]={0x03f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //LED KATHODE
chung

int n=5;

void main( void //khai bao ben trong void main (bien cuc bo)
{ WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //DATA cua led 7 doan
P2DIR=0x0f; //Scan
P2IE=0x0c; //Cho phep ngat
P2IES&=~0x0c; //Xoa co ngat khi co canh len
P2IFG&=~0x0c; //Xoa co ngat
_BIS_SR(GIE); //Tiet kiem nang luong

while(1)
{
P1OUT=led7[n];
P2OUT=0x00; //Hien thi led vi tri thu 1
__delay_cycles(50000);

}
}

#pragma vector=PORT2_VECTOR
__interrupt void msp430(void)
{
if(P2IFG&0x04)
{
__delay_cycles(100000);
n++;
if(n>9)
{
n=0;
}
P2IFG&=~0x04; //xoa co ngat tai bit 2
}

if(P2IFG&0x08)
{
__delay_cycles(100000);
n--;
if(n<0)
{
n=9;
}
P2IFG&=~0x08; //xoa co ngat tai bit 3
}
}

14. Viết chương trình ngắt ngoài. Nhấn nút 1 –đếm lên 1 led 7 đoạn.
Nhấn nút 2 đếm xuống hiển thị 1 led 7 đoạn.
#include "msp430g2553.h"
#include "intrinsics.h"
//------chuong trinh chinh------
char led7[]={0x03f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //LED KATHODE
chung
int n=5;

void main( void ) //khai bao ben trong void main (bien cuc bo)
{ WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //DATA cua led 7 doan
P2DIR=0x0f; //Scan

P2IE=0x0c; //Cho phep ngat


P2IES&=~0x0c; //Xoa co ngat khi co canh len
P2IFG&=~0x0c; //Xoa co ngat
_BIS_SR(GIE); //Tiet kiem nang luong

while(1)
{
P1OUT=0x00;
}
}

#pragma vector=PORT2_VECTOR
__interrupt void msp430(void)
{
if(P2IFG&0x04) //Nhan nut 1, led dem len
{
__delay_cycles(100000);
for(int i=0;i<10;i++)
{
P1OUT=led7[i];
P2OUT=0x00; //Hien thi vi tri led thu 1
__delay_cycles(500000);
}
P2IFG&=~0x04;
}

if(P2IFG&0x08) //Nhan nut 2, led dem xuong


{
__delay_cycles(100000);
for(int i=9;i>=0;i--)
{
P1OUT=led7[i];
P2OUT=0x00; //Hien thi vi tri led thu 1
__delay_cycles(500000);
}
P2IFG&=~0x08;
}
}

15. Viết chương trình ngắt ngoài. Bình thường hiển thị số 5 . Nhấn nút 1
– hiển thị số 9. Nhấn nút 2 – hiển thị số 1.
#include "msp430g2553.h"
#include "intrinsics.h"
//------chuong trinh chinh------
char led7[]={0x03f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //LED KATHODE
chung
int n=5;

void main( void ) //khai bao ben trong void main (bien cuc bo)
{ WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //DATA cua led 7 doan
P2DIR=0x0f; //Scan

P2IE=0x0c; //Cho phep ngat


P2IES&=~0x0c; //Xoa co ngat khi co canh len
P2IFG&=~0x0c; //Xoa co ngat
_BIS_SR(GIE); //Tiet kiem nang luong

while(1)
{
P1OUT=led7[n];
P2OUT=0x00;
__delay_cycles(5000);
}
}

#pragma vector=PORT2_VECTOR
__interrupt void msp430(void)
{
if(P2IFG&0x04) //Nhan nut 1, led dem len
{
__delay_cycles(100000);
n=9;
P2IFG&=~0x04;
}

if(P2IFG&0x08) //Nhan nut 2, led dem xuong


{
__delay_cycles(100000);
n=1;
P2IFG&=~0x08;
}
}

16. Viết chương trình ngắt ngoài. Bình thường hiển thị số 00. Nhấn nút 1
– đếm từ 00 -> 99, nhấn nút 2 – đếm từ 99 về 00.
#include "msp430g2553.h"
#include "intrinsics.h"
//------chuong trinh chinh------
char led7[]={0x03f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //LED KATHODE
chung
int n=0;

void main( void ) //khai bao ben trong void main (bien cuc bo)
{ WDTCTL = WDTPW + WDTHOLD;
P1DIR=0xff; //DATA cua led 7 doan
P2DIR=0x0f; //Scan

P2IE=0x30; //Cho phep ngat


P2IES&=~0x30; //Xoa co ngat khi co canh len
P2IFG&=~0x30; //Xoa co ngat
_BIS_SR(GIE); //Tiet kiem nang luong

while(1)
{
P1OUT=led7[n/10];
P2OUT=0x00;
__delay_cycles(5000);

P1OUT=led7[n%10];
P2OUT=0x01;
__delay_cycles(5000);
}
}

#pragma vector=PORT2_VECTOR
__interrupt void msp430(void)
{
if(P2IFG&0x08) //Nhan nut 1, led dem len 99
{
__delay_cycles(100000);
for(int n=0;n<100;n++)
{
for(int a=0;a<10;a++) //Vong lap for nay de lam so dem cham do khong
//the thay doi delay_cycles
{
P1OUT=led7[n/10]; //Khai bao o vi tri hang chuc
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(5000);

P1OUT=led7[n%10]; //Khai bao o vi tri thu hang don vi


P2OUT=0x01; //chon led7 doan con thu 2
__delay_cycles(5000);
}
}
P2IFG&=~0x08;
}

if(P2IFG&0x08) //Nhan nut 1, led dem len


{
__delay_cycles(100000);
for(int n=99;n>=0;n--)
{
for(int a=0;a<10;a++) //Vong lap for nay de lam so dem cham do
khong the thay doi delay_cycles
{
P1OUT=led7[n/10]; //Khai bao o vi tri hang chuc
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(5000);

P1OUT=led7[n%10]; //Khai bao o vi tri hang don vi


P2OUT=0x01; //chon led7 doan con thu 2
__delay_cycles(5000);
}
}
P2IFG&=~0x08;
}
}

17. Viết chương trình ngắt ngoài. Bình thường hiển thị số 00. Nhấn nút 1
– led 7 đếm từ 00-> 99, sau đó quay về 25. Nhấn nút 2 – led 7 đếm từ 99 ->
00, sau đó quay về 52.
#include "msp430g2553.h"
#include "intrinsics.h"
//------chuong trinh chinh------
char led7[]={0x03f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int n=0;

void main( void )


//khai bao ben trong void main (bien cuc bo)

{ WDTCTL = WDTPW + WDTHOLD;


P1DIR=0xff; //DATA cua led 7 doan
P2DIR=0x0f; //Scan

P2IE=0x30; //Cho phep ngat


P2IES&=~0x30; //Xoa co ngat khi co canh len
P2IFG&=~0x30; //Xoa co ngat
_BIS_SR(GIE); //Tiet kiem nang luong

while(1)
{
P1OUT=led7[n/10];
P2OUT=0x00;
__delay_cycles(5000);

P1OUT=led7[n%10];
P2OUT=0x01;
__delay_cycles(5000);
}
}

#pragma vector=PORT2_VECTOR
__interrupt void msp430(void)
{
if(P2IFG&0x10) //Nhan nut 1, led dem len 99
{
__delay_cycles(100000);
for(int n=0;n<100;n++)
{
for(int a=0;a<10;a++) //Vong lap for nay de lam so dem cham
//do khong the thay doi delay_cycles
{
P1OUT=led7[n/10]; //Khai bao o vi tri hang chuc
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(5000);

P1OUT=led7[n%10]; //Khai bao o vi tri thu i


P2OUT=0x01; //chon led7 doan con thu 2
__delay_cycles(5000);
}
}
P2IFG&=~0x10;
n=25;
}

if(P2IFG&0x20) //Nhan nut 1, led dem len


{
__delay_cycles(100000);
for(int n=99;n>=0;n--)
{
for(int a=0;a<10;a++) //Vong lap for nay de lam so dem
//cham do khong the thay doi delay_cycles
{
P1OUT=led7[n/10]; //Khai bao o vi tri hang chuc
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(5000);

P1OUT=led7[n%10]; //Khai bao o vi tri thu i


P2OUT=0x01; //chon led7 doan con thu 2
__delay_cycles(5000);
}
}
P2IFG&=~0x20;
n=52;
}
}
18. Viết chương trình dùng ngắt ngoài sao cho. Nhấn SW1 thì led 7 đoạn
đếm từ 26 -> 77. Nhấn SW2 thì led 7 đoạn đếm từ 91 -> 49.
#include "msp430g2553.h"
#include "intrinsics.h"
//------chuong trinh chinh------
char led7[]={0x03f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int n=0;

void main( void )


//khai bao ben trong void main (bien cuc bo)

{ WDTCTL = WDTPW + WDTHOLD;


P1DIR=0xff; //DATA cua led 7 doan
P2DIR=0x0f; //Scan

P2IE=0x0c; //Cho phep ngat


P2IES&=~0x0c; //Xoa co ngat khi co canh len
P2IFG&=~0x0c; //Xoa co ngat
_BIS_SR(GIE); //Tiet kiem nang luong

while(1)
{
P1OUT=0x00;
}
}

#pragma vector=PORT2_VECTOR
__interrupt void msp430(void)
{
if(P2IFG&0x04) //Nhan nut 1, led dem len 99
{
__delay_cycles(100000);
for(int n=26;n<78;n++)
{
for(int a=0;a<10;a++) //Vong lap for nay de lam so dem cham
//do khong the thay doi delay_cycles
{
P1OUT=led7[n/10]; //Khai bao o vi tri hang chuc
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(5000);

P1OUT=led7[n%10]; //Khai bao o vi tri thu i


P2OUT=0x01; //chon led7 doan con thu 2
__delay_cycles(5000);
}
}
P2IFG&=~0x04;
}

if(P2IFG&0x08) //Nhan nut 1, led dem len


{
__delay_cycles(100000);
for(int n=91;n>=49;n--)
{
for(int a=0;a<10;a++) //Vong lap for nay de lam so dem cham
//do khong the thay doi delay_cycles
{
P1OUT=led7[n/10]; //Khai bao o vi tri hang chuc
P2OUT=0x00; //chon led7 doan con thu 1
__delay_cycles(5000);

P1OUT=led7[n%10]; //Khai bao o vi tri thu i


P2OUT=0x01; //chon led7 doan con thu 2
__delay_cycles(5000);
}
}
P2IFG&=~0x08;
}
}

19. Viết chương trình dùng ngắt ngoài sao cho. Nhấn nút 1 – relay on/off
10 lần. Nhấn nút 2 – relay on/off 5 lần.
#include "msp430g2553.h"
#include "intrinsics.h"
//------chuong trinh chinh------
void main( void )

//khai bao ben trong void main (bien cuc bo)

{ WDTCTL = WDTPW + WDTHOLD;


P1DIR=0xff; //DATA cua led 7 doan
P2IE=0x0c; //Cho phep ngat
P2IES&=~0x0c; //Xoa co ngat khi co canh len
P2IFG&=~0x0c; //Xoa co ngat
_BIS_SR(GIE); //Tiet kiem nang luong

while(1)
{

}
}

#pragma vector=PORT2_VECTOR
__interrupt void msp430(void)
{
if(P2IFG&0x04)
{
__delay_cycles(50000);
for(int i=0;i<10;i++)
{
P1OUT=0x10;
__delay_cycles(50000);
P1OUT&=~0x10;
__delay_cycles(50000);
}
P2IFG&=~0x04;
}

if(P2IFG&0x08)
{
__delay_cycles(50000);
for(int i=0;i<5;i++)
{
P1OUT=0x10;
__delay_cycles(50000);
P1OUT&=~0x10;
__delay_cycles(50000);
}
P2IFG&=~0x08;
}
}
ĐỘNG CƠ BƯỚC

20. Viết chương trình điều khiển motor bước. Quay thuận 4 bước , rồi
ngưng 1s, sau đó quay nghịch 4 bước. Lặp lại quá trình.
#include "msp430G2553.h"

char motor[]={0x01,0x02,0x04,0x08};
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P1DIR=0x0f;

while(1)
{
for(int i=0;i<4;i++)
{
P1OUT=motor[i];
__delay_cycles(500000);
}
P1OUT=0x00;
__delay_cycles(500000);

for(int i=3;i>=0;i--)
{
P1OUT=motor[i];
__delay_cycles(500000);
}
P1OUT=0x00;
__delay_cycles(500000);
}
}

21. Viết chương trình điều khiển motor bước. Quay thuận 100 bước , rồi
ngưng 1s, sau đó quay nghịch 100 bước. Rồi dừng hẳn.
#include "msp430G2553.h"

char motor[]={0x01,0x02,0x04,0x08}; //BIT 0,1,2,3


void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P1DIR=0x0f;

for(int n=0;n<25;n++)
{
for(int i=0;i<4;i++)
{
P1OUT=motor[i];
__delay_cycles(50000);
}
}

for(int n=0;n<25;n++)
{
for(int i=3;i>=0;i--)
{
P1OUT=motor[i];
__delay_cycles(50000);
}
}
P1OUT=0x00;
}

22. Viết chương trình điều khiển motor bước. Quay thuận 1 vòng , dừng
lại 2 giây, sau đó quay nghịch 2 vòng rồi dừng hẳn.
#include "msp430G2553.h"

char motor[]={0x01,0x02,0x04,0x08}; //Dong co buoc nam o BIT 0,1,2,3

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P1DIR=0x0f;

for(int n=0;n<1;n++)
{
for(int i=0;i<4;i++)
{
P1OUT=motor[i];
__delay_cycles(200000);
}
}
P1OUT=0x00;
__delay_cycles(2000000);

for(int n=0;n<2;n++)
{
for(int i=3;i>=0;i--)
{
P1OUT=motor[i];
__delay_cycles(200000);
}
}
P1OUT=0x00;

23. Viết chương trình điều khiển motor bước. Nếu nhấn SW1 – quay
thuận 4 bước. Nếu nhấn nút 2 – quay nghịch 4 bước.
#include "msp430G2553.h"
char motor[]={0x01,0x02,0x04,0x08}; //BIT 0,1,2,3
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P1DIR=0x0f;
P2DIR&=~0x0c; //Khai bao chan ngo ra tai BIT2
while(1)
{
if((P2IN&0x04)==0) //Neu nhan SW1
{
for(int n=0;n<2;n++)
{
for(int i=0;i<4;i++)
{
P1OUT=motor[i];
__delay_cycles(500000);
}
}
P1OUT=0x00;
}

if((P2IN&0x08)==0) //Neu nhan SW2


{
for(int n=0;n<2;n++)
{
for(int i=3;i>=0;i--)
{
P1OUT=motor[i];
__delay_cycles(500000);
}
}
P1OUT=0x00;
}
}
}

24. Viết chương trình dùng ngắt ngoài để điều khiển motor bước. Nếu
nhấn SW1 – quay thuận 4 bước. Nếu nhấn nút 2 – quay nghịch 4 bước.
Sau đó rồi sáng tất cả các led.
#include "msp430G2553.h"

char motor[]={0x01,0x02,0x04,0x08}; //Dong co buoc nam o BIT 0,1,2,3


void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P1DIR=0x0f;
P2IE=0x0c;
P2IES&=~0x0c;
P2IFG&=~0x0c;
_BIS_SR(GIE);

while(1)
{
P1OUT=0x0f;
}
}

#pragma vector=PORT2_VECTOR
__interrupt void msp430(void)
{
if(P2IFG&0x04) //Neu nhan SW1 ngat ngoai
{
for(int n=0;n<2;n++)
{
for(int i=0;i<4;i++)
{
P1OUT=motor[i];
__delay_cycles(500000);
}
}
P1OUT=0x00;
P2IFG&=~0x04;
}

if(P2IFG&0x08) //Neu nhan SW2 ngat ngoai


{
for(int n=0;n<2;n++)
{
for(int i=3;i>=0;i--)
{
P1OUT=motor[i];
__delay_cycles(500000);
}
}
P1OUT=0x00;
P2IFG&=~0x08;
}
}

25. Viết chương trình dùng ngắt ngoài để điều khiển motor bước. Nếu
nhấn SW1 – quay thuận 4 bước liên tục. Nếu nhấn nút 2 – quay nghịch 4
bước liên tục.
#include "msp430G2553.h"

char motor[]={0x01,0x02,0x04,0x08}; //Dong co buoc nam o BIT 0,1,2,3


int n; //Gan 1 bien gia tri
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P1DIR=0x0f;
P2IE=0x0c;
P2IES&=~0x0c;
P2IFG&=~0x0c;
_BIS_SR(GIE);

while(1) //De trong lap while(1) de lap lai lien


tuc
{
if(n==1)
{
for(int i=0;i<4;i++)
{
P1OUT=motor[i];
__delay_cycles(200000);
}
}

if(n==2)
{
for(int i=3;i>=0;i--)
{
P1OUT=motor[i];
__delay_cycles(200000);
}
}

}
}

#pragma vector=PORT2_VECTOR //Ngat ngoai khai bao ngoai void main


__interrupt void msp430(void)
{
if(P2IFG&0x04) //Neu nhan SW1 ngat ngoai
{
n=1;
P2IFG&=~0x04; //Xoa co ngat SW1
}

if(P2IFG&0x08) //Neu nhan SW2 ngat ngoai


{
n=2;
P2IFG&=~0x08; //Xoa co ngat SW2
}
}

26. Viết chương trình điều khiển motor bước dùng PORT4. Quay thuận
10 bước, sau đó quay ngược lại 10 bước.
#include "msp430fg4618.h"

char motorbuoc[]={0x01,0x02,0x04,0x08};
int i,vitri;

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P4DIR=0x0f;

while(1)
{
for(i=0;i<10;i++)
{
if(vitri==4)
{
vitri=0;
}
P4OUT=motorbuoc[vitri];
__delay_cycles(20000);
vitri++; //Sau khi thuoc hien buoc cuoi cung, vitri+
}

__delay_cycles(500000); //phan biet giua 2 hieu ung


vitri=vitri-2; //dat vi tri quay nguoc lai dung 10 buoc

for(i=9;i>=0;i--)
{
if(vitri==4)
{
vitri=0;
}
P4OUT=motorbuoc[vitri];
__delay_cycles(20000);
vitri--;
}
vitri=0;
}
}

BÀN PHÍM HEX


27. Viết chương trình điều khiển relay thông qua phím HEX. Relay on/off
thông qua giá trị nhập từ phím HEX.
#include "msp430g2553.h"

int n=0;

void relay() //Khai bao chuong trinh con RELAY


{
for(int i=0;i<n;i++)
{
P2OUT^=0x10; //Dong - Ngat
__delay_cycles(500000);
}
}

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P1DIR=0x0f; //Khai bao ngo ra phim HEX


P2DIR=0xf0; //Khai bao vao cua RELAY BIT 4

while(1)
{
P1OUT=0xfe; //Quet cot dau tien, dua xuong muc 0
if((P1IN&0x10)==0) {n=1;relay();}
if((P1IN&0x20)==0) {n=4;relay();}
if((P1IN&0x40)==0) {n=7;relay();}
if((P1IN&0x80)==0) {n=10;relay();}

P1OUT=0xfd; //Quet cot thu 2, dua xuong muc 0


if((P1IN&0x10)==0) {n=2;relay();}
if((P1IN&0x20)==0) {n=5;relay();}
if((P1IN&0x40)==0) {n=8;relay();}
if((P1IN&0x80)==0) {n=11;relay();}

P1OUT=0xfb; //Quet cot thu 3, dua xuong muc 0


if((P1IN&0x10)==0) {n=3;relay();}
if((P1IN&0x20)==0) {n=6;relay();}
if((P1IN&0x40)==0) {n=9;relay();}
if((P1IN&0x80)==0) {n=12;relay();}
}
}

28. Viết chương trình điều khiển động cơ bước bằng phím HEX. Với số
vòng được nhập từ bàn phím HEX.
#include "msp430g2553.h"

char dongcobuoc[]={0x01,0x02,0x04,0x08}; //Dong co buoc tai BIT 0,1,2,3


int n=0;

void motorbuoc()
{
for(int a=0;a<n;a++)
{
for(int i=0;i<4;i++)
{
P2OUT=dongcobuoc[i];
__delay_cycles(500000);
}
}
P2OUT=0x00;
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P1DIR=0x0f; //Khai bao phim HEX


P2DIR=0x0f; //Khai bao dong co buoc

while(1)
{
P1OUT=0xfe; //Cot dau thu 1 tai chan P1OUT xuong muc 0
if((P1IN&0x10)==0) {n=1;motorbuoc();}
if((P1IN&0x20)==0) {n=4;motorbuoc();}
if((P1IN&0x40)==0) {n=7;motorbuoc();}
if((P1IN&0x80)==0) {n=10;motorbuoc();}

P1OUT=0xfd; //Cot dau thu 2 tai chan P1OUT xuong muc 0


if((P1IN&0x10)==0) {n=2;motorbuoc();}
if((P1IN&0x20)==0) {n=5;motorbuoc();}
if((P1IN&0x40)==0) {n=8;motorbuoc();}
if((P1IN&0x80)==0) {n=11;motorbuoc();}

P1OUT=0xfb; //Cot dau thu 3 tai chan P1OUT xuong muc 0


if((P1IN&0x10)==0) {n=3;motorbuoc();}
if((P1IN&0x20)==0) {n=6;motorbuoc();}
if((P1IN&0x40)==0) {n=9;motorbuoc();}
if((P1IN&0x80)==0) {n=12;motorbuoc();}

}
}

29. Viết chương trình điều khiển động cơ bước bằng phím HEX. Với số
bước được nhập từ bàn phím HEX.
#include "msp430fg4618.h"

char dongcobuoc[]={0x01,0x02,0x04,0x08}; //Dong co buoc tai BIT 0,1,2,3


int n=0; //Khai bao bien n, voi n la so buoc duoc nhap tu phim Hex
int vitri=0; //Khai bao them bien vitri de chay cac buoc le (khac 4 buoc)

void motorbuoc()
{
for(int a=0;a<n;a++)
{
if(vitri==4) //vitri trong mang dong co buoc tu 0 toi
vitri=0; //Neu vitri=4, vitri quay ve 0
P2OUT=dongcobuoc[vitri];
__delay_cycles(200000);
vitri++;
}
P2OUT=0x00;
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P7DIR=0x0f; //Khai bao phim HEX


P2DIR=0x0f; //Khai bao dong co buoc

while(1)
{
P7OUT=0xfe; //Quet cot dau tien, ,dua xuong muc 0
if((P7IN&0x10)==0) {n=1;motorbuoc();}
if((P7IN&0x20)==0) {n=4;motorbuoc();}
if((P7IN&0x40)==0) {n=7;motorbuoc();}
if((P7IN&0x80)==0) {n=10;motorbuoc();}

P7OUT=0xfd; //Quet cot thu 2, dua xuong muc 0


if((P7IN&0x10)==0) {n=2;motorbuoc();}
if((P7IN&0x20)==0) {n=5;motorbuoc();}
if((P7IN&0x40)==0) {n=8;motorbuoc();}
if((P7IN&0x80)==0) {n=11;motorbuoc();}

P7OUT=0xfb; //Quet cot thu 3, dua xuong muc 0


if((P7IN&0x10)==0) {n=3;motorbuoc();}
if((P7IN&0x20)==0) {n=6;motorbuoc();}
if((P7IN&0x40)==0) {n=9;motorbuoc();}
if((P7IN&0x80)==0) {n=12;motorbuoc();}

}
}

30. Viết chương trình hiển thị 1 led 7 đoạn bằng phím HEX. Với giá trị
hiển thị trên led 7 đoạn được nhập từ bàn phím HEX.
#include "msp430fg4618.h"
//msp430g2553 chi co 2 port
//ta phai chon msp430fg4618 de ket noi den nhieu PORT

char led7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int n=0;

void hienthiled7()
{
P3OUT=led7[n]; //Do hien thi 1 led7 doan nen khong can chia gia
tri n
P2OUT=0x00;
__delay_cycles(500000); //Do hien thi 1 led7 doan nen khong can chop tat
lien tuc
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff; //Khai bao ngo ra Data led7


P4DIR=0x0f; //Khai bao ngo vao Scan led7
P7DIR=0x0f; //Khai bao ngo ra phim Hex

while(1)
{
P7OUT=0xfe; //Quet cot dau tien, dua xuong muc 0
if((P7IN&0x10)==0) {n=1;hienthiled7();}
if((P7IN&0x20)==0) {n=4;hienthiled7();}
if((P7IN&0x40)==0) {n=7;hienthiled7();}

P7OUT=0xfd; //Quet cot thu 2, dua xuong muc 0


if((P7IN&0x10)==0) {n=2;hienthiled7();}
if((P7IN&0x20)==0) {n=5;hienthiled7();}
if((P7IN&0x40)==0) {n=8;hienthiled7();}

P7OUT=0xfb; //Quet cot thu 3, dua xuong muc 0


if((P7IN&0x10)==0) {n=3;hienthiled7();}
if((P7IN&0x20)==0) {n=6;hienthiled7();}
if((P7IN&0x40)==0) {n=9;hienthiled7();}

}
}

31. Viết chương trình hiển thị 1 led 7 đoạn bằng phím HEX. Với giá trị
được nhấn sẽ đếm từ 0 đến giá trị đó. Hoặc đếm ngược giá trị đó chạy về
0.
#include "msp430fg4618.h" //msp430g2553 chi co 2 port

char led7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //Catode chung


int n=0;

void hienthiled7()
{
for(int j=0;j<200;j++) //1s=delay(1000000), ta lay 1000000/5000=200
{
P3OUT=led7[n];
P2OUT=0x00; //Khai bao led o vi tri thu nhat
__delay_cycles(5000);
}
for(int a=0;a<n;a++) //dem tu 0 den n
{
for(int j=0;j<30;j++) //toc do dem led
{
P3OUT=led7[a];
__delay_cycles(5000); //duy tri toc do chop tat led (rat nhanh)
}
}
P3OUT=0x00;

}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff; //Data led7


P4DIR=0x0f; //Scan led7
P7DIR=0x0f; //phim hex

while(1)
{
P7OUT=0xfe; //Quet het cot thu 1
if((P7IN&0x10)==0) {n=1;hienthiled7();}
if((P7IN&0x20)==0) {n=4;hienthiled7();}
if((P7IN&0x40)==0) {n=7;hienthiled7();}

P7OUT=0xfd; //Quet het cot thu 2


if((P7IN&0x10)==0) {n=2;hienthiled7();}
if((P7IN&0x20)==0) {n=5;hienthiled7();}
if((P7IN&0x40)==0) {n=8;hienthiled7();}

P7OUT=0xfb; //Quet het cot thu 3


if((P7IN&0x10)==0) {n=3;hienthiled7();}
if((P7IN&0x20)==0) {n=6;hienthiled7();}
if((P7IN&0x40)==0) {n=9;hienthiled7();}

}
}

32. Viết chương trình điều khiển led 7 đoạn bằng phím HEX. Khi nhấn
nút 1, sẽ hiển thị 0001. Tiếp tục khi nhấn nút 2, sẽ hiển thị 0012. Tiếp tục
khi nhấn nút 3, sẽ hiển thị 0123. Tiếp tục khi nhấn nút 4, sẽ hiển thị 1234.
#include "msp430fg4618.h" //msp430g2553 chi co 2 port

char led7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //Catode chung


int n=0;

void hienthi4led7()
{
if(n>9999)
{
n=n%10;
}
P3OUT=led7[n/1000];
P4OUT=0x00;
__delay_cycles(5000); //duy tri toc do chop tat led (rat nhanh)

P3OUT=led7[(n/100)%10];
P4OUT=0x01;
__delay_cycles(5000); //duy tri toc do chop tat led (rat nhanh)

P3OUT=led7[(n/10)%10];
P4OUT=0x04;
__delay_cycles(5000); //duy tri toc do chop tat led (rat nhanh)

P3OUT=led7[n%10];
P4OUT=0x08;
__delay_cycles(5000); //duy tri toc do chop tat led (rat nhanh)

}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff; //Data led7


P4DIR=0x0f; //Scan led7
P7DIR=0x0f; //phim hex

while(1)
{
P7OUT=0xfe; //Quet het cot thu 1
if((P7IN&0x10)==0) {n=n*10+1;hienthiled7();} //Luc dau n=0*10+1
if((P7IN&0x20)==0) {n=n*10+4;hienthiled7();}
if((P7IN&0x40)==0) {n=n*10+7;hienthiled7();}

P7OUT=0xfd; //Quet cot thu 2


if((P7IN&0x10)==0) {n=n*10+2;hienthiled7();}
if((P7IN&0x20)==0) {n=n*10+5;hienthiled7();}
if((P7IN&0x40)==0) {n=n*10+8;hienthiled7();}

P7OUT=0xfb; //Quet cot thu 3


if((P7IN&0x10)==0) {n=n*10+3;hienthiled7();}
if((P7IN&0x20)==0) {n=n*10+6;hienthiled7();}
if((P7IN&0x40)==0) {n=n*10+9;hienthiled7();}
}
}

33. Viết chương trình điều khiển led 7 đoạn được nhập từ bàn phím
HEX. Khi nhấn nút 1, sẽ hiển thị 01. Tiếp tục khi nhấn nút 2, sẽ hiển thị 12.
Tiếp tục khi nhấn nút 3, sẽ hiển thị 03.
#include "msp430fg4618.h" //msp430g2553 chi co 2 port

char led7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; ///led7


doan catode chung
int n=0;

void hienthi2led7()
{
if(n>99)
{
n=n%10;
}
P3OUT=led7[n/10];
P4OUT=0x02;
__delay_cycles(5000); //duy tri toc do chop tat led (rat nhanh)

P3OUT=led7[n%10];
P4OUT=0x03;
__delay_cycles(5000); //duy tri toc do chop tat led (rat nhanh)

}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff; //Data led7


P4DIR=0x0f; //Scan led7
P7DIR=0x0f; //phim hex

while(1)
{
P7OUT=0xfe; //Quet het cot thu 1
if((P7IN&0x10)==0) {n=n*10+1;hienthi2led7();} //Luc dau n=0*10+1
if((P7IN&0x20)==0) {n=n*10+4;hienthi2led7();}
if((P7IN&0x40)==0) {n=n*10+7;hienthi2led7();}

P7OUT=0xfd; //Quet cot thu 2


if((P7IN&0x10)==0) {n=n*10+2;hienthi2led7();}
if((P7IN&0x20)==0) {n=n*10+5;hienthi2led7();}
if((P7IN&0x40)==0) {n=n*10+8;hienthi2led7();}

P7OUT=0xfb; //Quet cot thu 3


if((P7IN&0x10)==0) {n=n*10+3;hienthi2led7();}
if((P7IN&0x20)==0) {n=n*10+6;hienthi2led7();}
if((P7IN&0x40)==0) {n=n*10+9;hienthi2led7();}
}
}

34. Viết chương trình điều khiển led 7 đoạn được nhập từ bàn phím
HEX. Nhập “đủ” 2 số, sau đó sẽ đếm từ giá trị đó về 0.
#include "msp430fg4618.h"

char led7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int n;
int a;

void led7doan()
{
for(a=0;a<50;a++)
{
P3OUT=led7[n/10];
P4OUT=0x03;
__delay_cycles(5000);

P3OUT=led7[n%10];
P4OUT=0x02;
__delay_cycles(5000);
}
if(n>9)
{
for(int i=n;i>=0;i--)
{
for(a=0;a<10;a++)
{
P3OUT=led7[i/10]; //Luu y i la bien diem
P4OUT=0x03;
__delay_cycles(5000);

P3OUT=led7[i%10]; //Luu y i la bien diem


P4OUT=0x02;
__delay_cycles(5000);
}
}
P3OUT=0x00;
n=0; //Neu dua gia tri n quay ve 0 thi khi
//nhan lan 2 gia tri len 3 chu so
}

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff; //PORT DATA


P4DIR=0x0f; //PORT SCAN
P7DIR=0x0f; //Khai bao phim hex

while(1)
{
P7OUT=0xfe;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+1;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+4;led7doan();while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+7;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+10;led7doan();while(!(P7IN&0x80));
}

P7OUT=0xfd;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+2;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+5;led7doan();while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+8;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+11;led7doan();while(!(P7IN&0x80));
}

P7OUT=0xfb;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+3;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+6;led7doan();while(!(P7IN&0x20));}
if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+9;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+12;led7doan();while(!(P7IN&0x80));
}
}
}

35. Viết chương trình điều khiển led 7 đoạn được nhập từ bàn phím
HEX. Nhập “đủ” 2 số, sau đó cho led chớp – tắt 10 lần.
#include "msp430fg4618.h"

char led7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int n;
int a;

void led7doan()
{
if(n>9)
{
for(int j=0;j<10;j++)
{
for(a=0;a<100;a++)
{ //tu day
P3OUT=led7[n/10];
P4OUT=0x03;
__delay_cycles(5000);

P3OUT=led7[n%10];
P4OUT=0x02;
__delay_cycles(5000);
} //den day la luc sang 1s
P3OUT=0x00; //luc tat
__delay_cycles(1000000); //tat 1s
}

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff; //PORT DATA


P4DIR=0x0f; //PORT SCAN
P7DIR=0x0f; //Khai bao phim hex

while(1)
{
P7OUT=0xfe;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+1;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+4;led7doan();while(!(P7IN&0x20));}
if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+7;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+10;led7doan();while(!(P7IN&0x80));
}

P7OUT=0xfd;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+2;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+5;led7doan();while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+8;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+11;led7doan();while(!(P7IN&0x80));
}

P7OUT=0xfb;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+3;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+6;led7doan();while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+9;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+12;led7doan();while(!(P7IN&0x80));
}
}
}

36. Viết chương trình điều khiển led 7 đoạn được nhập từ bàn phím
HEX. Nhập “đủ” 2 số. Nếu 2 số đó lớn hơn 35 – đếm từ giá trị đó lên đến
99.
#include "msp430fg4618.h"

char led7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int n;
int a;
int k=35;

void led7doan()
{
if(n>99) //Neu nhap qua 3 chu so
{
n=n%10; //Hien thi hang don vi cua 3 chu so do
}
for(a=0;a<50;a++) //Hien thi led 7 doan 0.5s
{
P3OUT=led7[n/10];
P4OUT=0x03;
__delay_cycles(5000);

P3OUT=led7[n%10];
P4OUT=0x02;
__delay_cycles(5000);
}
if(n>k)
{
for(int i=n;i<100;i++)
{
for(a=0;a<10;a++)
{
P3OUT=led7[i/10]; //Luu y i la bien diem
P4OUT=0x00;
__delay_cycles(5000);

P3OUT=led7[i%10]; //Luu y i la bien diem


P4OUT=0x01;
__delay_cycles(5000);
}
}
P3OUT=0x00; //Tat het cac led
n=0; //Neu không dua gia tri n quay ve 0 thi
//khi nhan lan 2 gia tri len 3 chu so!
}
}

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff; //PORT DATA


P4DIR=0x0f; //PORT SCAN
P7DIR=0x0f; //Khai bao phim hex

while(1)
{
P7OUT=0xfe;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+1;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+4;led7doan();while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+7;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+10;led7doan();while(!(P7IN&0x80));
}

P7OUT=0xfd;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+2;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+5;led7doan();while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+8;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+11;led7doan();while(!(P7IN&0x80));
}

P7OUT=0xfb;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+3;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+6;led7doan();while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+9;led7doan();while(!(P7IN&0x40));}
if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+12;led7doan();while(!(P7IN&0x80));
}
}
}

37. Viết chương trình điều khiển led 7 đoạn được nhập từ bàn phím
HEX. Nhập “đủ” 2 số. Nếu 2 số đó lớn hơn 35 và bé hơn 72 – thực hiện
đếm từ 00 đến (72 – giá trị được nhập).
#include "msp430fg4618.h"

char led7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int n;
int a;
int k=35;
int f=72;

void led7doan()
{
if(n>99)
{
n=n%10;
}

for(a=0;a<50;a++)
{
P3OUT=led7[n/10];
P4OUT=0x03;
__delay_cycles(5000);

P3OUT=led7[n%10];
P4OUT=0x02;
__delay_cycles(5000);
}

if((n>35)&(n<72))
{
for(int i=0;i<72-n;i++)
{
for(a=0;a<10;a++)
{
P3OUT=led7[i/10]; //Luu y i la bien diem
P4OUT=0x00;
__delay_cycles(5000);

P3OUT=led7[i%10]; //Luu y i la bien diem


P4OUT=0x01;
__delay_cycles(5000);
}
}
P3OUT=0x00;
n=0; //Neu dua gia tri n quay ve 0 thi khi nhan
//lan 2 gia tri len 3 chu so
}
}

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff; //PORT DATA


P4DIR=0x0f; //PORT SCAN
P7DIR=0x0f; //Khai bao phim hex

while(1)
{
P7OUT=0xfe;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+1;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+4;led7doan();while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+7;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+10;led7doan();while(!(P7IN&0x80));
}

P7OUT=0xfd;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+2;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+5;led7doan();while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+8;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+11;led7doan();while(!(P7IN&0x80));
}

P7OUT=0xfb;

if(!(P7IN&0x10)){__delay_cycles(30000);n=n*10+3;led7doan();while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);n=n*10+6;led7doan();while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);n=n*10+9;led7doan();while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=n*10+12;led7doan();while(!(P7IN&0x80));
}
}
}

38. Viết chương trình thiết kế máy tính. Hiện thị có 4 chữ số, thực hiện
phép cộng 4 số, sau đó hiển thị kết quả ra led 7 đoạn.
#include "msp430fg4618.h"

char led7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int n;
int giatri1,giatri2;

void led7doan()
{
if(n>9999)
{
n=n%10;
}

for(int a=0;a<50;a++)
{
P3OUT=led7[(n/1000)];
P4OUT=0x00;
__delay_cycles(5000);

P3OUT=led7[(n/100)%10];
P4OUT=0x01;
__delay_cycles(5000);

P3OUT=led7[(n%100)/10];
P4OUT=0x02;
__delay_cycles(5000);

P3OUT=led7[n%10];
P4OUT=0x03;
__delay_cycles(5000);
}
}

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

P3DIR=0xff; //PORT DATA


P4DIR=0x0f; //PORT SCAN
P7DIR=0x0f; //Khai bao phim hex

while(1)
{
P7OUT=0xfe;

if(!(P7IN&0x10)){__delay_cycles(30000);giatri1=giatri1*10+1;n=giatri1;led7doan()
;while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);giatri1=giatri1*10+4;n=giatri1;led7doan()
;while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);giatri1=giatri1*10+7;n=giatri1;led7doan()
;while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);giatri2=giatri1;giatri1=n;giatri1=0;led7d
oan();while(!(P7IN&0x80));} //Dau "+"

P7OUT=0xfd;

if(!(P7IN&0x10)){__delay_cycles(30000);giatri1=giatri1*10+2;n=giatri1;led7doan()
;while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);giatri1=giatri1*10+5;n=giatri1;led7doan()
;while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);giatri1=giatri1*10+8;n=giatri1;led7doan()
;while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);giatri1=giatri1*10+0;led7doan();while(!(P
7IN&0x80));}
P7OUT=0xfb;

if(!(P7IN&0x10)){__delay_cycles(30000);giatri1=giatri1*10+3;n=giatri1;led7doan()
;while(!(P7IN&0x10));}

if(!(P7IN&0x20)){__delay_cycles(30000);giatri1=giatri1*10+6;n=giatri1;led7doan()
;while(!(P7IN&0x20));}

if(!(P7IN&0x40)){__delay_cycles(30000);giatri1=giatri1*10+9;n=giatri1;led7doan()
;while(!(P7IN&0x40));}

if(!(P7IN&0x80)){__delay_cycles(30000);n=giatri1+giatri2;giatri1=0;giatri2=0;led
7doan();while(!(P7IN&0x80));} //Dau "="
}
}

SPEAKER
Viết chương trình tạo tiếng kêu cho speaker.
#include "msp430fg4618.h"

void main( void )


{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
unsigned int i;
FLL_CTL0=XCAP14PF; //chon gia tri tu 14pF chon Speaker
P3DIR=0xff; //Khai bao ngo ra chan Speaker
TBCCR0=50; //Dat chu ki Speaker, voi cong thuc
T=(TBCCR0+1)/32768
TBCTL=TBSSEL_2+MC_1; //Chon che do cho Speaker, Tra bang Timer B

while(1)
{
for(i=0;i<100;i++)
{
while(!(TBCCTL0&CCIFG));
TBCCTL0&=~CCIFG;
P3OUT^=0x20; //Tao chuoi xung dong – ngat lien tuc
}
TBCCR0+=1; //Giam chu ki xuong
if(TBCCR0==500) //Neu TBCCR0 = chu ki nho nhat
TBCCR0=50; //Quay lai chu ki lon nhat
}
}

You might also like