1. Trang chủ
  2. » Luận Văn - Báo Cáo

Mô phỏng đồng hồ số, sử dụng led 7 đoạn để hiển thị

18 498 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

Định dạng
Số trang 18
Dung lượng 1,23 MB

Nội dung

I - Mục tiêu sản phẩm: Mô phỏng đồng hồ số, sử dụng led 7 đoạn để hiển thị (vi điều khiển 8051). II - Nội dung báo cáo: 1.Sơ lược về vi xử lý 8051: 2. Nguyên lý hoạt động của mạch: 2.1 Cơ sở lý thuyết: -Sử dụng phần mềm Protues để mô phỏng mạch động hồ số bằng led 7 đoạn -Sử dụng Keil C để lập trình cho đồng hồ hiển thị -Giới hạn của đề tài trong phạm vi hiển thị giờ phút giây. Không có hiển thị ngày, tháng, năm. 2.2 Hoạt động phần cứng: Quá trình mô phỏng được đồng hồ số bằng led 7 đoạn được chia thành 2 giai đoạn chính. Giai đoạn 1: Thực hiện mô phỏng mạch đồng hồ số bằng Protues. Giai đoạn 2: Viết code để chạy chương trình hiển thị đồng hồ số và điều khiển cho đồng hồ chạy.

Trang 1

Khoa Công Nghệ Thông Tin HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

- -

BÁO CÁO SẢN PHẨM KỸ THUẬT VI XỬ LÝ

Mô phỏng đồng hồ số, sử dụng led 7 đoạn để hiển thị Danh sách các thành viên:

Hà Ngọc Tú MSV: B16DCCN376

Phan Trung Hiếu MSV: B16DCAT058

Trần Văn Đức MSV: B16DCAT03

Nhóm môn học: 01 Tổ: 18

Nhóm bài tập: 13

Trang 2

Lời nói đầu

Cùng với sự phát triển công nghệ hiện đại thiết thực để phục

vụ cho đời sống con người thì chuyên nghành công nghệ kỹ thuật

đã có không ít những thành tích đem lại phục vụ con người nhằm nâng cao cuộc sống hơn Thời gian là một mốc đánh dấu lịch sử rất quan trọng đối với loài người Khi chưa có công nghệ hiện đại như ngày nay người cổ hi lap đã phát minh ra lịch vạn niện dựa trên tính toán thiên văn học Nhưng tới ngày nay công nghệ điện tử phát triển, đồng hồ số thay cho lịch vạn niện rất nhiều bởi những

ưu điểm của nó Sử dụng đồng hồ điện tử chúng ta có thể điều chỉnh được thời gian tùy theo ý muốn của con người, tiện lợi khi mang đi theo

Sau một thời gian học tập tại trường, học tập môn vi kỹ thuật vi xử lý cùng với sự giúp đỡ của thầy giáo Nguyễn Quý Sỹ Chúng em đã cố gắng áp dụng những gì đã nắm được qua môn học vào thực hành mô phỏng mạch đồng hồ số hiển thị dùng LED 7 đoạn Trong đồ án này nhóm em xin trình bày thiết kế đồng hồ điện tử dùng họ vi điều khiển 8051

Trang 3

I - Mục tiêu sản phẩm:

Mô phỏng đồng hồ số, sử dụng led 7 đoạn để hiển thị (vi điều khiển 8051)

II - Nội dung báo cáo:

1 Sơ lược về vi xử lý 8051:

 Sơ đồ khối của vi điều khiển 8051:

- Điều khiển trung tâm

- Bộ nhớ chương trình ROM bao gồm 4Kbyte

- Bộ nhớ dữ liệu RAM bao gồm 128 byte

- Bốn cổng xuất nhập

- Hai bộ định thời/ bộ đếm 16bit thực hiện chức năng định thời và đếm sự kiện

- Bộ giao diện nối tiếp (Cổng nối tiếp)

- Khối điều khiển ngắt với hai nguồn ngắt ngoài

External Interrupts

RXD TXD

P

P 2

P P

IO Ports OSC

Interrupt Control

CPU

4Kbyte ROM

Bus Control

128 byte RAM

Timer 0 Timer 1

Serial port

Trang 4

 Tổ chức bộ nhớ của 8051:

Trên vi điều khiển 8051 có cả bộ nhớ chương trình (ROM)

và bộ nhớ dữ liệu (RAM) Khi thiết kế các ứng dụng đòi hỏi bộ nhớ lớn, người ta có thể dùng bộ nhớ ngoài

Bộ nhớ chương trình (ROM): chỉ dùng để đọc, là nơi lưu trữ chương trình của vi điều khiển Bộ nhớ chương trình của họ 8051

