Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

31
Báo CáoBài Tập Lớn Vi Xử Lý Tên đề tài: Thiết kế đồng hồ điện tử Nhóm : 2 TC-301 Thành viên trong nhóm : #1: Đinh Huy Cương Chữ ký: ____________________ Ngày: _______ Place a photograph of the project team (annotated with names ) along with the completed project here. Delete this text box before pasting in your photo!

description

Báo cáo bài tập lớn vi xử lí thầy Nam

Transcript of Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Page 1: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Báo CáoBài Tập Lớn Vi Xử Lý

Tên đề tài: Thiết kế đồng hồ điện tử Nhóm : 2 TC-301

Thành viên trong nhóm :

#1: Đinh Huy Cương Chữ ký: ____________________ Ngày: _______

#2: Đỗ Đức Cường Chữ ký: ____________________ Ngày: _______

#3: Phan Duy Chinh Chữ ký: ____________________ Ngày: _______

#4: Nguyễn Văn Duẩn Chữ ký: ____________________ Ngày: _______

#5: Nguyễn Thành Chung Chữ ký: ____________________ Ngày: _______

Place a photograph of the project team (annotated with names) along with the completed project here.

Delete this text box before pasting in your photo!

Page 2: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

ĐÁNH GIÁ BÁO CÁO

Thành phần/Tiêu chuẩn Điểm H/s nhân Điểm

Mở đầu 0 1 2 3 4 5 6 7 8 9 10 X 1

Tổng quan hệ thống 0 1 2 3 4 5 6 7 8 9 10 X 2

Yêu cầu kỹ thuật 0 1 2 3 4 5 6 7 8 9 10 X 2

Kiến trúc và chi tiết thiết kế 0 1 2 3 4 5 6 7 8 9 10 X 4

Tóm tắt và kết luận 0 1 2 3 4 5 6 7 8 9 10 X 1

Tài liệu tham khảo 0 1 2 3 4 5 6 7 8 9 10 X 1

Phụ lục A: Phân công công việc 0 1 2 3 4 5 6 7 8 9 10 X 2

Phụ lục B: Danh sách phần mềm sử dụng 0 1 2 3 4 5 6 7 8 9 10 X 2

Văn phong 0 1 2 3 4 5 6 7 8 9 10 X3

CD 0 1 2 3 4 5 6 7 8 9 10 X 2

TỔNG

Đánh giá phần mềmNhận xét:

Page 3: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Mục lục

Lời mở đầu ?1. Tổng quan hệ thống ?2. Yêu cầu ?3. Kế hoạch thực hiện ?4. Thiết kế kiến trúc hệ thống ?5. Chi tiết thiết kế

Lời kết ?Tài liệu tham khảo ?Phụ lục A: Phân công công việc ?Phụ lục B: Danh sách phần mềm sử dụng ?Phụ lục C: Hóa đơn ?

Lời mở đầu

Page 4: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Trong những thập niên cuối thế kỷ 20, kỹ thuật điện tử đã liên tục có những tiến bộ vượt

bậc, đặc biệt là trong kỹ thuật chế tạo vi mạch điện tử. Sự ra đời và phát triển nhanh chóng của kỹ

thuật điện tử mà đặc trưng là kỹ thuật vi xử lý đã tạo ra một bước ngoặt quan trọng trong sự phát

triển của khoa học tính toán và xử lý thông tin, nó ảnh hưởng quyết định đến con đường “tin học

hoá” xã hội, tứ là con đường mà thông tin đã và đang trở thành lực lượng sản xuất trực tiếp trong

nền sản xuất của kỷ nguyên tới.

Năm 1970, công ty Intel cho ra đời bộ vi xử lý đầu tiên, có tên gọi là Intel – 4004, nhằm đáp

ứng nhu cầu cần thiết của một công ty kinh doanh là hãng truyền thông BUSICOM. Intel – 4004 là

