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

Mo phong mach logic so.doc

16 1,6K 6
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Mô Phỏng Mạch Logic Số
Tác giả Đặng Hiếu Nhơn, Nguyễn Hoàng Nga, Nguyễn Thị Ngọc Thủy, Nguyễn Xuân Thùy, Nguyễn Thị Thu Hà, Ngô Đức Thường
Người hướng dẫn Thầy Vũ Song Tùng
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Điện Tử Viễn Thông
Thể loại Bài Tập Lớn
Năm xuất bản 2000
Thành phố Hà Nội
Định dạng
Số trang 16
Dung lượng 463 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Mo phong mach logic so

Trang 1

Trờng đại học Bách khoa hà nội

Khoa điện tử viễn thông

Trang 2

hµ néi 6/2000

Trang 3

Trờng đại học Bách khoa hà nội

Khoa điện tử viễn thông

BàI Tập Lớn

Đề tài

Mô Phỏng Mạch Logic số

Giáo viên hớng dẫn

Vũ Song Tùng

Thực hiện chơng trình

Đặng Hiếu Nhơn Nguyễn Hoàng Nga Nguyễn Thị Ngọc Thuỷ Nguyễn Xuân Thuỳ Nguyễn Thị Thu Hà Ngô Đức Thờng

Trang 4

Hµ Néi - 6/2000

Trang 5

I.Đặt vấn đề:

Máy tính hiện nay là một công cụ rất mạnh để giải quyết những bài toán về kĩ thuật đòi hỏi khả năng tính toán cao.

Với khả năng đồ hoạ của mình máy tính cho phép không chỉ thể hiện u điểm của mình ở khả năng tihns toán nhanh mà nó còn cho phép chúng ta biểu thị các đối t-ợng các hoạt động, các sự kiện một cách sinh động bằng hình ảnh.Đây là nguyên nhân vì sao hiện nay cùng với sự phát triển nhanh về tốc độ ,su hớng làm phần mềm về đồ hoạ mô phỏng ,hoặc những phần mềm đồ hoạ 3D phát triển rất mạnh.

Để bắt kịp với sự phát triển của thế giới chúngta cần phải khai thác một cách triệt để khả năng của máy tính.

Với sự hớng dẫn của thầy giáo Vũ Song Tùng chúng tôi thiết kế phần mềm Mô phỏng Mạch Logic số vơí mục đích:

• Khai thác khả năng về đồ hoạ của máy tính

• Bớc đầu làm quen với lập trình hớng đối tợng

• Tăng dần khả năng lập trình với việc giải quyết các vấn đề nảy sinh trong kĩ thuật lập trình mô phỏng(cha phải theo thời gian thực)

Chúng tôi chọn ngôn ngữ C++ để thực hiện chơng trình của mình

bởi vì hiện nay C++ đang đợc dạy trong các trờng đại học và khả năng lập trình hớng

đối tợng của nó rất mạnh rất thích hợp với các bài toán về đối tợng.

Tuy nhiên do thời gian có hạn nên một số ý tởng của tác giả cũng nh một số kĩ thuật lập trình cha đợc đa vào.Vì thế chơng trình còn nhiều vấn đề cha đợc hoàn thiện.Phần mềm này chỉ thích hợp với khuôn khổ một bài tập lớn.Chơng trình chỉ dừng

ở mức hớng đối tợng một nửa,cho nên rất thích hợp với những ngời mới học lập trình h-ớng đối tợng.Chơng trình đợc trình bày một cách dõ dàng ,dễ đọc dễ hiểu,có thể là tài liệu tham khảo của những ngời mới học lập trình hớng đối tợng.

Cuối cùng thay mặt cả nhóm xin chân thành cám ơn thầy :Vũ Song Tùng đã nhiệt tình giúp đỡ chúng em hoàn thành chơng trình này

Nhóm trởng: Đặng Hiếu Nhơn

II.Cơ sở lý thuyết:

Các phần tử logic cơ bản là AND,OR,NOT,XOR,NAND,NOR.Các cổng logic hoạt động theo một bảng gọi là bảng chân lí(True Table).Tong ứng với 6 cổng logic ta

có 6 bảng chân lí sau:

