You are on page 1of 10

1, Lập trình sử dụng 8 nút ấn để điều khiển bật 8 LED đơn tương ứng.

Khi ấn nút
thì LED tương ứng sẽ sáng.
Vì sử dụng nút bấm nên sẽ dùng lệnh “if (PIND.0==0)

-PORTC: Bit 0...7 =Out - 1 (vì trạng thái đèn không sáng )
-PORTD: In 0...7 = In - P; (chế độ trở treo và có nút bấm)

Code:
if (PIND.0==0)
PORTC.0=0;
......
if (PIND.7==0)
PORTC.7=0;

2) Lập trình sử dụng 8 nút ấn để điều khiển bật 8 LED đơn tương ứng. Khi ấn nút
thì LED tương ứng sẽ sáng, nhả nút thì LED tắt

_Hình giống bài số 1, chỉ cần thêm “Else” vào sau PORTC.0=0....
Code:
if (PIND.0==0)
PORTC.0=0;
else
PORTC.0=1;

Đỗ Thành Đạt_69DCDT22
.......
if (PIND.7==0)
PORTC.7=0;
else
PORTC.7=1;

3 , Lập trình sử dụng 8 nút ấn để điều khiển đảo trạng thái của 8 LED đơn tương
ứng. Khi ấn nút thì LED đang sáng sẽ tắt và ngược lại

_Hình giống bài số 1, khai báo thêm thư viện #include <delay.h>,
if(PIND.0==0)
PORTC.0= 1 - PORTC.0;
delay_ms(200);
....
if(PIND.7==0)
PORTC.7= 1 - PORTC.7;
delay_ms(200);

4) Điều khiển 8 LED nhấp nháy với chu kì 1(s)

_hình giống bài 1, , khai báo thêm thư viện #include <delay.h>

Code:

PORTC.0 = 0b00000000;

delay_ms(1000);

PORTC.0 = 0b11111111;

delay_ms(1000);

5) Điều khiển dãy LED chạy từ trái sang phải

_hình giống bài 1, , khai báo thêm thư viện #include <delay.h>

PORTC.0=0;

delay_ms(200);

Đỗ Thành Đạt_69DCDT22
PORTC.0=1;

delay_ms(200);

......

PORTC.7=0;

delay_ms(200);

PORTC.7=1;

delay_ms(200);

6) Điều khiển hiển thị 1 LED 7 thanh. Số hiển thị tự động tăng dần từ 0 đến 9
sau mỗi 1(s), sau khi đến 9 thì LED lại hiển thị về 0.

-PORTB: Bit 0...6 = Out - 1 (vì trạng thái ban đầu không sáng )
Khai báo thư viện: #include<delay.h>;
Thêm dòng lệnh:
unsigned char maden[10]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
-Code:
PORTC=maden[0];
delay_ms(600);
..........
PORTC=maden[9];
delay_ms(600);
Đỗ Thành Đạt_69DCDT22
7) Điều khiển hiển thị 1 LED 7 thanh hiển thị số từ 0 đến 9. Sử dụng 2 nút
bấm: 1 nút làm tăng số hiển thị, 1 nút làm giảm số hiển thị
Thêm dòng lệnh:

*Lưu Ý: sau if Không có dấu “;”


unsigned char maden[10]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};

unsigned char i=5; (vì giá trị thay đổi nên không thế gán Port là một số cụ thể)

*code:

Code 1 (chỉ chạy đc từ 0-9 hoặc 9-0) Code 2

Đỗ Thành Đạt_69DCDT22
8) Điều khiển hiển thị 1 LED 7 thanh hiển thị số từ 0 đến 9. Số hiển thị ban
đầu là 0. Số hiển thị sẽ tự động tăng dần từ 0 đến 9 sau mỗi 1(s), sau khi đến 9
thì số lại tự động giảm dần về 0 sau mỗi 1(s), và cứ lặp lại như vậy.

-hình giống bài 6:

Code 1 Code 2

9) Điều khiển hiển thị 4 LED 7 thanh bằng phươn g pháp quét. Sau mỗi 1(s)
thì số trên LED sẽ tăng 1 đơn vị, nếu tăng quá 9999 thì quay lại 0. Biết 8 chân
dữ liệu cắm vào PORTB, 4 chân điều khiển sáng/tắt các LED là PC4, PC5,
PC6, PC7.
Khai báo thư viện: #include<delay.h>; khai báo thêm biến J
unsigned char maden[10]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};

unsigned int i=4567; (i tùy chọn)

char j=1;

void hienthi ( unsigned int n)