kết quả một ý tưởng quan trọng trong sự phát triển kỹ thuật vi xử lý số. Đó là một kết cấu logic mà

có thể thay đổi chức năng của nó bằng chương trình ngoài chứ không phát triển theo hướng một cấu

trúc chỉ thực hiện một số chức năng nhất định như trước đây. Do khả năng mềm dẻo hoá trong các

thao tác của mình, năm 1970 Intel – 4004 đã trở thành bộ vi xử lý đầu tiên trên thị trường thế giới.

Intel - 4004 là bộ vi xử lý 4 bits song song, được chế tạo theo quy trình công nghệ MOS kênh cảm

ứng loại P. Thời gian tối thiểu để thực hiện một lệnh là 10,8µs. Năm 1972, hãng Intel cho xuất

xưởng bộ vi xử lý có tên gọi là Intel – 8008. Kiểu này vẫn được chế tạo theo công nghệ PMOS

nhưng là laọi 8 bits song song. Bộ vi xử lý này là CPU của máy tính MICRAL do Pháp chế tạo.

Đến đây, hàng loạt các hãng điện tử nổi tiếng hàng đầu của hế giới như National, Rockwell, … đã

nhanh chóng đi vào công nghệ sản xuất và chế tạo các bộ vi xử lý.

Năm 1974, hãng Intel cho ra đời bộ vi xử lý 8080 – 8 bits song song được chế tạo theo công

nghệ NMOS với thời gian thực hiện một lệnh là 2µs, đã đánh dấu một bước tiến lớn trên con đường

làm chủ tốc độ xử lý tin của kỹ thuật điện tử hiện đại. Các hãng khác cũng cho ra đời những bộ vi

xử lý có tín năng tương ứng: 6800 (Motorola), 8080 (Texas Intrusment), …Năm 1978, laọi 8080

được cải tiến thành loại 8085. Lúc này đã xuất hiện những máy tính mini sử dụng các bộ vi xử lý

nói trên. Theo đà đó các thông số cơ bản của bộ vi xử lý ngày càng cải thiện: tốc độ nagỳ càng cao

(các bộ vi xử lý hiện đại của Intel đã đạt tới tốc độ 500 – 800 MHz), độ rộng kênh thông tin ngày

càng lớn (các bộ vi xử lý hiện đại của Intel có kênh dữ liệu 16/32/64 bit). Điều đó đã giúp cho bài

toán thiết kế các hệ vi xử lý chuyên dụng với tính năng rộng lớn trở nên dễ dàng hơn.

Một hệ vi xử lý được thiết kế tối thiểu bao gồm một bộ vi xử lý (đây là khối điều khiển

trung tâm), một bộ nhớ RAM, một bộ nhớ cố định ROM và các cổng vào ra số liệu cùng những

thiết bị ngoại vi cần thiết. Một hệ vi xử lý tối đa khôngcó giới hạn về số lượng thành phần, về chức

năng thực hiện và về quy mô ứng dụng.

Page 5: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Ngày nay, những ứng dụng của vi điều khiển đã đi sâu vào đời sống sinh hoạt và sản xuất

của con người, là một phần tất yếu không thể thiếu trong đời sông hiện đại. Thế kỷ 21 được xem là

thế kỷ của khoa học công nghệ, là thế kỷ mà máy móc được thiết kế và lập trình một cách tự động

để thay thế các hoạt động của con người trong sản xuất, cũng như để phục vụ các công việc trong

sinh hoạt. Trong một cuộc sống mang tính tự động hoá cao thì các mạch vi xử lý như là một công

cụ đắc lực, quan trọng , hỗ trợ cho con người thực hiện nhu cầu ngày càng cao và càng hoàn thiện

của mình.

Đang là sinh viên ngồi trên ghế nhà trường, cơ hội tiếp cận, học tập những công nghệ tiên

