Professional Documents
Culture Documents
----------
1
Lời nói đầu
Trong những năm gần đây, cùng với sự phát triển mạnh mẽ của ngành công
nghiệp chế tạo linh kiện bán dẫn và vi mạch tổng hợp, đã kéo theo sụ ra đời và phát triển
của kĩ thuật vi điều khiển. Với nhiều ưu điểm, kĩ thuật vi điều khiển đã được sử dụng
rộng rãi ở nhiều lĩnh vực khác nhau như: mạch điều khiển hệ thống đèn, mạch đếm sản
phẩm, mạch điều khiển các thiết bị điều khiển từ xa,… Bằng cách áp dụng kĩ thuật vi xử
lý vào trong quá trình sản xuất và vận hành, con người đã giải quyết và tạo ra được nhiều
ứng dụng sản phẩm hữu ích làm thay đổi cuộc sống.
Một trong những ứng dụng thiết thực nhất vi điều khiển chính là hệ thống điều
khiển đèn giao thông tại các ngã tư mà chúng ta vẫn thường thấy. Đối với hệ thống giao
thông của nước ta hiện nay, vấn đề an toàn và tránh ùn tắc tại các ngã tư là một vấn đề
nổi cộm và mang nhiều thách thức được toàn xã hội quan tâm. Vì vậy, con người và các
phương tiện hướng dẫn giao thông đều mang ý nghĩa vô cùng quan trọng. Hệ thống đèn
giao thông không chỉ giúp chỉ dẫn, phân luồng giao thông, mà còn giúp hạn chế những
xung đột xảy ra khi tham gia lưu thông trên các ngã tư, hạn chế ùn tắc. Do đó, cần thiết
phải thiết kế và cho ra đời những mạch điều khiển hệ thống đèn giao thông sao cho thông
minh, hiệu quả và dễ sử dụng. Cũng vì những lý do đó mà nhóm chúng em gồm 2 thành
viên là: Đào Duy Hùng, Đỗ Quốc Hưng đã chọn đề tài “xây dựng hệ thống đèn giao
thông sử dụng vi điều khiển Atmega328p để hoàn thành bài tập lớn cho bộ môn Kĩ thuật
vi xử lý của mình.
Báo cáo của nhóm được xây dựng theo sườn mô hình 9 bước thiết kế một sản
phẩm mạch điện tử, sẽ trình bày đầy đủ quá trình hình thành ý tưởng, nguyên lý hoạt
động, cho đến khi hoàn thiện sản phẩm. Sản phẩm và báo cáo của chúng em có thể còn
nhiều thiết sót, rất mong được thầy góp ý để chúng em có thể hoàn thiện hơn.
Chúng em chân thành cảm ơn thầy Nguyễn Hoàng Dũng đã tận tình chỉ bảo góp
ý, gợi ý giải pháp để nhóm có thể hoàn thành đề tài!
2
Mục lục
3.2. Chương trình xử lý tín hiệu từ khối nút điều khiển ............................................ 22
Phụ lục 1: Code chương trình xử lý tín hiệu khối nút điều khiển .............................. 30
Phụ lục 2: Code chương trình truyền dữ liệu ra khối dịch bit.................................... 31
Phụ lục 4: Code chương trình mô phỏng thời gian thực ............................................ 33
4
Danh sách hình vẽ
Hình 2.1: Sơ đồ khối hệ thống đèn giao thông .............................................................. 10
Hình 2.2: Sơ đồ chân 7805 ............................................................................................. 11
Hình 2.3: Sơ đồ nguyên lý khối nguồn .......................................................................... 11
Hình 2.4: Atmega328 ..................................................................................................... 12
Hình 2.5: Bộ dao động thạch anh cấp tín hiệu dao động cho VĐK ............................... 13
Hình 2.6: Bộ reset bằng nút của vi điều khiển atmega328 ............................................ 14
Hình 2.7: Sơ đồ nguyên lý khối xử lý ............................................................................ 15
Hình 2.8: Tín hiệu vào ra khối vi xử lý .......................................................................... 15
Hình 2.9: Sơ đồ khối nút điều khiển .............................................................................. 16
Hình 2.10: IC 74HC595 ................................................................................................. 17
Hình 2.11: Sơ đồ nguyên lý IC74HC595 ....................................................................... 18
Hình 2.12: Sơ đồ chân led 7 thanh 2 chữ số catot chung ............................................... 19
Hình 2.13: Hiển thị số 1 trên led 7 thanh 2 chữ số ........................................................ 19
Hình 3.1: Sơ đồ chuyển trạng thái của chương trình ..................................................... 21
Hình 4.1: Mô phỏng sơ đồ nguyên lý mạch trên proteus 8.6 ......................................... 24
Hình 4.2: Mạch thử nghiệm thực tế trên bo mạch trắng ................................................ 24
Hình 4.3: Mạch in thiết kế trên altium ........................................................................... 25
Hình 4.4: Hình ảnh 3d của mạch .................................................................................... 26
Hình 4.5: Bottom layer mạch đèn giao thông ................................................................ 26
Hình 4.6: Mạch hoàn thiện ............................................................................................. 27
5
Danh sách các bảng biểu
Bảng 1.1: Bảng kế hoạch chung ....................................................................................... 8
Bảng 1.2: Bảng nhân lực .................................................................................................. 9
Bảng 1.3: Bảng phân chia công việc ................................................................................ 9
Bảng 2.1: Bảng mô tả chức năng chân Atmega 328 ...................................................... 12
Bảng 2.2: Bảng mô tả chân IC 74HC595....................................................................... 17
Bảng 2.3: Bảng mô tả tín hiệu vào/ra các chân IC74HC595 ......................................... 19
Bảng 2.4: Bảng giải mã chân hiển thị trên led 7 đoạn 2 chữ số ..................................... 20
Bảng 3.1: byte dịch ra khối dịch bit ............................................................................... 22
6
Chương 1. Mô tả kỹ thuật và xác lập kế hoạch
1.1. Tổng quan và xác định đề tài
Đề tài của chúng em được phân công là thiết kế và xây dựng hệ thống đèn giao thông
ngã tư dạng mô hình. Chi tiết hệ thống của đèn giao thông sẽ gồm 2 tập hợp đèn (đỏ,
xanh, vàng) cùng với linh kiện số hiển thị thời gian đếm của các đèn. Mô hình được xây
dựng với các chức năng cơ bản và một số chức năng thêm sẽ được trình bày trong phần
1.2. Mô tả kỹ thuật
1.2.1. Yêu cầu chức năng
- Hiển thị đèn 3 màu: Xanh – đỏ - vàng ứng với 2 hướng đi tại một ngã tư. Ý nghĩa
của từng đèn như sau: Xanh - các phương tiện được phép đi thẳng hoặc rẽ phải; Đỏ - các
phương tiện không được đi quá giới hạn vạch kẻ đường ; Vàng – báo hiệu các phương
tiện chuẩn bị dừng lại vì sắp đến tín hiệu đèn đỏ.
- Hiển thị thời gian trùng khớp với sự xuất hiện của 3 màu. Do tính chất của giao
thông nước ta, thời gian đèn đỏ thường lớn nhất và bằng tổng thời gian đèn xanh với đèn
vàng cộng lại.
- Cho phép người dùng điều chỉnh thời gian hiển thị trực tiếp cho đèn vàng và đèn
xanh. Người dùng tự cân đối điều chỉnh thời gian hiển thị của đèn vàng và đèn xanh sao
cho đèn đỏ (thời gian hiển thị đèn đỏ bằng tổng thời gian hiển thị đèn vàng và đèn xanh)
có thời gian hiển thị từ 00 đến 99 giây.
- Hệ thống có thể reset bằng tay hoặc sẽ tự reset khi mất nguồn. Chế độ ban đầu khi
khởi động sau reset cho phép người dùng có thể cài đặt thời gian gốc bắt đầu (với giờ và
phút). Ngoài ra có thể thay đổi chương trình vi điều khiển qua thiết bị USB PL 2303.
- Sau khi cài đặt thời gian bắt đầu hoạt động (thời gian gốc). Hệ thống lấy đó làm
mốc quy chiếu để hoạt động theo chế độ: hoạt động điều khiển giao thông từ 5 giờ sáng
đến 11 giờ tối và chuyển sang đèn vàng từ 11 giờ tối đến 5 giờ sáng hôm sau.
- Ngắt trạng thái hoạt động điều khiển giao thông chuyển sang trạng thái chỉ đèn đỏ
hoặc chỉ đèn xanh hoặc chỉ đèn vàng để phục vụ một số mục đích nhất định.
7
1.2.2. Yêu cầu phi chức năng
- Mạch sử dụng nguồn hoạt động công suất thấp. tiêu tốn ít năng lượng, có khả năng
hoạt động lâu dài.
- Sử dụng 1 cặp led 7 thanh 2 chữ số để hiện thời gian đèn sáng ứng với từng màu,
hiển thị rõ nét, dễ quan sát trong điều kiện ánh sáng ban ngày.
- Sử dụng con vi xử lý thuộc họ điều khiển AVR lập trình ghép nối vi điều khiển với
các thiết bị ngoại vi.
- Hoạt động tốt ở nhiệt độ từ 2 đến 60 độ C, phù hợp với điều kiện thời tiết của nước
ta.
- Mạch có kích thước nhỏ gọn, dễ dàng di chuyển, tối ưu về mặt không gian sắp xếp
linh kiện.
- Giá thành để hoàn thiện: không quá 200.000 VNĐ.
Bảng 1.1 là lịch trình các công việc cần thực hiện trong suốt quá trình làm dự án.
8
1.3.3. Bảng nhân lực
Bảng nhân lực là bảng thống kê lại tất cả những thông tin về từng cá nhân trong
một nhóm. Bảng nhân lực bao gồm: điểm mạnh, điểm yếu, kĩ năng, thời gian làm việc…
của các thành viên trong nhóm. Chính vì vậy, bảng nhân lực sẽ giúp chúng ta phân công
công việc một cách hợp lý nhất, phù hợp với từng cá nhân trong nhóm nhất. Dưới đây
Bảng 1.2 là bảng nhân lực của nhóm cho bài tập lớn.
Bảng 1.2: Bảng nhân lực
MSSV Tên Điểm mạnh Điểm yếu
20162007 Đỗ Quốc Hưng báo cáo, hàn mạch code
20161923 Đào Duy Hùng coding, lắp mạch hàn mạch
1.3.4. Phân chia công việc
Ta tiến hành phân công các thành viên trong nhóm vào các công việc dựa theo các
tiêu chí:
− Công việc được phân chia đều cho các thành viên trong nhóm.
− Các công việc được giao cho từng thành viên phải phù hợp với ưu nhược điểm
cũng như thời gian làm việc.
9
Chương 2. Thiết kế kiến trúc
2.1. Sơ đồ khối
Từ ý tưởng xây dựng hệ thống, mô hình được thiết kế sơ đồ khối như Hình 2.1.
10
2.2. Khối nguồn
2.2.1. Giới thiệu 7805
11
2.3. Khối vi điều khiển
Khối vi điều khiển hoạt động bởi nguồn nuôi 5VDC. Khối nhận tín hiệu từ khối nút
điều khiển và thực hiện đưa ra các tín hiệu điều khiển khối hiển thị và khối dịch bit.
12
7 VCC chân nguồn (1.5V – 5.5V)
8 GND chân nối đất
9 XTAL 1 chân dao động thạch anh 1
10 XTAL 2 chân dao động thạch anh 2
11 PD5 chân digital 5 (PWM)
12 PD6 chân digital 6 (PWM)
13 PD7 chân digital 7
14 PB0 chân digital 8
15 PB1 chân digital 9 (PWM)
16 PB2 chân digital 10(PWM)
17 PB3 chân digital 11(PWM)
18 PB4 chân digital 12
19 PB5 chân digital 13
20 AVCC cấp điện áp dương cho bộ ADC
21 AREF điện áp tham chiều bộ ADC
22 GND chân nối đất
23 PC0 tín hiệu vào analog 0
24 PC1 tín hiệu vào analog 1
25 PC2 tín hiệu vào analog 2
26 PC3 tín hiệu vào analog 3
27 PC4 tín hiệu vào analog 4
28 PC5 tín hiệu vào analog 5
Từ Bảng 2.1 ta thấy các chân để vi điểu khiển có thể hoạt động là chân VCC, GND,
AVCC (cung cấp năng lượng), hai chân XTAL1 và XTAL 2 nhận tín hiệu dao động từ
bộ dao động thạch anh (Hình 2.5).
Hình 2.5: Bộ dao động thạch anh cấp tín hiệu dao động cho VĐK
Bộ dao động thạch anh cho atmega 328 yêu cầu thạch anh 16MHz và 2 tụ 22pF.
13
Bộ chuyển đổi ADC:
Chân AVCC được dùng để cấp nguồn nuôi cho bộ ADC, ngay cả khi các chân analog
không được sử dụng thì AVCC vẫn được nối Vcc.
Bộ ADC gồm 6 kênh 10bit từ A0 đến A5 (PC0 – PC5). Các giá trị tương tự đọc vào từ
chân analog được chuyển đổi sang dạng số 10bit (có 210 giá trị). Chân AREF mang điện
áp tham chiếu cho bộ chuyển đổi ADC. Điện áp đưa vào chân analog yêu cầu nhỏ hơn
điện áp trên AREF, giá trị số thu được phụ thuộc vào tỉ lệ giữa điện áp trên chân analog
và điện áp tham chiếu. Ví dụ, Vref (trên chân AREF) là 5 V, Vin trên A0 là 3.2V thì giá
𝑉𝑖𝑛 3.2
trị số thu được sẽ là: [ x 1024] = [ x 1024] = 655. Nếu Vin < 0 thì giá trị thu được
𝑉𝑟𝑒𝑓 5
là 0 hoặc nếu Vin >= Vref thì giá trị thu được là 1023.
Bộ reset:
Chân reset của vi điều khiển là chân số 1, ở trạng thái thấp vi điều khiển reset chạy
lại chương trình. Chân reset được nối qua trở và nút bấm để reset bằng tay như trong
Hình 2.6
.
Hình 2.6: Bộ reset bằng nút của vi điều khiển atmega328
14
2.3.2. Sơ đồ nguyên lý khối xử lý.
Sơ đồ nguyên lý khối xử lý mô tả trong Hình 2.7. Các chân VCC và AVCC đều được
nối lên nguồn 5V-DC. Chân AREF đặt vào điện áp tham chiếu Vref là 5V. Chân A0 hay
chân analog 0 nhận tín hiệu vào là điện áp Vpa đi ra từ khối nút điều khiển (0 < Vpa <
Vref).
15
2.4. Khối nút điều khiển
Khối nút điều khiển sử dụng 4 nút điều kết hợp với các điển trở khác nhau để đưa ra
tín hiệu điện áp A0 như Hình 2.9.
Sử dụng nguyên lý phân áp để đưa ra các mức điện áp khác nhau cho các tín hiệu
R
A0 khác nhau. Khi nút 1 được ấn điện áp A0 sẽ là Vcc. . Với các giá trị điện trở
R+R1
R1,R2,R3,R4 khác nhau khi các nút b1 đến b4 được ấn sẽ đưa ra các tín hiệu điện áp A0
khác nhau, các tín hiệu tương tự này khi qua bộ chuyển đổi ADC của vi điều khiển sẽ
được phân biệt bằng các số khác nhau trong khoảng 0 đến 1023.
Giá trị R, R1, R2, R3, R4 được lựa chọn lần lượt là 10k, 1k, 2.2k, 3k, 3.9k.
2.5. Khối dịch bit
Để nhận tín hiệu điều khiển từ khối xử lý trung tâm của Atmega328, ta cần một IC
có khả năng xử lý dịch bit qua đó điều khiển hiển thị của led 7 đoạn. IC 74HC595 chính
là lựa chọn phù hợp. IC 74HC595 là thanh ghi dịch 8bit kết hợp chốt dữ liệu, đầu vào
nối tiếp đầu ra song song. Chức năng: Thường dùng trong các mạch quét led 7, led
16
matrix…để tiết kiệm số chân vi điều khiển tối đa (3 chân). Có thể mở rộng số chân vi
điều khiển bao nhiêu tùy thích mà không IC nào làm được bằng việc nối tiếp đầu vào dữ
liệu các IC với nhau. Nói một cách chính xác, IC này là IC “dịch chốt”.
Dịch được dùng cho IC này thực chất là cách nói của dân kỹ thuật về đặc tính ngõ
vào nối tiếp của IC. Vậy "đặc tính ngõ vào nối tiếp của IC" là như thế nào? Có thể nói 1
cách đơn giản là ta có thể đưa lần lượt nhiều giá trị logic vào 1 ngõ vào của IC đó để nó
lưu vào bộ nhớ chờ đến khi có lệnh xử lí. Có thể hiểu ngõ vào nối tiếp tức là các giá trị
được nạp vào IC một cách từ từ ở từng thời điểm khác nhau trên cùng 1 ngõ vào, còn
nếu nói vào song song thì có nghĩa là sẽ có nhiều ngõ vào và các giá trị sẽ được nạp vào
IC cùng 1 lúc. Thuật ngữ này đối với ngõ ra cũng tương tự.
Chốt là khi thỏa mản 1 điều kiện nào đó nó sẽ cho phép IC giữ nguyên giá trị ngõ
ra, không cho nó thay đổi mặc dù tín hiệu ngõ vào có thay đổi thế nào.
17
6 Q6 chân ra song song bit số 6
7 Q7 chân ra song song bit số 7
8 GND chân nối đất
9 Q7’ chân ra nối tiếp ở chế độ ghép nối nhiều IC74HC595
10 ~MR tích cực mức thấp reset dòng bit cũ của IC
chân vào xung, khi có sườn dương IC đưa tín hiệu vào
11 SH_CP
từ chân DS
chân vào xung, khi có sườn dương IC đưa tín hiệu chờ
12 ST_SP
trong IC ra ngõ ra song song
13 ~OE tích cực thấp cho điều chỉnh trạng thái ngõ ra
14 DS chân vào data nhận chuỗi 8 bit 1 lần
15 Q0 chân ra song song bit số 0
16 VCC chân cấp nguồn
Nguyên lý của IC74HC595 có thể được hiểu rõ rang hơn qua Hình 2.11.
18
được đưa ra ngõ ra song song từ Q0 đến Q7, với điều kiện ~OE tích cực thấp. Khi ~OE
ở trạng thái cao thì các chân ra Q sẽ ở trạng thái trở kháng cao.
Tín hiệu của khối dịch bit được mô tả trong Bảng 2.3.
Bảng 2.3: Bảng mô tả tín hiệu vào/ra các chân IC74HC595
Chân Tín hiệu loại Mô tả
SHCP Input Nhận tín hiệu xung từ chân digital 7
STCP Input Nhận tín hiệu xung từ chân digital 6
DS Input Nhân dữ liệu từ chân digital 5
Q1 – Q7 Output Đưa dữ liệu song song ứng với các giá trị từ a đến f
Trong Bảng 2.2 H là mức cao và L là mức thấp. Vì khi hiển thị các chữ số chỉ có thể
hiện thì đồng thời một số nên nhóm dùng Atmega 328 để điều khiển led hiển thị các chữ
số khác nhau theo mong muốn bằng phương pháp quét led.
Phương pháp quét led: Ta sẽ thực hiện bật tắt liên tục các đèn D1, D2 để có thể
hiển thị số mong muốn. Gọi thời gian để hiển thị một số có 2 chữ số trên led là một chu
kì hiển thị. Khi đó chu kì hiển thị sẽ gồm 2 giai đoạn. Giai đoạn 1: D2 tắt, chuyển dữ
liệu hiển thị cho chữ số thứ nhất vào, bật D1. Giai đoạn 2: D1 tắt, chuyển dữ liệu cho
chữ số thứ hai vào, bật D2. Như vậy trong một chu kì hiển thị các đèn sẽ hiện thị đầy đủ
2 chữ số đưa vào. Nếu tần số hiện thỉ lớn hơn 24Hz thì mắt sẽ không cảm nhận được sự
gián đoạn của các led, ta có được sự hiển thị đầy đủ như mong muốn.
Các chân digital 3, 4 của vi điều khiển thực hiện việc bật hoặc tắt D1, D2. Còn các
chân led sẽ nhận tín hiệu từ đầu ra song song của bộ dịch bit từ Q1 đến Q7. Ngoài ra
khối hiển thị còn các 3 cặp led: xanh, đỏ, vàng. Các led này được điều khiển bởi chân
digital 8 đến 13. Thời gian hiển thị phụ thuộc vào thời gian setup cho đèn vàng và xanh.
20
Chương 3. Cấu trúc chương trình vi điều khiển
3.1. Sơ đồ trạng thái
Sơ đồ chuyển trạng thái của chương trình trong vi điều khiển thể hiện trong Hình
3.1.
21
đổi lựa chọn giữa việc set thời gian cho vàng hoặc là cho xanh. Còn ở trạng thái thứ 4,
nút thứ 2 sẽ lựa chọn việc chỉ hiện thị loại đèn nào trong 3 loại: đỏ, xanh, hoặc vàng.
3.2. Chương trình xử lý tín hiệu từ khối nút điều khiển
Hàm analogRead(): luôn trả về một giá trị nguyên trong khoảng từ 0 đến 1023 tùy
thuộc và điện áp tham chiếu từ 0 đến 5V. Đề tài này, nhóm sử dụng điện áp tham chiếu
là 5V. Phần 2.3 đã trình bày về cách tính toán từ tín hiệu tương tự sang giá trị số. Từ các
giá trị điện trở lựa chọn, ta tính được các giá trị số tương ứng với việc nhấn các nút từ 1
đến 4 lần lượt là: 931, 839, 788, 737.
Vì giá trị thực tế không ổn định hoặc có thể có sai số nên khi xử lý trong code ta sẽ
để các giá trị xác định việc ấn các nút chạy trong khoảng chênh lệch ±10. Ví dụ 931 thì
cho 920 < analogRead() < 940.
Phần code xử lí tín hiệu nhận biết việc ấn các nút để trong Phụ lục 1.
22
Phần code chương trình dịch bit trong Phụ lục 2.
3.4. Chương trình quét led
Theo nguyên lý quét led được trình bày trong Phần 2.6, code chương trình quét led
trong Phụ lục 3.
3.5. Chương trình mô phỏng thời gian thực
Một chức năng quan trọng của hệ thống đèn giao thông là với thời gian setup ban
đầu khi khởi động (reset), hệ thống sẽ thực hiện việc bật tắt đèn (từ vàng sang điều khiển
giao thông) theo đúng khoảng thời gian thực tế. Để thực hiện khả năng này, hàm millis()
được sử dụng.
Hàm millis(): có nhiệm vụ một số thuộc kiểu unsigned long (32 bit) là thời gian tính
theo mili giây kể từ lúc mạch Arduino bắt đầu chương trình. Nó sẽ tràn số sau khi vượt
quá giá trị 232-1 tương đương với 50 ngày. Tuy nhiên ta có thể dùng phương pháp ép
kiểu về unsigned long để xử lý vấn đề này.
Phần code sử dụng millis để tính toán thời gian thực để trong Phụ lục 4.
23
Chương 4. Thử nghiệm và mô phỏng
4.1. Mô phỏng proteus
Sau khi thiết kế sơ đồ khối và mạch nguyên lí hoàn chỉnh, nhóm đi và mô phỏng trên
proteus như Hình 4.1 để kiểm tra lại tính chính xác cũng như có những sự thay đổi phù
hợp với thực tế.
24
Hình 4.2 là hình ảnh mạch sau khi lắp đặt thử nghiệm thành công trên thực tế, sau
khi hiệu chỉnh một số các thành phần phù hợp yêu cầu đầu ra.
4.3. Vẽ mạch nguyên lí và PCB trên Altium Designer
Dựa trên sơ đồ nguyên lí đã xây dựng, nhóm chúng em đã tiến hành vẽ lại mạch
nguyên lí và mạch in PCB trên phần mềm Altium Designer với các tiêu chí như sau:
• Mạch in 1 lớp, hạn chế sử dụng dây câu
• Kích thước mạch 7x6 𝑐𝑚2
• Chiều rộng dây lớn hơn 1mm.
Dưới đây Hình 4.3 và Hình 4.4 là hình ảnh 3D và mạch in của mạch.
25
Hình 4.4: Hình ảnh 3d của mạch
27
Kết luận
Sau khi hoàn thiện sản phẩm, chúng em đã tiếp thu và bồi dưỡng cho mình thêm
nhiều kinh nghiệm trong công việc thiết kế xây dựng một mạch điện tử sử dụng kĩ
thuật vi điều khiển và vi xử lý. Các thành viên trong nhóm đều đã cố gắng tích lũy, tìm
hiểu và training cho nhau các kĩ năng mà người này mạnh, người kia còn yếu, các công
việc trong quá trình học đều được mọi người nỗ lực hoàn thành.
Chúng em xin chân thành cảm ơn nhà trường đã tạo điều kiện cho chúng em có cơ
hội thực hành và tiếp xúc với nội dung của môn học Kĩ thuật vi xử lý, cảm ơn thầy
Nguyễn Hoàng Dũng đã tận tình hướng dẫn, giải đáp thắc mắc, góp ý và chỉ bảo nhóm
trong suốt thời gian chúng em hoàn thành bài tập lớn.
Mặc dù đã cố gắng hoàn thành đề tài tốt nhất nhưng do thời gian eo hẹp và kiến
thức, kĩ năng còn hạn chế nên sản phẩm của chúng em sẽ không tránh khỏi những hạn
chế, thiếu sót nhất định, rất mong nhận được sự cảm thông, chia sẻ và tận tình đóng
góp của quý thầy và các bạn.
Chúng em xin chân thành cảm ơn!
28
Tài liệu tham khảo
1. Datasheet ATMEGA 328P,
http://www.datasheetspdf.com/datasheet/search.php?sWord=pic16f877a
2. http://mualinhkien.vn/
3. https://electrosome.com/adc-pic-microcontroller-hi-tech-c/
4. http://xcvn.blogspot.vn/
5. http://arduino.vn/reference/millis
6. http://arduino.vn/bai-viet/214-cach-lap-trinh-nhieu-con-led-7-doan-loai-don
29
Phụ lục
Phụ lục 1: Code chương trình xử lý tín hiệu khối nút điều khiển
/*BUTTON
- BUTTON1 analogRead(A0) >= 925 && analogRead(A0) <= 935
- BUTTON2 analogRead(A0) >= 830 && analogRead(A0) <= 850
- BUTTON3 analogRead(A0) >= 780 && analogRead(A0) <= 795
- BUTTON4 analogRead(A0) >= 725 && analogRead(A0) <= 745
*/
30
Phụ lục 2: Code chương trình truyền dữ liệu ra khối dịch bit
// hàm truyền bit từ nối tiếp sang con HC595 thành song song
void truyenbit(int sotruyen, byte soled){
byte *a = new byte[soled];
for(byte i = 0; i<soled; i++){
a[i] = (byte)(sotruyen % 10);
sotruyen = (int)(sotruyen / 10);
}
digitalWrite(latchPin,LOW);
for(int i = soled; i>=0 ; i--)
shiftOut(dataPin,clockPin,MSBFIRST,seg[a[i]]);
digitalWrite(latchPin,HIGH);
free(a);
}
31
Phụ luc 3: Code chương trình quét led
//HÀM HIỂN THỊ TRÊN LED 7 ĐOẠN
void hienthiLED7doan(int so1, int so2){
int c1, dv1, c2, dv2;
c1 = so1;
c2 = so2;
laychuso(c1,dv1);
laychuso(c2,dv2);
so1 = c1*10 + c2;
so2 = dv1*10 + dv2;
for(byte i = 0; i<2; i++){
if((a == 1 || a == 3) && checkbutton())break;
else if(a == 2 && (checkbutton2() || checkbutton3()))break;
digitalWrite(led1onoff,HIGH);
truyenbit(so2,2);
digitalWrite(led2onoff,LOW);
delay(timehienthi);
digitalWrite(led2onoff,HIGH);
truyenbit(so1,2);
digitalWrite(led1onoff,LOW);
delay(timehienthi);
}
}
32
Phụ lục 4: Code chương trình mô phỏng thời gian thực
// hàm setup thời gian
void settime(){
int mode = 1;
while(a == 0){
if(analogRead(A0) >= 925 && analogRead(A0) <= 935){
starttime = (unsigned long)((unsigned long)(hours)*60*60*1000 +
(unsigned long)(mins)*60*1000);
lasttime = millis();
timeto23 = (starttime <= 82800000) ? 82800000 - starttime :
82800000 - starttime + timetostart;
timeto5 = (starttime <= 18000000) ? 18000000 - starttime :
18000000 - starttime + timetostart;
if(starttime >= 82800000 || starttime < 18000000) onoff = 0;
else onoff = 1;
break;
}
if(analogRead(A0) >= 830 && analogRead(A0) <= 850){
while(analogRead(A0) >= 830 && analogRead(A0) <= 850);mode
=!mode;
}
if(mode){
if(analogRead(A0) >= 780 && analogRead(A0) <=
795){while(analogRead(A0) >= 780 && analogRead(A0) <=
795);hours++;if(hours == 24)hours = 0;}
else if(analogRead(A0) >= 725 && analogRead(A0) <=
745){while(analogRead(A0) >= 725 && analogRead(A0) <= 745);hours--
;if(hours == -1)hours = 23;}
hienthiLED7doan(hours,mins);
digitalWrite(ledye1,HIGH);
digitalWrite(ledye2,LOW);
}
else {
if(analogRead(A0) >= 780 && analogRead(A0) <=
795){while(analogRead(A0) >= 780 && analogRead(A0) <= 795);mins++;if(mins
== 60)mins = 0;}
else if(analogRead(A0) >= 725 && analogRead(A0) <=
745){while(analogRead(A0) >= 725 && analogRead(A0) <= 745);mins--;if(mins
== -1)mins = 59;}
hienthiLED7doan(hours,mins);
digitalWrite(ledye2,HIGH);
digitalWrite(ledye1,LOW);
}
}
}
//xét điều kiện bật tắt chuyển đổi giữa hoạt động và nghỉ đêm với hàm
millis()
if((unsigned long)(millis() - lasttime + 1)% timetostart ==
timeto23)onoff = 0;
else if((unsigned long)(millis() - lasttime + 1)% timetostart ==
timeto5)onoff = 1;
33