có thể thuộc một trong các loại sau: ROM, EPROM, FLASH hoặc không có bộ nhớ chương trình trên chip Đối với vi điều khiển không tích hợp sẵn bộ nhớ chương trình trên chip, buộc phải thiết

kế bộ nhớ chương trình bên ngoài với dung lượng tối đa là 64Kbyte

Bộ nhớ dữ liệu (RAM): Họ vi điều khiển 8051 có bộ nhớ dữ liệu tích hợp trên chip nhỏ nhất là 128byte và có thể mở rộng với

bộ nhớ dữ liệu ngoài lên tới 64kByte

 Các thanh ghi chức năng đặc biệt (SFR)

Thanh ghi của 8051 được dùng để lưu trữ tạm thời dữ liệu hoặc địa chỉ Các thanh ghi này chủ yếu có kích thước 8 bit Dưới đây là một số thanh ghi cơ bản của 8051

- Thanh ghi chính A (Thanh ghi tích lũy): là thanh ghi đặc biệt của 8051 dùng để thực hiện các phép toán của CPU, thường ký hiệu là A(Accumulator)

- Thanh ghi phụ B: là thanh ghi tính toán phụ của vi điều khiển 8051, ở địa chỉ F0H được dùng chung với thanh ghi chính A trong các phép nhân, chia Thanh ghi B cũng được sử dụng như một thanh ghi trung gian

- Thanh ghi cổng P0 – P3: Các port xuất/nhập của 8051 bao gồm Port 0 tại địa chỉ 80H, Port 1 tại địa chỉ 90H, Port 2 tại địa chỉ

Trang 5

A0H và Port 3 tại địa chỉ B0H Tất cả các port này đều có thể truy suất theo bit hoặc theo byte

- Thanh ghi trạng thái chương trình (địa chỉ D0H): là thanh ghi mô tả toàn bộ trạng thái chương trình đang hoạt động của hệ thống Chức năng từng bit của thanh trạng thái chương trình:

+ Cờ nhớ CY- địa chỉ D7H: dùng trong phép toán số học và logic, CY=1 nếu phép cộng có Bit nhớ từ Bit 7 (bị tràn) hoặc phép trừ có Bit mượn cho Bit 7

+ Cờ nhớ phụ AC- địa chỉ D6H: khi cộng những giá trị BCD, AC=1 nếu có bit nhớ từ bit 3 sang bit 4 hoặc kết quả trong 4bit thấp nằm trong khoảng 0AH -> 0FH

+ Cờ không- địa chỉ D5H: cờ 0 là một bit cờ đa dụng dùng cho các ứng dụng của người dùng

+ Bit chọn băng thanh ghi RS1 và RS0 - địa chỉ D4h & D3h: hai bit này được dùng để chọn băng thanh ghi R0, R1, R2 hay R3 Chúng được xóa về 0 khi chip bị reset và được thiết lập mức 1 hay

0 bằng phần mềm

+ Cờ tràn OV- địa chỉ D2H: OV=1 sau một hoạt động cộng hoặc trừ nếu có sự tràn toán học Khi các số có dấu được cộng hoặc trừ với nhau, ta có thể dùng cờ này để kiểm tra xem kết quả

có nằm trong giới hạn xác định không (-127, +128) -Khi cộng hoặc trừ các số không dấu thì cờ này được bỏ qua

+ Cờ chẵn lẻ P- địa chỉ D0H: phản ánh số bit 1 trong thanh ghi A là chẵn hay lẻ Nếu thanh ghi A chứa một số chẵn các bit 1 thì P=0 còn chứa một số lẻ bit 1 thì P=1

- Con trỏ ngăn xếp SP (Stack Point):

Ngăn xếp chính là bộ nhớ RAM được sử dụng để lưu thông tin tạm thời Thông tin này có thể là dữ liệu hoặc địa chỉ CPU cần các thanh ghi này vì số các thanh ghi bị hạn chế Như vậy, để có

Trang 6

thể truy cập vào vùng nhớ ngăn xếp thì cần phải có thanh ghi trong CPU trỏ đến Thanh ghi SP này sẽ được dùng để trỏ đến ngăn xếp, nên được gọi là thanh ghi con trỏ ngăn xếp Thanh ghi này có độ rộng là 8 bit, tức là chỉ có thể trỏ được các địa chỉ từ 00h đến FFh

- Con trỏ dữ liệu: Con trỏ dữ liệu được dùng để truy xuất bộ nhớ chương trình ngoài hoặc bộ nhớ dữ liệu ngoài Con trỏ dữ liệu

là một thanh ghi 16bit ở địa chỉ 82H (DPL - byte thấp) và 83H (DPH - byte cao)

