You are on page 1of 11

ĐH.

SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HỒ CHÍ MINH

KHOA ĐIỆN _ ĐIỆN TỬ



ĐẶT VẤN ĐỀ : THIẾT KẾ MẠCH ĐỒNG HỒ SỐ


HIỂN THỊ TRÊN 6LED7ĐOẠN
CÓ CHỈNH THỜI GIAN

GVHD:
SVTH: PHẠM NGỌC HƯƠNG TRÀ
MSSV: 07117132

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <1 >


ĐH.SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

LỜI CẢM ƠN

• Em cám ơn thầy đã tạo điều kiện cho em được tìm hiểu thêm về mạch đồng hồ số. Em cám
ơn thầy đã hướng dẫn và lắng nghe phần báo cáo của em. Em cám ơn thầy rất nhiều.

• Em cám ơn thầy Nguyễn Đình Phú đã tạo điều kiện cho em được báo cáo môn vi xử lý 2,
giúp em củng cố thêm kiến thức và tiết kiệm được nhiều thời gian thi cử. Em cám ơn thầy rất nhiều.

MỤC LỤC

Trang

•Phần A: Tìm hiểu sơ lược PIC 16F877A………………………………………… 3

•Phần B: Sơ đồ khối………………………………………………………………. 5

•Phần C: Sơ đồ mạch……………………………………………………………... 6

•Phần D: Lưu đồ…………………………………………………………………... 7

•Phần E: Chương trình chạy……………………………………………………… 8

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <2 >


ĐH.SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

PHẦN A: TÌM HIỂU SƠ LƯỢC VỀ PIC 16F877A

1> Một số đặc tính nổi bật


• Sử dụng công nghệ tích hợp cao RISC CPU
• Chỉ có 35 câu lệnh
•Tất cả các lệnh sử dụng trong 1 chu kỳ,trừ một số lệnh rẽ nhánh là 2 chu kỳ
• Tốc độ xung CLOCK DC=20MHZ
• Chu kỳ thực hiện lệnh 200ns
• Bộ nhớ chương trình 8K x 14WORD
• Bộ nhớ RAM 368 x 8 BYTES
• Bộ nhớ EEFROM 256 x 8BYTES
• Công suất tiêu thụ thấp
< 0.6mA với 5V, 4MHz
20μA với nguồn 3V, 32 kHz
< 1μA nguồn dự phòng.
• Có 3 timer/counter với nhiều chế độ hoạt động linh hoạt.
• Có 8 kênh ADC 10 bít.
• Khả năng ngắt ( lên tới 14 nguồn ngắt trong và ngắt ngoài)

2> Tổng quan về PIC

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <3 >


ĐH.SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

3>Sơ đồ chân

4> Bản đồ bộ nhớ chương trình và các ngăn xếp

• Bộ nhớ Ram của PIC16F877A có 4 bank, mỗi bank có dải địa chỉ từ 0 - 7Fh(128byte)
• Các thanh ghi đa mục đích:(general purpose registers) có thể truy cập trực tiếp và gián tiếp qua
thanh ghi FSR, tổng cộng có 368 byte
• Các thanh ghi đặc biệt:(special function registers) được dùng bởi CPU và các khối ngoại vi để
điều khiển sự hoạt theo yêu cầu của các thiết bị

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <4 >


ĐH.SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

PHẦN B: SƠ ĐỒ KHỐI

KHỐI HIỂN THỊ

KHỐI XỬ LÝ

KHỐI NÚT NHẤN

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <5 >


ĐH.SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

PHẦN C : SƠ ĐỒ MẠCH

PHẦN D: LƯU ĐỒ

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <6 >


ĐH.SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

Tăng giây S
Bắt đầu
Giay
=60?
Đ

Mã led7đoạn Giay=0
Gio = 00 Phut=Phut+1
Phut= 00
Giay =00
S
Phut=60?

Hiển thị Đ

Phut=0
Gio=Gio+1
S
Nhấn S
CAIDAT
? Gio=24?

Đ
Đ
Gio=0

S Nhấn S
GIA Nhấn S Nhấn
Nhấn
M TANG GIA
TANG
PHU GIO? M
PHUT?
T? GIO
Đ Đ
Đ Đ

Phut=Phut-1 Gio=Gio+1 Gio=Gio-1


