15
BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH ĐỀ TÀI: THIẾT KẾ MẠCH VÀ VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN HIỂN THỊ MỘT DÒNG CHỮ BẤT KÌ CHẠY TRÊN LCD GV: TỐNG VĂN LUYÊN SVTH: NGUYỄN TRÍ TRƯỞNG NGUYỄN VIẾT VỮNG

BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

  • Upload
    thuhaui

  • View
    488

  • Download
    6

Embed Size (px)

Citation preview

Page 1: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

ĐỀ TÀI: THIẾT KẾ MẠCH VÀ VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN HIỂN THỊ MỘT DÒNG CHỮ BẤT KÌ CHẠY TRÊN LCD

GV: TỐNG VĂN LUYÊN SVTH: NGUYỄN TRÍ TRƯỞNG

NGUYỄN VIẾT VỮNG

Page 2: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

I / TỔNG QUAN VỀ LCD VÀ CÁCH GIAO TIẾP CỦA LCD VỚI 89S52

1 . Tổng quan LCD

Ngày nay LCD với những tính năng nổi trội của nó đã được sử dụng rất nhiều trong vi điều khiển. Khả năng hiện thị của LCD là rất đa dạng, trực quan (chữ, số và nhiều loại kí tự đồ họa khác ), dễ dàng đưa vào mạch ứng dụng chẳng hạn như : điện thoại di động, máy game và các lĩnh vực khác mà giá thành rẻ…

LCD sử dụng trong mạc là LCD : LM016L

LCD LM016L là loại màn hình hiển thị được 16 kí tự × 2 dòng, bao gồm tất cả các kí tự chuẩn ngoài ra còn có một số kí tự đặc biệt nhưng không có kí tự dấu tiếng Việt.

Hình dáng và sơ đồ chân của LCD:

2 / CÁCH GIAO TIẾP CỦA LCD VỚI 89S52

Giao tiếp của LCD với 89S52 trong mạch được kết nối với nhau thông qua Port P1 < P1.0 – P1.7 >

Page 3: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

3 / Giới thiệu về 89S52

Sơ đồ chân của 89S52

4. Giới thiệu về MAX232

Vi mạch MAX 232 của hãng MAXIM là 1 vi mạch chuyên dùng trong giao diện nối tiếp với máy tính. Chúng có nhiệm vụ chuyển đổi mức TTL ở lối vào thành mức +10V hoặc –10V ở phía truyền và các mức +3…+15V hoặc -3…-15V thành mức TTL ở phía nhận.

Vi mạch MAX 232 có hai bộ đệm và hai bộ nhận. Đường dẫn điều khiển lối vào CTS,điều khiển việc xuất ra dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9 của vimạch MAX 232. Còn chân RST (chân 10 của vi mạch MAX ) nối với đường dẫn bắt tay để điều khiển quá trình nhận.

Page 4: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

5 / Phần chương trình

Chương trình cho VDK:

#include <REGX52.H>

#include <stdio.h>

#include<serial.h>

#include<lcd.h>

int timer=0;

char datax[10];

int dem=0,k=0;

void delay(timer)

{

int ix,jx;

Page 5: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

for(ix=0;ix<timer;ix++)

for(jx=0;jx<=150;jx++);

}

void receive_data() interrupt 4

{

if(RI==1)

{

RI=0;

if (SBUF=='@')

dem=0 ;

datax[dem]=SBUF ;

dem++;

}

}

void main(void)

{

uart_init() ;

setting();

home();

command(LCD_DISPLAY_ON );

get_x_y(1,16);

print_str("SINH VIEN THUC HIEN");

Page 6: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

for(k=0;k<=17;k++)

{

move_display(1,1);

delay(150);

}

clear();

delay(100);

get_x_y(1,16);

print_str("NGUYEN TRI TRUONG");

for(k=0;k<=15;k++)

{

move_display(1,1);

delay(100);

}

for(k=0;k<=4;k++)

{

command(LCD_CURSOR_ON);

delay(100);

command(LCD_DISPLAY_ON);

delay(150);

}

clear();

Page 7: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

get_x_y(1,7);

print_str("*Vs*");

delay(100);

for(k=0;k<=4;k++)

{

command(LCD_CURSOR_ON);

delay(100);

command(LCD_DISPLAY_ON);

delay(100);

}

clear();

get_x_y(1,16);

print_str("NGUYEN VIET VUNG");

for(k=0;k<=14;k++)

{

move_display(1,1);

delay(100);

}

for(k=0;k<=4;k++)

{

command(LCD_CURSOR_ON);

delay(100);

Page 8: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

command(LCD_DISPLAY_ON);

delay(150);

}

clear();

command(LCD_DISPLAY_ON );

while(1)

{

home();

if (datax[6]=='^' )

print_str("HN ");

else

print_str("HCM");

get_x_y(1,6);

print_char(datax[1]/10+0x30);

print_char(datax[1]%10+0x30);

print_char('/');

print_char(datax[2]/10+0x30);

print_char(datax[2]%10+0x30);

print_str("/200");

print_char(datax[3]/10+0x30);

print_char(datax[3]%10+0x30);

get_x_y(2,1);

Page 9: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

print_char(datax[4]/10+0x30);

print_char(datax[4]%10+0x30);

print_char(':');

print_char(datax[5]/10+0x30);

print_char(datax[5]%10+0x30);

get_x_y(2,9);

print_char(datax[7]/10+0x30);

print_char(datax[7]%10+0x30);

print_char(0xdf);

print_char('C');

}

}

