Professional Documents
Culture Documents
ÔN TẬP
THỰC TẬP KỸ THUẬT VI XỬ LÍ
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;
}
while(1)
{
P1OUT=led7[i/1000]; //Khai bao o vi tri hang ngan
P2OUT=0x00; //chon led7 doan con thu 1
__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
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
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);
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
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);
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
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);
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};
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);
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);
}
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------
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)
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)
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
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;
}
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
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;
}
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
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);
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;
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);
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);
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 )
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"
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"
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;
}
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"
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;
}
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"
P1DIR=0x0f;
P2IE=0x0c;
P2IES&=~0x0c;
P2IFG&=~0x0c;
_BIS_SR(GIE);
if(n==2)
{
for(int i=3;i>=0;i--)
{
P1OUT=motor[i];
__delay_cycles(200000);
}
}
}
}
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;
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+
}
for(i=9;i>=0;i--)
{
if(vitri==4)
{
vitri=0;
}
P4OUT=motorbuoc[vitri];
__delay_cycles(20000);
vitri--;
}
vitri=0;
}
}
int n=0;
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();}
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"
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;
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();}
}
}
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"
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;
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();}
}
}
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;
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();}
}
}
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
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;
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();}
}
}
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
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;
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();}
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
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;
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();}
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);
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
}
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);
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);
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);
}
}
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"
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
}
}