tiến, hiện đại chưa nhiều, nên trong quá trình tự học và nghiên cứu, nhóm chúng em đã cố gắng tìm

hiểu về bộ vi xử lý, cũng như các ứng dụng của nó trong các hệ vi xử lý. Với những gì nghiên cứu

được, nhóm chúng em đã làm thực hành ứng dụng thông qua việc thiết kế đồng hồ điện tử.Đây là

cơ hội rất tốt cho chúng em trau dồi kiến thức thực tế,áp dụng lý thuyết đã học và rèn luyện bản

thân trong môi trường làm việc nhóm.

Chúng em cũng xin trân trọng cảm ơn thầy giáo Phạm Ngọc Nam và anh Phạm Văn Hà đã

nhiệt tình hướng dẫn chúng em suốt quá trình học tập và làm sản phẩm.

1. Tổng quan hệ thống

Page 6: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Đề tài nhằm thiết kế và xây dựng một mạch đồng hồ điện tử, trong đó hệ thống sẽ thông báo

nhiệt độ, ngày giờ theo thời gian thực hay một dòng thông báo bất kì. Mạch cần đảm bảo chức năng

đo nhiệt độ, căn chỉnh ngày giờ, chuyển hiệu ứng thông báo. Thông báo được thực hiện nhờ LED

ma trận.

Sơ đồ khối hệ thống:

Mạch mô phỏng :

IC Thời gian thực

Page 7: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)
Page 8: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

2. Yêu cầu

a. Yêu cầu chức năng

- Hiển thị giờ,phút , ngày ,tháng,năm, nhiệt độ trên bảng ma trận LED 32x16.

- Hiện thị chữ trên bảng ma trận LED 32x16.

- Sử dụng 4 hiệu ứng hiển thị text.

- Sử dụng nút bấm để cài đặt thời gian và thay đổi hiển thị.

- Thiết kế với LED indoor.

b. Yêu cầu phi chức năng

Sử dụng vi điều khiển PIC 16f877a.

Thiết kế với LED indoor.

Thiết kế mạch nhỏ hơn 2dm2.

Chi phí <= 300.000 VNĐ.

Hệ thống sử dụng đơn giản với số ít các nút bấm điều khiển.

Thời gian thực hiện đề tài: từ lúc nhận đề tài( đầu kì ) tới trước 01/06/2011.

c. Mục tiêu thiết kế

Ghép 8 LED ma trận 8x8 cỡ nhỏ tạo thành bảng LED ma trận 32x16.

Sử dụng 8 IC dịch 74HC595 để đưa dữ liệu ra cột.

Sử dụng IC cảm biến nhiệt LM35 để đo nhiệt độ phòng.

Sử dụng IC thời gian thực DS1307 để đếm thời gian

Page 9: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

3. Kế hoạch thực hiện

Page 10: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

4. Thiết kế kiến trúc hệ thống

Hệ thống gồm các khối chính sau:

Thời gian thực : dùng IC DS1307.

Đo nhiệt độ : dùng sensor LM35

Vi điều khiển : PIC 16F877A

Điều khiển Led ma trận : dùng các IC dịch 74HC595 và các nút bấm thay đổi chế độ

hiển thị, chinh thời gian …

Hiển thị : Led ma trận 32x16 ghép từ 8 led 8x8.

5. Chi tiết thiết kế

Khối thời gian thực : DS1307

Vcc: nối với nguồn 5V

X1,X2 : nối với thạch anh 32,768kHz

SDA : chân data nối với chân C4 của PIC

SCL : chân clock nối với chân C3 của PIC

GND: đất.

Page 11: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Khối đo nhiệt độ phòng : sensor LM35 +5V

Vout

Vout : nối với chân A0 để đưa vào bộ ADC của PIC

Khối vi điều khiển : PIC 16F877A

