Báo cáo bài tập lớ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 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 > 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. 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; 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"); 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(); 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); 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); 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 Long Private 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 Long Private 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 Long Private Declare Function ReleaseCapture Lib "user32" () As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Dim Ret As Long Dim sConnType As String * 255 Dim SearchString, SearchChar, MyPos Dim ak As Long Private 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), True End Sub Private Sub Command1_Click() Unload Me End Sub Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyEscape Then App.TaskVisible = False Unload Me End End If End 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 . 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. 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à. 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