Phut=Phut +1
S S
Phut=6 Gio=24
0? ?
Đ Đ

Phut =0 Gio =0

S
S
Phut =-1? Gio =-1?
Đ Đ

Phut =59 START Gio =23


Đ

Hiển thị
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <7 >
ĐH.SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

PHẦN E: CHƯƠNG TRÌNH CHẠY MẠCH

#include <16F877A.h>
#include<khaibaotghi_16f877a.h>
#fuses NOWDT,PUT,XT,NOPROTECT,HS,NOLVP
#use delay(clock=1000000)

#use fast_io(b)
#use fast_io(d)
#use fast_io(c)

#bit start=portb.1
#bit tphuc=portb.2
#bit gphuc=portb.3
#bit tgio=portb.4
#bit ggio=portb.5

int16 count;
int8 giay,phuc,gio,dvgiay,chgiay,dvphuc,chphuc,dvgio,chgio,i;
const unsigned char dig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void hex_bcd()
{
chgiay=giay/10;
dvgiay=giay%10;
chphuc=phuc/10;
dvphuc=phuc%10;
chgio=gio/10;
dvgio=gio%10;
}

void nhienthi()
{
i=0;
while(i<5)
{
output_high(pin_d0);
portc=dig[dvgiay];
delay_ms(1);
output_low(pin_d0);

output_high(pin_d1);
portc=dig[chgiay];
delay_ms(1);
output_low(pin_d1);

output_high(pin_d2);
portc=dig[dvphuc];
delay_ms(1);
output_low(pin_d2);

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <8 >


ĐH.SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

output_high(pin_d3);
portc=dig[chphuc];
delay_ms(1);
output_low(pin_d3);

output_high(pin_d4);
portc=dig[dvgio];
delay_ms(1);
output_low(pin_d4);

output_high(pin_d5);
portc=dig[chgio];
delay_ms(1);
output_low(pin_d5);
i=i+1;
}
}
#int_ext
void ngat_ngoai()
{
while (true)
{
if (tphuc==0)
{
phuc=phuc+1;
goto loop;
}
if (gphuc==0)
{
phuc=phuc-1;
goto loop;
}
if (tgio==0)
{
gio=gio+1;
goto loop;
}
if (ggio==0)
{
gio=gio-1;
goto loop;
}
goto lap1;
loop:
if (phuc==60)
{
phuc=0;
}
if (phuc==-1)
{
phuc=59;
}

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <9 >


ĐH.SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

if (gio==24)
{
gio=0;
}
if (gio==-1)
{
gio=23;
}
lap: nhienthi();
if (tphuc==0||gphuc==0||tgio==0||ggio==0)
{
goto lap;
}

lap1:
if (start==0)
{
break;
}
hex_bcd();
nhienthi();
}
}

#int_timer0
void interrupt_timer0()
{
set_timer0(6);
++count;
if(count ==500)
{
count=0;
giay=giay+1;
}
}

void hienthi()
{
i=0;
while(i<5)
{
output_high(pin_d0);
portc=dig[dvgiay];
delay_ms(1);
output_low(pin_d0);
output_high(pin_d1);
portc=dig[chgiay];
delay_ms(1);
output_low(pin_d1);
output_high(pin_d2);
portc=dig[dvphuc];
delay_ms(1);

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <10 >


ĐH.SƯ PHẠM KỸ THUẬT TPHCM KHOA ĐIỆN-ĐIỆN TỬ

output_low(pin_d2);
output_high(pin_d3);
portc=dig[chphuc];
delay_ms(1);
output_low(pin_d3);
output_high(pin_d4);
portc=dig[dvgio];
delay_ms(1);
output_low(pin_d4);
output_high(pin_d5);

portc=dig[chgio];
delay_ms(1);
output_low(pin_d5);
i=i+1;
}
}
void main(void)
{
trisb=1;
trisd=0;
trisc=0;
intcon=0xb0;
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(global);
giay =0;
phuc=0;
gio=0;
while(true)
{
if(giay==60)
{
giay=0;
phuc=phuc+1;
}
if (phuc==60)
{
phuc=0;
gio=gio+1;
}
if (gio==24)
{
gio=0;
}
hex_bcd();
hienthi();
}
}

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP_ BÁO CÁO VI XỬ LÝ 2 TRANG <11 >

You might also like