1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

BÀI TẬP HỆ THỐNG NHÚNG

22 11 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bài Tập Hệ Thống Nhúng
Trường học Trường Đại Học Kỹ Thuật
Chuyên ngành Kỹ Thuật Điện Tử
Thể loại bài tập
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 22
Dung lượng 37,22 KB
File đính kèm CODE VÀ MÔ PHỎNG.rar (750 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

BÀI TẬP HỆ THỐNG NHÚNG Sử dụng vi điều khiển AT89C52, vẽ sơ đồ mô phỏng trên Proteus ghép nối với LCD. Cho số A=0 viết chương trình hiển thị số A lên LCD, tăng A một đơn vị sau mỗi chu kỳ 500ms, khi A=20 thì hiện tên sinh viên lên LCD và reset A=0.

Trang 1

Tài liệu đính kèm file code KeilC và mô phỏng proteus

1.Sử dụng vi điều khiển AT89C52, mô phỏng trên phần mềm Proteus và lập trình thực hiện các nhiệm vụ sau: a Hiển thị số 8 lên LED 7 thanh được nối và cổng P3 (dùng LED 7 thanh anot chung); b Hiển thị đếm tăng dần từ 0 đến 9 sau mỗi 800ms

2.Sử dụng vi điều khiển AT89C52, mô phỏng trên phần mềm Proteus và lập trình thực hiện các nhiệm vụ sau: a Cấu hình ngắt ngoài INT1 ở chế độ ngắt sườn

xuống; b Đếm số lần nút bấm nút được nối vào chân INT1, hiển thị kết quả lên LED 7 thanh nối vào cổng P2 (nếu số lần bấm bằng 10 thì quay về 0)

3 Sử dụng vi điều khiển AT89C52, mô phỏng trên phần mềm Proteus và lập trình thực hiện các nhiệm vụ sau: a Hiển thị số 1 lên LED 7 thanh nối vào cổng P3; b Tăng số đếm sau mỗi 800ms, nếu số đếm bằng 5 thì dừng lại

4 Sử dụng vi điều khiển AT89C52, mô phỏng trên phần mềm Proteus và lập trình thực hiện các nhiệm vụ sau: a Cấu hình ngắt ngoài INT0 ở chế độ ngắt sườn

xuống; b Đếm số lần nút bấm nút nối vào chân INT0 được bấm, hiển thị kết quả lên LED 7 thanh nối vào cổng P0 (nếu số lần bấm bằng 7 thì quay về 0)

5 Sử dụng vi điều khiển AT89C52, vẽ sơ đồ mô phỏng trên Proteus cho 3 nút bấmB1, B2, B3 lần lượt nối vào các chân P2.0, P2.1, P2.2 và 3 Led L1, L2, L3 lần lượtnối vào các chân P0.0, P0.1, P0.2 Lập trình chức năng sau: bấm B1 sẽ đảo trạng thái Led L1, bấm B2 sẽ đảo trạng thái Led L2, bấm B3 sẽ đảo trạng thái Led L3 6.Sử dụng vi điều khiển AT89C52, vẽ sơ đồ mô phỏng trên Proteus ghép nối với LCD Sử dụng ngắt ngoài chân INT1 đếm số lần thay đổi trạng thái của một nút bấm gắn vào nó Hiển thị số lần bấm nút lên LCD, khi số lần bấm đạt 9 lần thì hiểnthị trên LCD “Return to 0” sau đó reset số lần đếm về 0 và lặp lại quá trình trên 7.Sử dụng vi điều khiển AT89C52, vẽ sơ đồ cho nút bấm B1 nối vào các P1.0 và 8 Led L1, L2, L3, L4, L5, L6, L7, L8 lần lượt nối vào các chân của PORT P0 Vẽ sơ

đồ mô phỏng trên Proteus và lập trình chức năng sau: bấm giữ B1 sẽ sáng nhấp nháy các Led từ L1 đến L8 với khoảng thời gian 1 giây

8 Sử dụng vi điều khiển AT89C52, vẽ sơ đồ mô phỏng trên Proteus sử dụng ngắt ngoài chân INT0 đếm số lần thay đổi trạng thái của một nút bấm gắn vào nó Hiển thị số lần bấm nút lên UART, khi số lần bấm đạt 9 lần thì hiển thị trên UART “Họ tên SV” sau đó reset số lần đếm về 0 2

Trang 2

9.Sử dụng vi điều khiển AT89C52, vẽ sơ đồ mô phỏng trên Proteus kết nối theo thứ tự 8 Led L1 đến L8 vào 8 chân của PORT P0 Lập trình hiệu ứng các Led sáng lần lượt từ L1 đến L8 với thời gian trễ cho mỗi hiệu ứng là 1s, sau đó tắt tất cả các Led và lặp lại hiệu ứng sáng lần lượt

10.Sử dụng vi điều khiển AT89C52, vẽ sơ đồ mô phỏng trên Proteus ghép nối với LCD theo chế độ 4bit, hiển thị họ tên, mã số sinh viên lên LCD

11.Sử dụng vi điều khiển AT89C52, vẽ sơ đồ mô phỏng Led L1 kết nối đến chân P1.1, lập trình nhấp nháy Led L1 với chu kỳ 500ms sử dụng timer 0 chế độ 16 bit 12.Sử dụng vi điều khiển AT89C52, vẽ sơ đồ mô phỏng trên Proteus ghép nối với LCD Cho số A=0 viết chương trình hiển thị số A lên LCD, tăng A một đơn vị sau mỗi chu kỳ 500ms, khi A=20 thì hiện tên sinh viên lên LCD và reset A=0

13 Sử dụng vi điều khiển AT89C52, vẽ sơ đồ mô phỏng trên Proteus, lập trình hiển thị ký tự “PROTEUS” qua chuẩn truyền thông UART;

14.Sử dụng vi điều khiển AT89C52, vẽ sơ đồ, viết chương trình tạo hiệu ứng nhấp nháy 2 Led nối đến chân P1.1, P1.2 tuần tự với chu kỳ 800ms

Bài làm

1.Sử dụng vi điều khiển AT89C52, mô phỏng trên phần mềm Proteus và lập trình thực hiện các nhiệm vụ sau: a Hiển thị số 8 lên LED 7 thanh được nối và cổng P3 (dùng LED 7 thanh anot chung); b Hiển thị đếm tăng dần từ 0 đến 9 sau mỗi 800ms

Trang 6

EA = 1; // Cho phép các ngat toàn cuc

EX0 = 1; // Cho phép ngat ngoài INT0 chan 3.2

IT0 = 1; // Chon che do ngat suon xuong

Trang 7

5 Sử dụng vi điều khiển AT89C52, vẽ sơ đồ mô phỏng trên Proteus cho 3 nút bấm B1, B2, B3 lần lượt nối vào các chân P2.0, P2.1, P2.2 và 3 Led L1, L2, L3lần lượt nối vào các chân P0.0, P0.1, P0.2 Lập trình chức năng sau: bấm B1 sẽ đảo trạng thái Led L1, bấm B2 sẽ đảo trạng thái Led L2, bấm B3 sẽ đảo trạng thái Led L3

Trang 8

#include <reg52.h> // Thu vien cho AT89C52

#define LCD_data P2 // Dinh nghia cong du lieu LCD la P2

sbit RS = P3^0; // Dinh nghia chan RS cua LCD

sbit RW = P3^1; // Dinh nghia chan RW cua LCD

sbit EN = P3^2; // Dinh nghia chan EN cua LCD

sbit BT = P3^3; // Dinh nghia chan INT1 cho nut nhan

unsigned char count = 0; // Bien dem so lan nhan nut

void delay(int time)

LCD_data = cmd; // Gan lenh vao cong du lieu LCD

RS = 0; // Che do gui lenh

RW = 0; // Che do ghi

EN = 1; // Bat dau gui lenh

delay(1);

Trang 9

EN = 0; // Ket thuc gui lenh

delay(1);

}