1.Cổng AND:

Kí hiệu:

Bảng chân lý:

x y z

0 0 0

0 1 0

1 0 0

1 1 1

Trang 6

2.Cæng OR:

KÝ hiÖu:

B¶ng ch©n lý:

x y z

0 0 0

0 1 1

1 0 1

1 1 1

3.Cæng NOT:

KÝ hiÖu:

B¶ng ch©n lÝ:

x x

0 1

1 0

4.Cæng NAND:

KÝ hiÖu:

B¶ng ch©n lÝ:

x y z

0 0 1

0 1 1

1 0 1

1 1 0 5.Cæng NOR:

KÝ hiÖu:

Trang 7

Bảng chân lí:

x y z

0 0 1

0 1 1

1 0 1

1 1 0 6.Cổng XOR:

Kí hiệu:

Bảng chân lí:

x y z

0 0 1

0 1 1

1 0 1

1 1 0 III.Thiết kế chơng trình:

3.1.Các đối tợng:

Ta chia các đối tợng ra làm 2 loại:

• Đối tợng nguyên tố : đối tợng này là nhỏ nhất không thể chia nhỏ

đợc nữa

• Đối tợng nhóm(Group): đối tợng này gồm nhiều đối tợng con ghép lại

Chơng trình đợc thiết kế theo kiểu giao diện của Windows bao gồm

hệ thống Menu(Bảng chọn), ToolBar(Thanh công cụ), Các nút bấm (Button), Hộp thoại (MessageBox), Hộp nhập liệu (InputBox), các đối tợng lựa chọn(Option), Các đối tợng ảnh(Image)

Hoạt động của mỗi mạch logic đợc thiết kế ở những của sổ riêng gọi

là các FORM.Thể hiện hoạt động theo thời gian ta dùng đối tợng Osilo,Bảng chân lý ta dùng đối tợng TrueTable,để thay đổi các đầu vào ta dùng các nút chuyển mạch(SwitchButton)

3.2.Các hàm và các đối tợng:

Các hàm và các đối tợng đợc khai báo trong file logic.h nh sau:

#ifndef_LOGIC_H_

Trang 8

#define _LOGIC_H_

#include <dos.h>

#include <string.h>

#include <graphics.h>

#include <conio.h>

#include<iostream.h>

#ifndef byte

typedef unsigned char byte;

#endif

#ifndef word

typedef unsigned int word;

#endif

#ifndef dword

typedef unsigned long dword;

#endif

#ifndef bool

typedef int bool;

#endif

#ifndef TRUE

#define TRUE 1

#endif

#ifndef FALSE

#define FALSE 0

#endif

#define LEFT_MOUSE_PRESS 0xff01

#define RIGHT_MOUSE_PRESS 0xff02

#define LEFT_MOUSE_REL 0xff11

#define RIGHT_MOUSE_REL 0xff12

#define MOUSE_MOVE 0xff00

#define MS_GET_STATUS 3

#define MS_GET_MOVE 11

#define MS_HID_BOX 16

#define ABOUT 10

#define HELP 11

#define EXIT 12

#define SHOWICON 22

#define HIDEICON 23

#define SHOWTOOLBAR 20

#define HIDETOOLBAR 21

#define AND 1

Trang 9

#define OR 2

#define NAND 3

#define NOR 4

#define XOR 5

#define NOT 6

#endif

IV.ý nghĩa các hàm và các tham số:

4.1.Các hàm về đồ hoạ:

extern int TextHeight();

Trả về chiều cao của phông chữ sử dụng

extern int TextWidth(char ch);

Trả về độ rộng của kí tự ch

extern int Strlen(char *s);

Trả về độ dài sâu s theo pixel

extern void ShowString(int x,int y,const char* s,byte color);

Vẽ sâu s tai vị trí (x,y) có màu là color

extern void ShowChar(int x,int y,byte ch,byte color);

Vẽ kí tự có mã ch tại vị trí (x,y) màu là color

extern void Load_fnt();

Đọc phông tiếng việt đa vào bộ nhớ

extern void Load_Bmp(int l,int t,char *fname);

Đọc một file ảnh từ tệp có tên *fname ,sau đó đa ra man hình ở vị trí(l,t)