- Thanh ghi bộ đệm truyền thông nối tiếp SBUF (Serial Data Buffer): Bộ đệm truyền thông được chia thành hai bộ đệm, bộ đệm truyền dữ liệu và bộ đệm nhận dữ liệu Khi dữ liệu được chuyển vào thanh ghi SBUF, dữ liệu sẽ được chuyển vào bộ đệm truyền dữ liệu và sẽ được lưu giữ ở đó cho đến khi quá trình truyền dữ liệu qua truyền thông nối tiếp kết thúc Khi thực hiện việc chuyển dữ liệu từ SBUF ra ngoài, dữ liệu sẽ được lấy từ bộ đệm nhận dữ liệu của truyền thông nối tiếp

Thanh ghi của bộ định thời/bộ đếm: 8051 có 2 bộ đếm/định thời (counter/timer) 16bit để định các khoảng thời gian hoặc để đếm các sự kiện Các cặp thanh ghi (TH0, TL0) và (TH1, TL1) là các thanh ghi của bộ đếm thời gian Bộ định thời 0 có địa chỉ 8AH (TL0, byte thấp) và 8CH (TH0, byte cao) Bộ định thời 1 có địa chỉ 8BH (TL1, byte thấp) và 8DH (TH1, byte cao) Hoạt động của bộ định thời được thiết lập bởi thanh ghi chế độ định thời TMOD (Timer Mode Register) ở địa chỉ 88H Chỉ có TCON được định địa chỉ từng bit

Thanh ghi ngắt (Interrupt register): Ngắt (Interrupt) - như tên của nó, là một số sự kiện khẩn cấp bên trong hoặc bên ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện tại, phục vụ ngay lập tức nhiệm vụ mà ngắt yêu cầu – nhiệm vụ này gọi là trình phục vụ ngắt (ISR: Interrupt Service Routine) Để thiết lập ngắt, ta sẽ thiết lập các giá trị trong thanh ghi

Trang 7

cho phép ngắt IE ở địa chỉ A8H, thứ tự ưu tiên ngắt được đặt bằng cách set các bit ở thanh ghi ưu tiên ngắt IP ở địa chỉ B8h Cả hai thanh ghi này được định địa chỉ theo bit

 Hệ thống ngắt trong 8051:

-) Thực tế trong 8051 có 5 ngắt giành cho người dùng nhưng các nhà sản xuất nói rằng có 6 ngắt vì họ tính cả lệnh RESET Sáu ngắt này được phân bố như sau:

+ Reset: khi chân RESET được kích hoạt từ 8051, bộ đếm chương trình nhảy về 0000H đây là địa chỉ bật lại nguồn

+ Hai ngắt giành cho bộ Timer: 1 cho Timer0 và 1 cho Timer1 Địa chỉ tương ứng của các ngắt này là 000BH và 001BH

+ Hai ngắt giành cho các ngắt phần cứng bên ngoài: Chân 12 (P3.2) và chân 13(P3.3) của cổng P3 là các ngắt phần cứng bên ngoài INT0 và INT1 tương ứng Địa chỉ tương ứng của các ngắt ngoài này

là 0003H và 0013H

Truyền thông nối tiếp(Cổng nối tiếp – Serial port): Có một ngắt chung cho cả nhận và truyền dữ liệu nối tiếp Địa chỉ của ngắt này trong bảng vector ngắt là 0023H

-) Vi điều khiển 8051 có số lượng khá ít các nguồn ngắt Mỗi ngắt

có một vector ngắt riêng, đó là một địa chỉ cố định nằm trong bộ nhớ chương trình Khi có ngắt xảy ra, CPU sẽ tự động nhảy đến thực hiện lệnh nằm tại địa chỉ này

-) Các mức ưu tiên ngắt trong 8051:

Nhìn vào bảng ta thấy ngắt INT0 là ngắt có mức ưu tiên cao nhất

và ngắt timer2 là ngắt có mức ưu tiên thấp nhất trong số các ngắt Như vậy nếu ngắt ngoài 1 và ngắt timer0 cùng xảy ra một lúc, ngắt ngoài 1 sẽ được CPU xử lý trước, sau đó mới xử lý ngắt timer0

Trang 8

2 Nguyên lý hoạt động của mạch:

2.1 Cơ sở lý thuyết:

- Sử dụng phần mềm Protues để mô phỏng mạch động hồ số bằng led 7 đoạn

- Sử dụng Keil C để lập trình cho đồng hồ hiển thị

- Giới hạn của đề tài trong phạm vi hiển thị giờ phút giây Không có hiển thị ngày, tháng, năm

2.2 Hoạt động phần cứng:

Quá trình mô phỏng được đồng hồ số bằng led 7 đoạn được chia thành 2 giai đoạn chính

Giai đoạn 1: Thực hiện mô phỏng mạch đồng hồ số bằng Protues Giai đoạn 2: Viết code để chạy chương trình hiển thị đồng hồ số

và điều khiển cho đồng hồ chạy

Giai đoạn 1: Mô phỏng mạch:

Sử dụng vi điều khiển 8051 điều khiển led 7 đoạn 8 cột (2 cột đầu hiển thị giờ, cột thứ 3 hiển thị dấu - ngăn cách giờ và phút, cột

Trang 9

thứ 4 và 5 dùng để hiển thị phút, cột thứ 6 hiển thị dấu – ngăn cách phút và giây, 2 cột cuối hiển thị giây) Lưu đồ thuật toán được trình bày tóm tắt như dưới đây:

Sai

Đúng

Sai

Đúng

Sai Đúng

Start

Vòng lặp vô hạn để đồng hồ không dừng lại

Giờ <=23

Phút<=59 Giờ++, Phút=0

Tách mỗi số giờ, phút, giây thành 2 số riêng biệt

Hiển thị các số vừa tách trên các cột led tương ứng

Giây++

Trang 10

Dưới đây là ảnh chụp mô phỏng của nhóm:

Giai đoạn 2: Code chạy chương trình:

#include <Main.h>

// -const char

MaLed[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98,0xBF};

// -void _TachSo(char Dem, char* HangChuc, char* HangDonVi);

Trang 11

void _ScanLed(char H1,H2,H3,H4,H5,H6,H7,H8);

void _QuetCot(char TenCot);

void _ScanDelay(char H1,H2,H3,H4,H5,H6,H7,H8,unsigned int Time);

// -CHUONG TRINH CHINH -void main(CHINH -void)

{

//khai bao bien cuc bo o day

MaLed[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x98,0xBF};

char Dem,H1=1,H2=2,H3,H4=3,H5=4,H6,H7=5,H8=6;

char Gio,Phut,Giay;

COT_QUET=0xFF;

while(1)

{

for(Gio=7;Gio<=23;Gio++) {

_TachSo(Gio,&H1,&H2);

for(Phut=0;Phut<=59;Phut++) {

_TachSo(Phut,&H4,&H5);

for(Giay=0;Giay<=59;Giay++) {

_TachSo(Giay,&H7,&H8);

_ScanDelay(H1,H2,10,H4,H5,10,H7,H8,400);

Trang 12

} }

} }

}

// -void _TachSo(char Dem, char* HangChuc, char* HangDonVi) {

char Tam;

Tam=Dem%10;

*HangDonVi=Tam;

Dem=Dem/10;

Tam=Dem%10;

*HangChuc=Tam;

Dem=Dem/10;

}

void _ScanLed(char H1,H2,H3,H4,H5,H6,H7,H8)

{

char a[8],i;

a[0]=H1;

a[1]=H2;

a[2]=H3;

Trang 13

a[4]=H5;

a[5]=H6;

a[6]=H7;

a[7]=H8;

for(i=0;i<8;i++)

{

P1=MaLed[a[i]]; _QuetCot(i); _Delay_ms(1); _QuetCot(10); }

}

void _QuetCot(char TenCot) {

COT_QUET=0xFF; switch(TenCot)

{

case 0:

{

COT_1=0; break; }

case 1:

Trang 14

COT_2=0; break; }

case 2:

{

COT_3=0; break; }

case 3:

{

COT_4=0; break; }

case 4:

{

COT_5=0; break; }

case 5:

{

COT_6=0; break; }

case 6:

Trang 15

COT_7=0;

break;

} case 7:

{

COT_8=0;

break;

} default:

{

; break;

} }

}

void _ScanDelay(char H1,H2,H3,H4,H5,H6,H7,H8,unsigned int Time) {

Time=Time/8;

while(Time>0)

{

Time=Time-1;

_ScanLed(H1,H2,H3,H4,H5,H6,H7,H8);

}

Trang 16

Main.h:

#define _Main_h_

#include <REGX52.H>

#include <Delay.h>

//khai bao chan ket noi led on

//#define LED_1 P1_0

//khai bao cac chan quet cot

Delay.h:

Trang 17

#include <Main.h>

void _Delay_ms(unsigned int Time)

{

unsigned int Dem_1,Dem_2;

for(Dem_1=0;Dem_1<Time;Dem_1++) {

for(Dem_2=0;Dem_2<123;Dem_2++) {

; } }

}

Trang 18

2.3 Demo kết quả sau khi chạy chương trình:

Ngày đăng: 04/06/2020, 16:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w