{char a,b,c,d;

Đỗ Thành Đạt_69DCDT22
//phần tách số

d = n % 10;

n = n / 10;

c = n % 10;

n = n / 10;

b = n % 10;

a = n / 10;
(Hình
//hien thi so a: bên)
PORTC.4=0;

PORTB = maden[a];

delay_ms(5);

PORTC.4=1;

//hien thi so b

PORTC.5=0;

PORTB = maden[b];

delay_ms(5);

PORTC.5=1;

//hien thi so c

PORTC.6=0;

PORTB = maden[c];

delay_ms(5);

PORTC.6=1;

//hien thi so d

PORTC.7=0;

PORTB = maden[d];

delay_ms(5);

PORTC.7=1;}

Đỗ Thành Đạt_69DCDT22
10) Điều khiển hiển thị 4 LED 7 thanh bằng phương pháp quét. Sử dụng 2 nút
bấm: 1 nút làm tăng số hiển thị, 1 nút làm giảm số hiển thị. Biết 8 chân dữ liệu
cắm vào PORTB, 4 chân điều khiển sáng/tắt các LED là PC4, PC5, PC6, PC7.

-giống hình Bài 9, Thêm 2 nút bấm vào PORTD vị trí tùy chọn

*ở đây là chọn PORTD tại số 6 và 7


* *Lưu ý: Điện trở dưới PNP phải để là 10

Code:

11) Điều khiển hiển thị 4 LED 7 thanh bằng phương pháp quét. Thiết lập 2
ngắt ngoài 0 và 1 hoạt động ở chế độ Falling Edge. Mỗi khi có sự kiện ngắt 0
xảy ra thì số hiển thị trên LED 7 thanh tăng lên 1 đơn vị, sự kiện ngắt 1 xảy ra
thì số hiển thị trên LED 7 thanh giảm 1 đơn vị.

-Như Hình 10 thay bottom bằng Sw-SPDT , (khác ở chỗ bài này dùng ngắt
*Falling Edge*, đề bài yêu cầu dùng ngắt nào thì dùng ngắt đó )

**Lưu Ý: phải để Sw-SPDT ở PORTD 2 và 3

Vào External Interrupts để


chọn chế độ →

*Code phần khai báo, tách số và hiển thị số như bài 9


Đỗ Thành Đạt_69DCDT22
Code phần while: hienthi(i);

12) Điều khiển 8 LED đơn nhấp nháy xen kẽ nhau. Thiết lập 2 ngắt ngoài 0 và
1 hoạt động. Sử dụng 2 nút bấm: 1 nút làm tăng tần số nhấp nháy, 1 nút làm
giảm tần số nhấp nháy. //khai báo (unsigned int i=50;)

Cách tạo ngắt giống bài


11:

Code phần while:


PORTC = 0b01010101;

delay_ms(i);

PORTC = 0b10101010;

delay_ms(i);
Đỗ Thành Đạt_69DCDT22
13) Sử dụng 1 biến trở để điều chỉnh điện áp thay đổi từ 0-5V. Sử dụng chức năng
ADC của vi điều khiển để đo điện áp, hiển thị giá trị lên LED 7 thanh với 1 chữ số
thập phân

Hình Linh Kiện

-Phần quét led giống bài 9

Code phần While:

hienthi(adc_data[0]);

14) Sử dụng 1 biến trở để điều chỉnh điện áp thay đổi từ 0-5V. Sử dụng chức năng
ADC của vi điều khiển để đo điện áp, hiển thị giá trị lên LED 7 thanh với 2 chữ số
thập phân (giống bài 13)

15) Sử dụng 1 biến trở để điều chỉnh điện áp thay đổi từ 0-5V. Sử dụng chức năng
ADC của vi điều khiển để đo điện áp, hiển thị giá trị lên LED 7 thanh. Sử dụng 1
nút bấm: nếu ấn nút lần thứ nhất thì LED hiển thị điện áp với 1 chữ số thập phân,
nếu ấn nút lần thứ 2 thì LED hiển thị điện áp với 2 chữ số thập phân.

Đỗ Thành Đạt_69DCDT22
16) Sử dụng cảm biến nhiệt độ LM35 để đo nhiệt độ, hiển thị giá trị đo được lên
LED 7 thanh.
LM35: cảm biến nhiệt độ, đầu ra là điện áp thay đổi theo nhiệt độ
1oC tương ứng với điện áp 0.01 V
X?? X / 100
 Tính điện áp (được giá trị y)  ra nhiệt độ x = y * 100 (oC)

Hình Linh Kiện

-Phần quét led giống bài 9

Khai báo thêm:

Code Phần While:

dienap=500 * (unsigned long) adc_data[0]/1023;

hienthi(dienap*100);

Đỗ Thành Đạt_69DCDT22

You might also like