Chương trình cho cổng nối tiếp:

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, _   ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As LongPrivate Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long

Private Declare Function InternetGetConnectedStateEx Lib "Wininet.dll" (ByRef lpdwFlags As Long, ByVal lpszConnectionName As String, ByVal dwNameLen As Integer, ByVal dwReserved As Long) As LongPrivate Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As LongPrivate Declare Function ReleaseCapture Lib "user32" () As LongPrivate Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Dim Ret As LongDim sConnType As String * 255

Page 10: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

Dim SearchString, SearchChar, MyPosDim ak As LongPrivate Const pi As Double = 3.14159265358979

Private Sub MakeRoundObject(objObject As Object, Value As Long)    Static lngHeight, lngLong, lngReturn, lngWidth As Long        lngWidth = objObject.Width / Screen.TwipsPerPixelX    lngHeight = objObject.Height / Screen.TwipsPerPixelY                      SetWindowRgn objObject.hWnd, CreateRoundRectRgn(0, 0, lngWidth, lngHeight, Value, Value), TrueEnd Sub

Private Sub Command1_Click()Unload MeEnd Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)    If KeyCode = vbKeyEscape Then        App.TaskVisible = False        Unload Me        End    End IfEnd Sub

Private Sub Form_Load()    Dim intX As Integer        Call MakeRoundObject(frmMain, 20)    Call tmrClock_Timer        Dim Ret As Long    Ret = InternetGetConnectedStateEx(Ret, sConnType, 254, 0)    Combo1.AddItem "HA NOI", 0    Combo1.AddItem "HO CHI MINH", 1            For intX = 0 To 360 Step 6        If intX Mod 30 = 0 Then            Me.DrawWidth = 6            Me.PSet (1100 * Cos(intX * pi / 180) + lineSecond.X1, 1100 * Sin(intX * pi / 180) + lineSecond.Y1)

Page 11: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

        Else            Me.DrawWidth = 3            Me.PSet (1100 * Cos(intX * pi / 180) + lineSecond.X1, 1100 * Sin(intX * pi / 180) + lineSecond.Y1)        End If    Next intX        MSComm1.CommPort = 1    MSComm1.Settings = "9600,n,8,1"    MSComm1.PortOpen = True    End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)    ReleaseCapture    SendMessage Me.hWnd, &HA1, 2, 0&End Sub

Private Sub lblTime_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)    Call Form_MouseDown(Button, Shift, X, Y)End Sub

Private Sub Timer1_Timer()

MSComm1.Output = "@"MSComm1.Output = Chr(Day(Now))MSComm1.Output = Chr(Month(Now))MSComm1.Output = Chr(Year(Now) - 2000)MSComm1.Output = Chr(Hour(Now))MSComm1.Output = Chr(Minute(Now))If Combo1 = "HO CHI MINH" ThenMSComm1.Output = "*"ElseMSComm1.Output = "^"End Ifak = lable4MSComm1.Output = Chr(Abs(ak))End Sub

Private Sub tmrClock_Timer()    Dim dblSecond As Double, dblMinute As Double, dblHour As Double        dblSecond = Second(Now) * 6 - 90    dblMinute = (Minute(Now) + Second(Now) / 60) * 6 - 90    dblHour = (Hour(Now) + Minute(Now) / 60) * 30 - 90

Page 12: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH

    lineSecond.X2 = 1000 * Cos(dblSecond * pi / 180) + lineSecond.X1    lineSecond.Y2 = 1000 * Sin(dblSecond * pi / 180) + lineSecond.Y1    lineMinute.X2 = 900 * Cos(dblMinute * pi / 180) + lineMinute.X1    lineMinute.Y2 = 900 * Sin(dblMinute * pi / 180) + lineMinute.Y1    lineHour.X2 = 700 * Cos(dblHour * pi / 180) + lineHour.X1    lineHour.Y2 = 700 * Sin(dblHour * pi / 180) + lineHour.Y1        lblTime.Caption = Format(Now, "hh:mm:ss")    Label1.Caption = Format(Now, "dd/mm/yyyy")End Sub

Private Sub Combo1_Click()If Ret = 0 ThenIf Combo1 = "HA NOI" ThenCall DownloadFile1lable4 = "38"Picture1.Picture = LoadPicture(App.Path & "\1.gif")ElseCall DownloadFile2lable4 = "40"Picture1.Picture = LoadPicture(App.Path & "\2.gif")End If

  '  Set fso = CreateObject("Scripting.FileSystemObject").OpenTextFile("D:\Date.sys", 1)  'S = fso.ReadAll:  S = Right(S, Len(S) - InStrRev(S, "&nbsp") - 3) ' S = Left(S, 38):  MsgBox Left(S, InStrRev(S, ":") - 1) ' Set fso = Nothing: Kill "D:\Date.sys"  Else  MsgBox "KHONG THE KET NOI VAO MANG"  End If    End Sub5 / Mạch mô phỏng

Page 13: BÁO CÁO BÀI TẬP LỚN MÔN KIẾN TRÚC MÁY TÍNH