extern void ShowText(int l,int t,int w,int h,char *s,int c);

Vẽ một sâu kí tự s ở giữa hình chữ nhật có góc trái trên(l,t) độ rộng w,cao h có màu c

extern void DrawBar(int l,int t,int w,int h,int type);

Vẽ hình chữ nhật có góc tría trên(l,t),rộng w,cao h,với kiểu là type extern void Drawcaption(int l,int t,int w,int h,char *s);

Vẽ tiêu đề trong một hình chữ nhật

extern void Dohoa();

Khởi tạo đồ hoạ

extern void Linec(int x1,int y1,int x2,int y2,byte c);

Vẽ đờng thẳng với màu c

extern void Lineh3d(int x1,int x2,int y,int st);

Vẽ đờng thẳng 3d theo chiều ngang kiểu st(nổi hay chìm)

extern void Linev3d(int y1,int y2,int x,char st);

Vẽ đờng thẳng 3d theo chiều dọc kiểu st(nổi hay chìm)

extern void Bound(int x1,int y1,int x2,int y2,char tborder);

Vẽ đờng viền hình chữ nhật có kiểu tborder

extern void Bbar(int x1,int y1,int x2,int y2,byte c);

Điền màu c vào một hình chữ nhật

extern void Rectangle(int x1,int y1,int x2,int y2,byte c);

Trang 10

Vẽ hình chữ nhật với màu c

void WaitforVR();

Chờ tín hiệu đồng bộ

4.2.Các hàm về Mouse:

extern bool Msmoved();

Kiểm tra xem chuột có di chuyển không

extern void Msmove(word x, word y);

Di chuyển chuột đến vị trí(x,y)

extern void Ms_shape(word x);

extern void mouse(word *ax, word *bx, word *cx, word *dx);

extern bool Mscheck(void);

extern bool Msinit(void);

extern word Msreset(void);

extern void Mslimit(word left,word top,word right,word bottom); extern void Msshow(void);

extern void Mshide(void);

extern void Mshidebox(word left,word top,word right,word bottom); extern word MsXpos(void);

extern word MsYpos(void);

extern void Msgetpos(int *,int *);

extern bool Msinbox(word left,word top,word right,word bottom); extern int Msbpress(word b);

extern int Msbreles(word b);

extern int Msbstate(void);

extern int Mslastmove(bool dir);

extern void SetPointerShape(word Horiz,word Vert);

extern int Msleftpress();

extern void MsSpeed();

extern int Msrightpress();

4.3.Các đối tợng nguyên tố:

class BITMAP{

private:

word left,top;//G

public:

BITMAP(int l,int t){left=l,top=t;};

void ReadBMP (char *FileName );

/*Đọc một file ảnh bitmap

};

class CloseButton

{

public:

int left,top,width,height;

Trang 11

byte down;//biến trạng thái chỉ nút nổi hay chìm

byte hint;//biến trạng thái xác định đã Showhint cha

int hintx,hinty;//vị trí của hint

void *Img;//con trỏ lu ảnh khi Showhint

CloseButton()

{ left=top=width=height=0;

down=0;

hint=hintx=hinty=0;

};

void Init(int l,int t,int w,int h);//Hàm tạo

void Show();//Hàm hiển thị đối tợng

void Showhint();//Hiện hint

void Hidehint();//ẩn hint

int GetEvent();//Nhận sự kiện

void Hide();//ẩn đối tợng

int Click();//trả về 1 nếu chuột trái kích vào đối tợng

void Move(int,int);//Di chuyển đối tợng

void DoEvent();//thi hành sự kiện

};

class CommandButton{

public:

int left,top,width,height;

char caption[30];

byte drag;//biến trạng thái xem chuột có di qua đối tợng hay không byte isdown;

CommandButton();

void Init(int l,int t,int w,int h,char *s);//Khởi tạo

void Show();//Hiển thị

void Draw_up();//Vẽ nổi

void Draw_down();//Vẽ chìm

int GetEvent();

void DoEvent();

int Click();

};

//Nút chuyển mạch

class SwitchButton

{

public:

int left,top,width,height;

int value;//Giá trị của nút

char fname1[20],fname2[20];

SwitchButton(){value=0; };

void Init( int l,int t,int w,int h)

{ left=l; top=t; width=w; height=h;

Trang 12

value=0;

strcpy(fname1,"switch1.bm");

strcpy(fname2,"switch2.bm");

};

void Draw();//Vẽ nút tuỳ theo giá trị của nút

void Show();

int Click();

int GetEvent();

void DoEvent();

};

//Nút 2 trạng thái

class BiButton

{ public:

int left,top,width,height;

int value;

char fname1[20],fname2[20];

BiButton(){value=0; };

void Init( int l,int t,int w,int h)

{ left=l; top=t; width=w; height=h;

value=0;

strcpy(fname1,"run.bm");

strcpy(fname2,"st.bm");

};

void ChangeImg(char *,char *);//thay đổi các ảnh hiển thị của nút void Draw();

void Show();

int Click();

int GetEvent();

void DoEvent();

};

class BmButton

{ public:

int left,top,width,height;

char fname[20];

byte drag,down;//Biến trạng thái

char caption[20];

BmButton(){left=top=width=height=drag=down=0;};

void Init(int l,int t,int w,int h,char *s,char *fn);

void Show();

int GetEvent();

int Drag();

int Click();

Trang 13

void DoEvent();

~BmButton();

};

//lớp nút mũi tên lên

class Upbut

{ public:

int left,top;

byte isdown;

Upbut(){left=top=isdown=0;};

void Init(int,int);

void Show();

int GetEvent();

void Draw_up();

void Draw_down();

};

//Lớp nút mũi tên xuống

class Downbut

{ public:

int left,top;

byte isdown;

Downbut(){left=top=isdown=0;};

void Init(int,int);

void Show();

int GetEvent();

void Draw_up();

void Draw_down();

};

4.4.Các đối tợng nhóm:

class MessageBox{

// phan du lieu

public:

int left, top, width, height;

char caption[30];

CloseButton Cl;

CommandButton cmd;

void *Img;

byte hide;

byte move;

// phan xu ly

MessageBox(){ left=200; top=160; width=240; height=160;

strcpy(caption," Logic Gate"); hide=move=1; } void Show();

void Init( int l, int t, int w, int h );

void Hide();

Trang 14

void Move( int dx, int dy );

int GetEvent();

void DoEvent();

~MessageBox()

{ delete(Img);

delete(caption);

};

};

//Lớp osilo

class Osilo

{ public:

int left,top,width,height;

BiButton on;

BiButton close;

char in1[15];//Lu dãy tín hiệu vào

char in2[15];

char out[15];//Lu dãy tín hiệu ra

char fname[30];//tên file ảnh

byte type;//Kiểu mạch AND,OR ,NOT,

byte show, event;//biến trạng thái

byte OK,done;

int i;//biến đếm

Osilo() {left=top=0;show=event=0;memset(in1,'0',15);memset(in2,'0',15);

strcpy(fname,"osilo.bm");

OK=1;done=0;i=0;

};

void Init(int,int,int);

void Setvalue();//hàm đặt giá trị

void Black_Box(int,int,int,int);//Vẽ một hộp đen

void ShowText();//Hiển thị chữ

void Screen();//Vẽ màn hình

void Show();//Hiển thị đối tợng

void Hide();

void Run();//Hoạt động của tín hiệu quét

int GetEvent();

void DoEvent();

~Osilo(){delete (fname);delete(in1);delete(in2);delete(out);};

};

//Lớp thanh công cụ

class ToolBar{

public:

int left,top,width,height;

Trang 15

byte show,active,event;//Các biến trạng thái

BmButton button[8];//8 nút của thanh công cụ

ToolBar(){left=top=width=height=show=active=event=0;};

void Init(int,int,int,int);

void Show();

void Hide();

int GetEvent();

int And_Click();//trả về 1 naếu kích chuột vào nút AND

int Or_CLick();//trả về 1 naếu kích chuột vào nút OR

int Nand_Click();//trả về 1 naếu kích chuột vào nút NAND

int Nor_Click();//

int Xor_Click();//

void Doevent();//

~ToolBar(){delete (button);};

};

//Lớp Menu

//node là lớp nguyên tố của lớp Menu

class Menu{

public:

node *Menuhead,*Menutail,*current;

node *Pophead,*Poptail,*subcur;

void *Img;

Menu(){Menuhead=Menutail=Pophead=Poptail=NULL;};

void InsertPop(int,int,byte,int,char *);//Thêm một node vào MenuPop void InsertMenu(int, int,int,int,char *);//Thêm một node vào Menu void DelMenu();//

void Init();//Khởi tạo Menu

int ManageBar();

void Draw_Bar(node *p);//Vẽ một node ở menubar

void Draw_Pop(node *p);//Vẽ một node ở menupop

void ShowBar();//Hiển thị menubar

void Show();//Hiển thị Menu

void HidePop();//ẩn menupop

void ShowPop();//Hiện menupop

int DoEvent();//Thi hành sự kiện

};

//Lớp thanh cuộn

class ScrollBar

{ public:

int left,top,width,height;

byte scrup,scrdown;//biến trạng thái

int curpos,oldpos;//vị trí cũ và mới của thanh phân cách

int indicatorsize;//độ dài thanh phân cách

Trang 16

int minvalue,maxvalue;//giá trị lớn nhất và bé nhất mà thanh phân con chạy có thể di chuyển

Upbut scrollup;//Mũi tên lên

Downbut scrolldown;//Mũi tên xuống

ScrollBar(){left=top=width=height=0;};

void Init(int,int,int,int,int);//Khởi tạo

void Draw_scrollup();//

void Draw_scrolldown();

int Getpos();//Nhận vị trí của con chạy

int GetEvent();//Nhận sự kiện

void Draw_scrollbar();//Vẽ thanh cuộn

void Draw_indicator();//Vẽ con chạy

void DoEvent();//Thi hành sự kiện

void Show();//Hiện thanh cuộn

};

//Lớp Image

class Image

{ public:

int left,top,width,height;

byte show;//Biến trạng thái

char fname[30];//tên file ảnh

Image (){left=top=width=height=show=0;};

void Init(int,int,int,int);//Khởi tạo

void ChangeIcon(char *s);/Thay đổi file ảnh

void Show();//Hiển thị

void Hide();//ẩn

};

//Lop TrueTable

class TrueTable

{

public:

int left,top,width,height;

char caption[30];

int N;//Số đầu vào

char X[4][17];//Mảng chứa đầu vào

char Y[17];//Mảng ra

ScrollBar scrbar;//thanh cuộn

int value,show;//Biến trạng thái

int type;//Kiểu mạch gì AND,OR,NOT

TrueTable()

{

left=top=width=height=N=show=0;

strcpy(caption,"Bảng chân lý");

}

Trang 17

void Init(int l,int t,int n);//Khởi tạo

void Set_type(int);//Đặt kiểu mạch

void Change_in(int);//Thay đổi đầu vào

void Draw_invisible();//vẽ phần không nhìn thấy ở trang màn hanình khác

void Draw_visible();//Vẽ phần thấy

void Show();//Hiện đối tuợng

void Hide();//ẩn đối tợng

void Setvalue();//Đặt giá trị cho đầu vào

void Redraw(int);//Vẽ lại đối tợng

int GetEvent();//Nhận sự kiện

void DoEvent();

~TrueTable();

};

//Lop AndImg

class AndImg

{ public:

int left,top,width,height;//Vị trí đối tợng trên màn hình

SwitchButton in[4];//4 nút chuyển mạch

BiButton out;//Nút thể hiện đầu ra

byte show;

int N;//số đầu vào

char fname[30];//tên file ảnh

AndImg(){left=top=show=0;height=150;width=112;};

void Init(int,int,int);//Khởi tạo

void Draw();

void Show();

void Hide();

int GetEvent();

void DoEvent();

int Drag();

~AndImg();

};

class InputBox

{

public:

int left,top,width,height;

char caption[30];

int cursorx,cursory;

CommandButton OK;

CloseButton Close;

char *Img;

int show;

Ngày đăng: 24/08/2012, 22:32

HÌNH ẢNH LIÊN QUAN

Bảng chân lí: - Mo phong mach logic so.doc
Bảng ch ân lí: (Trang 4)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w