Chân MCLR : dùng để reset PIC.Chân AN0 : nhận tín hiệu tương tự từ LM35 để chuyển vào bộ ADCCác chân CLKI, CLKO : nối với thạch anh tạo xung dao động cho PICChân SCL,SDA : giao tiếp với DS 1307.Các chân B0 – B5 : điều khiển 74 HC595Các chân A1 – A4 : điều khiển các nút bấm.

LM35

Page 12: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Khối điền khiển led : các IC dịch 74HC595 (8 IC đưa dữ liệu ra cột, 1 IC đưa dữ liệu ra hàng của led ma trận)

DS : chân dữ liệu vàoQ0 – Q7 : 8 chân dữ liệu ra ; Q7’ : chân nối với IC 74HC595 kế tiếp SH_CP : xung CLK chốt dữ liệu vào ICST_CP : xung CLK chốt dữ liệu ra IC Các nút bấm :

MODE : thay đổi chế độ hiển thị.

SET : cài đặt thời gian .

UP : Tăng giá trị

DOWN : giảm giá trị.

Page 13: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

-

Lời kết

Trên đây là toàn bộ nguyên lý hoạt động và sơ đồ cấu tạo của chiếc đồng hồ báo giờ.Tuy

nhiên do thời gian và năng lực còn hạn chế nên nhóm làm báo cáo chưa thể tìm hiểu được hết về

các chức năng của từng linh kiện trong mạch,chưa hoàn thành sản phẩm hoàn thiện.

Song qua việc thiết kế mạch đồng hồ này, nhóm cũng đã có thêm những hiểu biết cơ bản về

dòng vi điều khiển 8 bit của Microchip - PIC16f877A. Có cái nhìn tổng quan về vi điều khiển. Sụ

khác nhau giữa vi điều khiển và vi xử lý. Nắm rõ hơn lý thuyết về các kiến trúc vi xử lý: Harvard -

RISC, CISC. Khả năng tự tìm hiểu các dòng vi xử lý cao hơn của Microchip( 16 bit, 32 bit..) cũng

như các họ vi xử lý thông dụng khác : Atmel, Intel, Philips…Đã làm quen và sử dụng các phần

mềm hỗ trợ như: ORCAD, Proteus, CCS, MPLAP.Đặc biệt là tăng khả năng làm việc theo nhóm, từ

đó tạo tiền đề cho việc giải quyết các vấn đề phức tạp hơn sau này.

Page 14: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Tài Liệu Tham khảo

Trong quá trình thiết kế, thực hiện đề tài, chúng em có tham khảo các tài liệu và nguồn sau:

Datasheet:

PIC16F877A

DS1307

HC595

Nguồn web:

http://www.google.com

http://www.alldatasheet.com

http://www.picvietnam.com

http://www.dientuvietnam.net

http://www.edaboard.com/

http://www.scribd.com

http://www.pictutorials.com

http://www.piclist.com

Page 15: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Phụ lục A: Phân công công việc

Đinh Huy Cương : Sơ đồ nguyên lý và layout

Đỗ Đức Cường : Mua linh kiện và đặt mạch

Phan Duy Chinh : Sơ đồ nguyên lý và layout

Nguyễn Văn Duẩn : Viết code và tối ưu mạch

Nguyễn Thành Chung : Viết code và tối ưu mạch

Phụ lục B: Danh sách phần mềm sử dụng

Phần mềm lập trình : CCS

Phần mềm mô phỏng : Proteus 7.6

Phần mềm layout : Orcad 9.2

Phần mềm nạp chương trình cho PIC : PIC KIT 2

CODE CCS:#include <16F877A.h>#include <def_877A.h>#device adc=8

#FUSES NOWDT //No Watch Dog Timer#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)#FUSES NOPUT //No Power Up Timer#FUSES NOPROTECT //Code not protected from reading#FUSES NODEBUG //No Debug mode for ICD#FUSES NOBROWNOUT //No brownout reset#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#FUSES NOCPD //No EE protection#FUSES NOWRT //Program memory not write protected#FUSES RESERVED //Used to set the reserved FUSE bits

