You are on page 1of 6

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC

KHOA ĐIỆN TỬ VIỄN THÔNG

Môn học: Thực hành vi xử lý


Bài số 3 : LẬP TRÌNH CHỨC NĂNG I/O ĐỒNG HỒ SỐ

Lớp : D15 DTVT


Nhóm sinh viên thực hiện:

Lê Hoàng Khánh – 20810510079


Nguyễn Tiến Mạnh -20810540057
Nguyễn Tuấn Hưng – 20810000261
Nguyễn Đăng Khánh – 20810000257
Nguyễn Cao Kỳ - 20810000069

Hà Nội, tháng 4 năm 2023


BÀI THỰC HÀNH SỐ 3
LẬP TRÌNH CHỨC NĂNG I/O ĐỒNG HỒ SỐ
1. Mục Đích
- Thực hành với các công cụ phần mềm: phần mềm lập trình KeilC, phần
mềm mô phỏng Proteus, phần mềm nạp chương trình Progisp cho vi điều
khiển.
- Lập trình chức năng cho AT89C51
- Điều khiển LED 7 THANH
- Hiểu nguyên lý hoạt động của bộ đếm Timer/Counter.
- Chạy và mô phỏng thành công được chương trình ứng dụng Timer lập trình
đồng hồ số
2. Yêu cầu
- Xác định được linh kiện và các thông số của linh kiện cần sử dụng
- Nắm bắt được chức năng các linh kiện trong hoạt động mạch
- Biết cách sử dụng các phần mềm lập trình, phần mềm mô phỏng, phần mềm
nạp chương trình cho vi điều khiển.
- Lập trình được chức năng out của vi điều khiển, ứng dụng Timer lập trình
đồng hồ số
3. Lựa chọn thiết bị
- AT89C51
- 2 Led 7 Thanh, 2 nút bấm
- 2 led đơn
- NOT
- RES 220
- RESPACK
- Phần mềm KeilC, Proteus, ProgISP
4. Vẽ mạch mô phỏng và viết chương trình

Vẽ lại mạch mô phỏng như mạch trong phần sơ đồ nguyên lý

Viết chương trình


Nhập chương trình mẫu vào phần mềm keilC và tiến hành chạy thử nghiệm trên
phần
mềm mô phỏng. Nếu trên mô phỏng, chương trình đã hoạt động tốt thì tiến hành
nạp và chạy chương trình trên kit Easy8051.
a) Lưu đồ thuật toán
Bắt đầu

Định nghĩa chân kết nối

Nutbam
Hiển thị Giờ và phút lên Set giờ
led 7 thanh
Set phút

Led đơn sang tắt theo Giờ Phút


giây

giay++(đếm giây)
Vòng lặp vô tận Đặt lại giá trị led 7
giay==59 thanh

Phut++

phut==59

Gio++

b.)Chương trình #include


<REGX51.H>
#define hour P3_6
#define min P3_7
#define led1 P2_0
#define led2 P2_1
#define led3 P2_2
#define led4 P2_3
#define on 0
#define off 1
char so[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
void delay_ms(int ms) { while(ms--){
TMOD = 0x01;
TH0 = oxfc;
TL0 = 0x18;
TR0 = 1;
while(!TF0); TF0
= 0;
TR0 = 0;
}
}
void hienThi(unsigned char gio, unsigned char phut){
unsigned char chuc0, chuc1, donVi0, donVi1, i;
chuc0 = gio/10; donVi0 = gio%10; chuc1 = phut/10;
donVi1 = phut%10; for(i=0;i<25;i++){

led1 = on; P0 = so[chuc0]; delay_ms(10); led1 = off;


led2 = on; P0 = so[donVi0]; delay_ms(10); led2 = off; led3 =
on; P0 = so[chuc1]; delay_ms(10); led3 = off; led4 = on; P0
= so[donVi1]; delay_ms(10); led4 = off;
}
}
void main(){
unsigned char gio = 0, phut=0, giay = 0;
P3_0 = ~P3_0; giay++;
hienThi(gio, phut);
if(giay==59) phut++;
if(phut==59) gio++; if(hour==0)
gio++; if(min==0) phut++;
if(phut>59) phut=0; if(gio>23)
gio=0;
}

5. Kinh nghiệm sau bài thực hành


-Hiểu được cơ bản cách làm việc trên 2 phần mềm KeilC và Proteus.
-Nâng cao kỹ năng làm việc nhóm trong việc viết code trên KeilC và phần mềm
mô phỏng Proteus.
- Hiểu đượcphương thức hoạt động của bộ đếm thời gian Timer/Counter. -
Hiểu được cách thức hoạt động của ứng dụng Timer lập trình đồng hồ số và
xác định được thông số của các linh kiện cần sử dụng.
Trong lúc làm bài báo cáo có gì sai sót mong thầy góp ý để chúng em có thể hoàn
thiện bài của mình tốt hơn.

You might also like