Kiến thức cơ bản a.Sơ đồ ma trân phím b.Cách nhận biết phím a.Các chân chức năng b.Tập lệnh thường dùng Phần II.Thiết kế và lập trình máy tính đơn giản 1.Sơ đồ phần cứng 2... Kiến th
Trang 1BỘ GIÁO DỤC & ĐÀO TẠO ĐẠI HỌC GIAO THÔNG VẬN TẢI HÀ NỘI
KHOA ĐIỆN – ĐIỆN TỬ
====XxX====
BÀI TẬP LỚN
KỸ THUẬT VI XỬ LÝ
Đề số 16
LỚP : Trang bị điện – điện tử trong CN & GTVT K54
GIÁO VIÊN HƯỚNG DẪN :
1 Lương Hữu Ngọc
2 Trần Văn Bảo
3 Trần Trung Hòa
4 Mai Gia Thiệu K53
5 Lê Văn Hoàng K53
6 Nguyễn Bá Tùng K53
Trang 2
Hà Nội – 10/2013
1
Thiết kế môn học
Chủ đề : thiết kế máy tính đơn
giản
Trang 3Mục lục
Phần I Kiến thức cơ bản
a.Sơ đồ ma trân phím
b.Cách nhận biết phím
a.Các chân chức năng
b.Tập lệnh thường dùng
Phần II.Thiết kế và lập trình máy tính đơn giản 1.Sơ đồ phần cứng
2 Chương trình
Trang 4Phần I Kiến thức cơ bản
a.Sơ đồ ma trận phím
(mắc them trở treo vào nút bấm để các nút bấm hoạt động ổn định hơn )
b.Cách nhận biết phím
- Xác hàng có phím được bấm
+ cho hàng là đầu vào, cột là đầu ra (tức là cho hàng bằng 1,cột bằng 0) + Kiểm tra xem có hàng nào bằng “0” hay không,nếu không thì không có phím nào được bấm,nếu có thì kiểm tra xem hàng nào được bấm
+ cho cột là đầu vào, hàng là đầu ra (tức là cho hàng bằng 0,cột bằng 1)
Trang 5+ Kiểm tra xem có cột nào bằng “0” hay không,nếu không thì không có phím nào được bấm,nếu có thì kiểm tra xem hàng nào được bấm
a.Các chân chức năng
GND của mạch điều khiển
với VCC=5V của mạch điều khiển
“0” (GND) hoặc logic
“1” (VCC) để chọn thanh ghi
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của
Trang 6LCD (ở chế độ “ghi” write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” -read)
+ Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu DR bên trong LCD
logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic
“1” để LCD ở chế độ đọc
bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên
trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên (lowto-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức
thấp
DB7
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU Có 2 chế độ sử
dụng 8 đường bus này : + Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường, với bit MSB là bit DB7
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7
b.Tập lệnh thường dùng
thực hiện
Trang 70x0C Bật hiển thị và tắt con trỏ 37us
Phần II.Thiết kế và lập trình máy tính đơn giản
1.Sơ đồ phần cứng
Trang 8XTAL2 18 XTAL1 19
ALE 30 EA 31 PSEN 29
RST 9
P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32
P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8
P3.0/RXD 10 P3.1/TXD 11 P3.2/INT0 12 P3.3/INT1 13 P3.4/T0 14 P3.7/RD 17 P3.6/WRP3.5/T1 16 15 P2.7/A15 28
P2.0/A8 21 P2.1/A9 22 P2.2/A10 23 P2.3/A11 24 P2.4/A12 25 P2.5/A13 26 P2.6/A14 27
U1
AT89C51
1
2
3
8
9
=
7
A B C D
R1
10k R2
10k
R3
10k R4
10k
LM016L
RV1
1k
C1
30pF
C2
30pF
X1
12MHz
C3
10uF
R5
10k
R7
220
RS
RS
#include <REGX51.H>
unsigned char h,c,hc;
unsigned long i,j;
unsigned char text[] ="0123456789/x-+=o";
int y[]={43,34,33,32,24,23,22,14,13,12,11,21,31,41,42,44};
void delay(unsigned int n);
void kiemtraphim(void);
void khoitao(unsigned char x);
void khoitao1(void);
void lcd_text(unsigned char t);
void delay(unsigned int n) //ham tre
{
do {
TL0 = 0x18;
TH0 = 0xFC;
Trang 9TR0 = 1; // Timer0 bat dau dem
while(!TF0);
TF0 = 0;
n ;
}while(n!=0);
}
{
P2_0=0;
P3=x;
P2_2=0; // cho chan E tu 0 len 1 de lcd nhan du lieu
}
{
h=c=0;
delay(1000);
P1=0x0f;
if(P1==0x0f)h=c=5; // khong bam
else if(P1_0==0)h=1; //hang bang 1
else if(P1_1==0)h=2; //hang bang 2
else if(P1_2==0)h=3; //hang bang 3
else if(P1_3==0)h=4; //hang bang 4
P1=0xf0;
if(P1_7==0)c=1; //cot bang 1
else if(P1_6==0)c=2; //cot bang 2
else if(P1_5==0)c=3; //cot bang 3
else if(P1_4==0)c=4; //cot bang 4
hc=h*10+c;
}
{
Trang 10P2_0=1; //chan E =1 thi cho phep lcd nhan du lieu
P3=t;
P2_2=0; // tao xung o chan e thi lcd moi nhan duoc
du lieu
delay(1000); //cho lenh thuc hien xong
}
dong
{
khoitao(0x30);
delay(5); //cho lenh thuc hien
khoitao(0x30);
delay(1);
khoitao(0x30);
khoitao(0x38); // che do hien thi 2 dong
khoitao(0x01); // xoa man hinh
khoitao(0x0c); // hien thi man hinh o d
}
ham chinh
{
int a=0,f[16],kq,kt=0,d=0;
khoitao1();
while(1)
{
so tu 0 den 9
if(hc==y[i])
{
Trang 11khoitao(0x0c);
lcd_text(text[i]);
a=i+a*10;
bat man hinh
{
khoitao(0x01);
khoitao(0x0c);
}
for(i=10;i<14;i++) //kiem tra phep tinh
if(hc==y[i])
{
kq=a;
a=0;
if(hc==y[10])kt=1; // chia
}
if(hc==y[14]) //tinh toan va hien thi ket qua
{
d=0;
if(kt==1)kq=kq/a; //tinh toan else if(kt==2)kq=kq*a;
else if(kt==3)kq=kq-a;
else if(kt==4)kq=kq+a;
Trang 12khoitao(0xc0) ;
if(kq<0){kq=0-kq;lcd_text(text[12]);} if(kq==0){lcd_text(text[0]);}
for(i=0;i<16;i++) {
if(kq!=0) {
f[i]=kq%10;
kq= (kq-f[i])/10;
d=d+1;
} }
for(i=0;i<d;i++)
lcd_text(text[f[d-i-1]]);
}
}
}