#use delay(clock=20000000)#include "ds1307.c"int sec,min,hour,date,month,year;int adc,adc1,adc2,sec1,sec2,min1,min2,hour1,hour2,date1,date2,month1,month2,year1,year2,i,j,k;#bit clk1 = 0x06.0 //SHcp1#bit data1 = 0x06.1 //Ds1#bit latch1 = 0x06.2 //STcp1#bit clk2 = 0x06.3 //SHcp2#bit data2 = 0x06.4 //Ds2#bit latch2 = 0x06.5 //STcp2

Page 16: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

#bit mode = 0x05.1#bit set = 0x05.2#bit up = 0x05.3#bit down = 0x05.4char const chu[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0xFD,0xFB,0xF7,0x80,0xFF,0xFF,//N 0xFF,0x80,0xF7,0xF7,0xF7,0x80,0xFF,0xFF,//H0xFF,0xC1,0xBE,0xBE,0xBE,0xC1,0xFF,0xFF,//O0xFF,0x80,0xFD,0xF3,0xFD,0x80,0xFF,0xFF,//M 0xFF,0x8D,0xB6,0xB6,0xB6,0xB9,0xFF,0xFF,//2 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,0x80,0xFE,0xFE,0xFF,0xFF,//T0xFF,0xC1,0xBE,0xBE,0xBE,0xDD,0xFF,0xFF,//C0xFF,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,//- 0xFF,0xDD,0xBE,0xB6,0xB6,0xC9,0xFF,0xFF,//30xFF,0xC1,0xAE,0xB6,0xBA,0xC1,0xFF,0xFF,//00xFF,0xFF,0xBD,0x80,0xBF,0xFF,0xFF,0xFF,//10xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,};char const bangma[]={0xFF,0xC1,0xAE,0xB6,0xBA,0xC1,0xFF,0xFF,//0 160xFF,0xFF,0xBD,0x80,0xBF,0xFF,0xFF,0xFF,//1 170xFF,0x8D,0xB6,0xB6,0xB6,0xB9,0xFF,0xFF,//2 180xFF,0xDD,0xBE,0xB6,0xB6,0xC9,0xFF,0xFF,//3 190xFF,0xE7,0xEB,0xED,0x80,0xEF,0xFF,0xFF,//4 200xFF,0xD8,0xBA,0xBA,0xBA,0xC6,0xFF,0xFF,//5 210xFF,0xC3,0xB5,0xB6,0xB6,0xCF,0xFF,0xFF,//6 220xFF,0xFE,0x8E,0xF6,0xFA,0xFC,0xFF,0xFF,//7 230xFF,0xC9,0xB6,0xB6,0xB6,0xC9,0xFF,0xFF,//8 240xFF,0xF9,0xB6,0xB6,0xD6,0xE1,0xFF,0xFF,//9 250xFC,0XFC,0xC1,0xBE,0xBE,0xBE,0xDD,0XFF,};char const cot[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

Page 17: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

