mình có cái máy tính bỏ túi =89s52 nhưng mà mình chỉ làm với 16 phím thôi chứ ko làm với 30 phím như chủ topic, muốn mở rộng phím đơn giản thôi
Thông báo
Collapse
No announcement yet.
Làm máy tính bỏ túi bằng 89s52
Collapse
X
-
thật hả?cài bản bao nhiêu vậy bạn?mình cài 7.6 hình như ko có?bạn gửi cho mình được không?thank?
phudubathanh@gmail.com
Comment
-
vậy cao thủ cho tớ xin bản 16 phím đi.gửi vào mail của mình nhé.thank.cho cả code nhé?hj
phudubathanh@gmail.com
Comment
-
các pro làm xong cho e xin 1 bản nhé.e cũng đang làm đồ án về cái này.thank!!!!
phudubathanh@gmail.com
Comment
-
mình đang làm đồ án thiết kế máy tính bỏ tui. làm mạch xong rùi mà k hiển thị LCD. ai pro giúp kiểm tra hộ vs. cảm ơn nhiều...
COde:
#include <at89x51.h>
#define BTN_PORT P1 //dinh nghia phim (ma tran 4x4)
#define LCD_PORT P0 //dinh nghia chan du lieu cua lcd
#define LCD_RS P2_5
#define LCD_RW P2_6
#define LCD_EN P2_7
#define uchar unsigned char //dinh nghia cac kieu ky tu
#define uint unsigned int
#define ulong unsigned long
#define lcdPutc LCDPutChar
#define lcdPuti LCDPutInt
#define lcdPuts LCDPutStr
#define lcdPutb LCDWriteByte
#define lcdLine1() lcdPutb(0, 0x80) // tro ve dong dau thu nhat
#define lcdLine2() lcdPutb(0, 0xc0) //tro va dong dau thu hai
uchar btn = 0, lKey = 0, hang = 0, cot = 0, Signed = 0;
uint cKey;
uchar M[4][4] ={{'C', '0', '=', '/'}, // Gan ki tu xuat hien cac phim vao mang M;
{'1', '2', '3', '*'},
{'4', '5', '6', '-'},
{'7', '8', '9', '+'} } ;
ulong so1;
uint so;
void delay(uint i) //ham tao tre delay
{
while(i--);
}
void LCDWriteByte(uchar mode, uchar d)
{
LCD_PORT = d; // Chan LCD ;
LCD_RW = 0; // Ghi du lieu vao LCD;
if(mode == 1) // Chon thanh ghi du lieu;
LCD_RS = 1; //
else
LCD_RS = 0; // Chon thanh ghi lenh ;
LCD_EN = 1; // Tin hieu Cho phep LCD;
delay(4); // Tao tre;
LCD_EN = 0; // Tin hieu khong cho phep LCD;
delay(40); // Tao tre;
}
void LCDPutChar(uchar byte) // Ghi du lieu can hien thi ra LCD;
{
LCDWriteByte(1, byte);
}
void LCDPutStr(char const *str) // Ghi chuoi ki tu ra LCD;
{
char const *sPtr;
sPtr = str;
while(*sPtr != '\0')
{
LCDWriteByte(1, *sPtr);
sPtr++;
}
}
void LCDPutInt(long x)
{
long tmp, val;
int lenght = 0;
uchar str[10]={0};
if(x<0) tmp = 0-x;
else tmp = x;
do
{
val = tmp%10;
str[lenght] = val + '0';
lenght++;
tmp = tmp/10;
} while(tmp !=0);
if(x <0)
{
str[lenght] = '-';
lenght++;
}
do
{
lenght--;
LCDPutChar(str[lenght]);
} while(lenght);
}
void lcdClrL(uchar l)
{
if(l == 1)
{
lcdLine1();
lcdPuts(" ");
lcdLine1();
}
else
{
lcdLine2();
lcdPuts(" ");
lcdLine2();
}
}
void khoitao() //khoi tao lcd
{
LCDWriteByte(0, 0x38); //LCD 2 dong, font 5*7;
LCDWriteByte(0, 0x0C); //Bat hien thi, tat con tro, con tro khong nhap nhay;
LCDWriteByte(0, 0x01); // Xoa man hinh;
delay(1700);
}
void Quetphim(void) {
uchar i, gKey;
i = 1;
i = i<< hang;
BTN_PORT = ~i; //hang=0 BTN_PORT=0xfe;hang=1 BTN_PORT=0xfd;hang=2 BTN_PORT=0xfb;hang=3 BTN_PORT=0xf7
delay(1);
gKey = BTN_PORT;
if((gKey&0xf0) != 0xf0) //phim duoc nhan( Dat gia tri 1 cho tung cot, kiem tra tung hang )
{
if(gKey == lKey)
{
cKey++;
if(cKey == 3000) //chong doi phim
{
if((lKey&0xe0) == 0xe0) cot = 0;
else if((lKey&0xd0) == 0xd0) cot = 1; //gan cho cot 2 gia tri =1
else if((lKey&0xb0) == 0xb0) cot = 2; //gan cho cot 3 gia tri =2
else if((lKey&0x70) == 0x70) cot = 3; //gan cho cot 4 gia tri =3
cKey = 0; btn = 1;
}
}
else
{
cKey = 0;
lKey = gKey;
}
}
else{
hang++;
btn = 0;
}
if(hang > 3) hang = 0;
}
void Hienthi(void)
{
uchar ma = M[cot][hang], sig;
if((ma<= '9') && (ma >= '0'))
{
so = so *10 + ma - '0';
lcdPutc(ma);
}
else if((ma == '+') || (ma == '-') || (ma == '*') || (ma == '/'))
{
sig = ma;
if(Signed == 0){
so1 = so; so = 0;
lcdPutc(ma);
Signed = 1;
}
else
{
lcdClrL(2); lcdPuts("Error #2");
}
}
else if(ma == '=')
{
switch(sig)
{
case '-': so1 = so1 - so; break;
case '+': so1 = so1 + so; break;
case '*': so1 = so1 * so; break;
case '/':
if(so == 0) {
lcdClrL(2); lcdPuts("Error #1");
}
else
so1 = so1 / so;
break;
}
lcdPutb(0, 0x0c); // Bat hien thi, tat con tro;
lcdLine2(); lcdPutc('=');
lcdPuti(so1);
Signed = 0; so = 0; so1 = 0;
btn = 0; while(btn == 0) Quetphim();
lcdPutb(0, 0x01); // Xoa man hinh;
delay(5000);
lcdPutb(0, 0x0f); // Bat hien thhi, bat con tro, bat nhap nhay;
}
else{
so = so1 = 0;
lcdPutb(0, 0x01);
delay(5000);
lcdPutb(0, 0x0f);
}
}
void main(void)
{
khoitao();
lcdPuts("May Tinh Bo Tui");
lcdLine2();
lcdPuts(" Vi Dieu Khien");
btn = 0;
while(btn == 0) Quetphim();
lcdPutb(0, 0x01); delay(1700);
lcdPutb(0, 0x0f);
while(1){
btn = 0;
while(btn == 0) Quetphim();
Hienthi();
}
}
Comment
-
Em chỉ cần cái 4*4 thôi ạ. Với LCD 2*16. Pro nào có cho Em xin với được không.
Mail: ducthuanpham10@gmail.com.
Cảm ơn nhiều.
Comment
-
Nguyên văn bởi gamowaxaky Xem bài viếtĐây là đồ án môn học II của mình, làm một máy tính bỏ túi bằng 89s52, hiển thị bằng LCD16x2, lập trình bằng asm, có kèm theo file mô phỏng bằng proteus, và mạch in vẽ bằng proteus.
Download
Comment
-
Nguyên văn bởi gamowaxaky Xem bài viếtĐây là đồ án môn học II của mình, làm một máy tính bỏ túi bằng 89s52, hiển thị bằng LCD16x2, lập trình bằng asm, có kèm theo file mô phỏng bằng proteus, và mạch in vẽ bằng proteus.
Download
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho tìm mua đồng hồ vạn năngbởi mèomướpDạ chú mua cái kẹp dòng ấy ạ. Chị hàng xóm nhà cháu có 1 cái thấy lâu lâu rùi chưa hỏng ạ. Ví dụ như mẫu này trên shoppee đầy ạ...
https://vn.shp.ee/dWYVgq7-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 12:48 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi vi van phamBác Đinh Vặn sai rồi,bây giờ con nít mẫu giáo đã giải phương trình 2 ẩn số rồi.
Tôi chứng minh bác lên youtube đầy video đơn giản tựa rất hot, chỉ 1 transistor hay 1 con diode và hướng dẩn cách làm, tác giả không vẽ sơ đồ mạch điện...-
Channel: Điện tử công suất
Hôm qua, 11:55 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi nguyendinhvanBây giờ mới có tháng giêng, bao giờ mới đến tháng mười ?
Các cháu mẫu giáo mới lên lớp 1 được có 4 tháng. Nên đừng lấy lý do chúng nó đã đi học rồi để bắt nó viết một bài luận văn, hay là giải bài toán hàm. Phải kiên nhẫn...-
Channel: Điện tử công suất
Hôm qua, 00:47 -
-
Trả lời cho tìm mua đồng hồ vạn năngbởi nguyendinhvanKhông có loại nào đủ một vạn chức năng đâu. Nó chỉ được 2345678 , hoặc khủng lắm thì được 10 chức năng.
-
Channel: Điện tử dành cho người mới bắt đầu
Hôm qua, 00:16 -
-
bởi since0501Cảm ơn bác đã chia sẻ!...
-
Channel: Điện tử dành cho người mới bắt đầu
19-01-2025, 19:00 -
-
bởi Lê Gia TứMình muốn tìm mua đồng hồ vạn năng giá khoảng 200k có đo tần số cao khoảng 0~1mhz mọi người tư vấn giúp mình với
-
Channel: Điện tử dành cho người mới bắt đầu
19-01-2025, 15:47 -
-
Trả lời cho Mạch tự động bật nguồnbởi davidcopyChỉ cần dùng R C mắc vô phím power là ok....
-
Channel: Điện tử gia dụng
18-01-2025, 20:47 -
-
Trả lời cho Hỏi cách điều chế xungbởi davidcopydùng mach khuếch opamp...
-
Channel: Kỹ thuật điện tử tương tự
18-01-2025, 20:42 -
-
Trả lời cho Thắc mắc về hạ áp cho adapter laptopbởi davidcopy
-
Channel: Điện tử dành cho người mới bắt đầu
18-01-2025, 18:56 -
-
bởi bqvietĐấy gọi là cái "điểm gãy" trong đồ thị điện áp - dung lượng còn lại. Dùng điện áp hở cực để xác định sắp hết hoặc gần đầy thì vẫn tạm ổn. Dùng để đo SOC/DOD thì đừng. Ngay cả số km đã đi cũng chả xác định được...
-
Channel: Điện tử dành cho người mới bắt đầu
17-01-2025, 21:36 -
Comment