void LCD_init() // Ham khoi tao LCD

{

LCD_cmd(0x38); // Che do 8 bit, 2 dong, 5x7

LCD_cmd(0x0E); // Hien thi man hinh, con tro, khong nhap nhay

LCD_cmd(0x01); // Xoa man hinh

LCD_cmd(0x80); // Di chuyen con tro den vi tri ban dau

}

void LCD_char(unsigned char dataa) // Ham gui ky tu den LCD

{

LCD_data = dataa; // Gan ky tu vao cong du lieu LCD

RS = 1; // Che do gui du lieu

while (*str) // Trong khi chuoi chua ket thuc

LCD_char(*str++); // Gui ky tu tiep theo

}

void BT_ISR() interrupt 2 // Trinh phuc vu ngat INT1

{

count++; // Tang bien dem

if (count > 9) // Neu so lan nhan nut dat 9

{

LCD_cmd(0x01); // Xoa man hinh

delay(1000);

LCD_string("Return to 0"); // Hien thi "Return to 0"

count = 0; // Dat lai bien dem

}

else // Neu so lan nhan nut chua dat 9

Trang 10

LCD_init(); // Khoi tao LCD

IT1 = 1; // Cai dat ngat ngoai INT1 o che do ngat canh xuong

EX1 = 1; // Kich hoat ngat ngoai INT1

EA = 1; // Kich hoat ngat toan cuc

while (1); // Vong lap vo han

}