void send1_595(int8 temp) {#bit flag_bit = temp.7 // bien temp la du lieu 8-bit can guiint8 i; for(i=0;i<=7;i++) { data1 = flag_bit; clk1=1; DELAY_US(1); clk1=0; latch1=1; latch1=0; temp<<=1; // Dich trai 1 bit }}void send2_595(int8 temp) {#bit flag_bit = temp.7 // bien temp la du lieu 8-bit can guiint8 i;

for(i=0;i<=7;i++) { data2=flag_bit; clk2=1; DELAY_US(1); clk2=0; temp<<=1; // Dich trai 1 bit }}

void read_time(void){adc=read_adc(); adc=adc*500/255; min=read_ds1307(1); // read minute hour=read_ds1307(2); // read hour date=read_ds1307(4); // read date month=read_ds1307(5); // read month year=read_ds1307(6); // read year adc1=adc%10; adc2=adc/10; min1=min&0x0f; min2=(min&0x70)>>4; hour1=hour&0x0f; hour2=(hour&0x70)>>4; date1=date&0x0f; date2=(date&0x70)>>4; month1=month&0x0f; month2=(month&0x70)>>4;

Page 18: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

year1=year&0x0f; year2=(year&0x70)>>4;}void chaychu(void){for(k=0;k<144;k++){ for(i=0;i<8;i++) { send1_595(cot[i]); send2_595(chu[k+56+i]); send2_595(chu[k+48+i]); send2_595(chu[k+40+i]); send2_595(chu[k+32+i]); send2_595(chu[k+24+i]); send2_595(chu[k+16+i]); send2_595(chu[k+8+i]); send2_595(chu[k+i]); latch2=1; latch2=0; delay_us(1500); }}}

void hienthi1(void){for(k=0;k<40;k++){ for(i=0;i<8;i++) { send1_595(cot[i]); send2_595(bangma[80+i]); send2_595(bangma[adc1*8+i]); send2_595(bangma[adc2*8+i]); send2_595(0XFF); send2_595(bangma[min1*8+i]); send2_595(bangma[min2*8+i]); send2_595(bangma[hour1*8+i]); send2_595(bangma[hour2*8+i]); latch2=1; latch2=0; delay_us(1000); } }}

void hienthi2(void){

Page 19: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

for(k=0;k<2000;k++){ for(i=0;i<8;i++) { send1_595(cot[i]); send2_595(bangma[year1*8+i]); send2_595(bangma[year2*8+i]); send2_595(bangma[i]); send2_595(bangma[16+i]); send2_595(bangma[month1*8+i]); send2_595(bangma[month2*8+i]); send2_595(bangma[date1*8+i]); send2_595(bangma[date2*8+i]); latch2=1; latch2=0; delay_us(1000); } }}

void set_year(void){while (set==0) {} // cho phim nhan do { if (up==1) { // neu phim 2 duoc nhan while (up==1) {} // khong lam gi cho phim nha year1++; if ((year2==9)&(year1==10)) {year1=year2=0;} if (year1==10) {year1=0;year2++;} } if (down==1) { // neu phim 3 duoc nhan while (down==0) {} // khong lam gi cho phim nhan year1--; if ((year2==0)&(year1==255)) {year1=year2=9;} if (year1==255) {year1=9;year2--;} } for( k=0;k<=7;k++){ for(i=0;i<8;i++) { send1_595(cot[i]); send2_595(bangma[year1*8+i]); send2_595(bangma[year2*8+i]); send2_595(bangma[i]); send2_595(bangma[16+i]); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF);

Page 20: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

send2_595(0xFF); latch2=1; latch2=0; delay_us(2000); } } } while (set==1); write_DS1307(6,year1+(year2<<4));}

void set_month(void) { // Cai dat thang while (set==0) {} // cho phim nhan do { if (up==1) { // neu phim 2 duoc nhan while (up==1) {} // khong lam gi cho phim nha month1++; if ((month2==1) & (month1==3)) { month2=0;month1=1;} if (month1==10) { month2++;month1=0;} } if (down==1) { // neu phim 3 duoc nhan while (down==1) {} // cho phim nha month1--; if ((month2==0) & (month1==0)) {month2=1;month1=2; } if (month1==0) {month2--;month1=9;} } for( k=0;k<=7;k++){ for(i=0;i<8;i++) { send1_595(cot[i]); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(bangma[month1*8+i]); send2_595(bangma[month2*8+i]); send2_595(0xFF); send2_595(0xFF); latch2=1; latch2=0; delay_us(2000); } } }

Page 21: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

while (set==1); write_DS1307(5,month1+(month2<<4));}