7.Sử dụng vi điều khiển AT89C52, vẽ sơ đồ cho nút bấm B1 nối vào các P1.0

và 8 Led L1, L2, L3, L4, L5, L6, L7, L8 lần lượt nối vào các chân của PORT P0 Vẽ sơ đồ mô phỏng trên Proteus và lập trình chức năng sau: bấm giữ B1 sẽ sáng nhấp nháy các Led từ L1 đến L8 với khoảng thời gian 1 giây

Trang 11

#define uchar unsigned char

#define uint unsigned int

sbit key = P3^2; // Dinh nghia bien key la chan P3.2, la chan nut nhan

uchar count = 0; // Bien dem so lan nhan nut

void delay(int time);

void InitUART(void)

{

SCON = 0x50; // Cau hinh UART, che do 1

TMOD = 0x20; // Che do timer 1, tu dong nap lai

TH1 = 0xFD; // Toc do baud 9600

TL1 = 0xFD;

TR1 = 1; // Khoi dong timer 1

Trang 12

void UART_send_byte(uchar dat)

{

SBUF = dat; // Gui du lieu

while (!TI); // Cho cho den khi gui xong

UART_send_byte(*s); // Gui tung ky tu cua chuoi

s++; // Chuyen sang ky tu tiep theo

}

}

void main()

{

InitUART(); // Khoi tao UART

IT0 = 1; // Cau hinh ngat ngoai INT0 voi canh xuong

EX0 = 1; // Cho phep ngat ngoai INT0

EA = 1; // Cho phep ngat toan cuc

Trang 13

delay(100); // Chong nhieu

if (!key) // Neu nut bam duoc nhan

{

count++; // Tang bien dem

UART_send_byte(count +'0'); // Hien thi so lan nhan nut len UART }

Trang 14

void Delay(int time) {

// Khai bao ham thu vien

// Khai bao chan giao tiep cho den nhap nhay khi su dung

Trang 15

// Ham gui 1 lenh ra LCD

void LCD_SendCommand(unsigned char command)

Trang 16

LCD_SendCommand(0x06); // Tang ID, khong dich khung hinh

LCD_SendCommand(0x01); // Xoa toan bo khung hinh

Trang 17

delay(1000);

LCD_Gotoxy(3, 0); // Vi tri 3 hang tren

LCD_Puts("AAAAAAAAA"); // Hien thi ten

delay(100);

LCD_Gotoxy(1, 1); // Vi tri 5 hang duoi

LCD_Puts("111111111111111"); // Hien thi MSSV

Trang 18

void Timer0_ISR() interrupt 1

Trang 19

LCD_char(a / 10 + '0'); // Display the tens digit as a character

LCD_char(a % 10 + '0'); // Display the ones digit as a character

delay_ms(500); // Thay d?i delay thành 500ms

a++;

if (a == 21)

{

Trang 20

LCD_cmd(0x80); // Di chuyen con tro ve dau dong 1

// Khoi tao UART o mode 1, 9600 baud

SM0 = 0; SM1 = 1; // Chon UART mode 1

TMOD = 0x20; // 0010 xxxx - Timer1 hoat dong o che do 8bit

tu dong nap lai

Trang 22

led1 = 1; led2 = 0; delay(800);

led1 = 0; led2 = 1; delay(800);

}}

Ngày đăng: 12/01/2024, 01:12

TỪ KHÓA LIÊN QUAN

w