void set_date(void) { // Cai dat ngay while (set==0) {} // cho phim nhan do { if (up==1) { // neu phim 2 duoc nhan while (up==1) {} // khong lam gi cho phim nha date1++; if ((date2==3) & (date1==2)) { date2=0;date1=1;} if (date1==10) { date2++;date1=0;} } if (down==1) { // neu phim 3 duoc nhan while (down==1) {} // cho phim nha date1--; if ((date2==0) & (date1==0)) {date2=3;date1=1; } if (date1==255) {date2--;date1=9;} } for( k=0;k<=7;k++){ for(i=0;i<8;i++) { send1_595(cot[i]); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(bangma[date1*8+i]); send2_595(bangma[date2*8+i]); latch2=1; latch2=0; delay_us(2000); } } } while (set==1); write_DS1307(4,date1+(date2<<4)); } void set_hour(void) { // Cai dat thang while (set==0) {} // cho phim nha do { if (up==1) { // neu phim 2 duoc nhan

Page 22: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

while (up==1) {} // khong lam gi cho phim nhan hour1++; if ((hour2==2) & (hour1==4)) { hour2=0;hour1=0;} if (hour1==10) { hour2++;hour1=0;} } if (down==1) { // neu phim 3 duoc nhan while (down==1) {} // cho phim nha hour1--; if ((hour2==0) & (hour1==255)) {hour2=2;hour1=3; } if (hour1==255) {hour2--;hour1=9;} } for( k=0;k<=7;k++){ for(i=0;i<8;i++) { send1_595(cot[i]); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(bangma[hour1*8+i]); send2_595(bangma[hour2*8+i]); latch2=1; latch2=0; delay_us(2000); } } } while (set==1); write_DS1307(2,hour1+(hour2<<4)); } void set_min(void) { // Cai dat thang while (set==0) {} // cho phim nha do { if (up==1) { // neu phim 2 duoc nhan while (up==1) {} // khong lam gi cho phim nha min1++; if ((min2==5) & (min1==10)) { min2=0;min1=0;} if (min1==10) { min2++;min1=0;} } if (down==1) { // neu phim 3 duoc nhan while (down==1) {} // cho phim nha min1--;

Page 23: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

if ((min2==0) & (min1==255)) {min2=5;min1=9; } if (min1==255) {min2--;min1=9;} } for( k=0;k<=7;k++){ for(i=0;i<8;i++) { send1_595(cot[i]); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(0xFF); send2_595(bangma[min1*8+i]); send2_595(bangma[min2*8+i]); send2_595(0xFF); send2_595(0xFF); latch2=1; latch2=0; delay_us(2000); } } } while (set==1); write_DS1307(1,min1+(min2<<4)); }void main(){set_tris_b(0x00);init_DS1307();

setup_adc_ports(AN0); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(0); setup_psp(PSP_DISABLED); setup_spi(SPI_SS_DISABLED); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); chaychu();while(1){ read_time(); if(mode==0)

Page 24: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

{ hienthi1(); if(set==1) { set_hour(); set_min(); } } else {hienthi2(); if(set==1) { set_year(); set_month(); set_date(); set_hour(); set_min(); } }}}

Page 25: Báo Cáo Bài Tập Lớn Vi Xử Lý (Repaired)

Phụ lục C: Hóa đơn

TT Tên Giá trị Số lượng Giá đơn vị Thành tiền

1 PIC16F877A 1 65.000 65.000

2 IC 74HC595 9 5.000 45.000

3 Sensor LM35 1 1.500 1.500

4 DS1307 1 8.000 8.000

5 Led ma trận 8 23.000 184.000

6 Cầu 5A 1 4.000 4.000

7 7805 2 3.000 6.000

8 Thạch anh 32.768K 1 1.000 1.000

20M 1 1.000 1.000

10 Điện trở 1K 100 50d 5.000

10K 10 100đ 1.000

11 Tụ điện 33p 2 100