chào mọi người, việc là em mới nhập môn VDK, và đang học VXL viết asm và có bài tập về nhà mà không biết làm thế nào, viết bài lên đây hi vọng ai đó giúp đỡ với chứ em chẳng biết cầu cứu ai
Đề tài: viết chuơng trình mô phỏng danh bạ điện tử lên LCD, cho nhập tên và số qua port P1.0->P1.7 :
vd: LCD 2 dòng;
dòng 1 xuất tên: VDK
dòng 2 xuất số: 0903
tiếp theo là cho nhập
dòng 1: ĐTVN
dòng 2 xuất số: 0122
...
và làm tiếp tục như vậy. tất cả đều nhập từ
sau khi nhập xong vài người và số mạng điện thoại của họ thì bấm nút nhấn cho trả lại tên và số mà mình đã nhập bằng cách nào đó mà nhấn nút thì màn hình kéo con trỏ kéo màn hình LCD lên xuống để mình đọc tên và số, chức năng như phím bấm lên xuống trên điện thoại di động.
Mong các anh chuyên VDK 89c51 giúp em với. mò mẫm code cả mấy tuần mà chưa được gì.
đây là code của em (đính kèm file mô phỏng),làm hoài mà chẳng được, nút nhấn thì hoạt động không độc lập được , nản quá:
#include "REGX51.H"
#define RW P0_1
#define RS P0_0
#define EN P0_2
#define DATA P2
#define SW0 P1_0
#define SW1 P1_1
#define SW2 P1_2
#define SW3 P1_3
#define SW4 P1_4
#define SW5 P1_5
#define SW6 P1_6
#define SW7 P1_7
void delay(int n);
void s_inst(void);
void s_data(void);
void s_latch(void);
void main(void)
{
RS=0;
RW=0;
EN=1;
delay(100000);
s_inst();
DATA=0X38; // chon phong chu
s_latch();
s_latch();
s_latch();
s_latch();
DATA=0X0F; // hien thi va nhap nhay chuot
s_latch();
DATA=0X10; // chon dong 1
s_latch();
DATA=0X0; // lam trang LCD
s_data();
s_latch();
while(1)
{
if(SW0==0)
{
DATA='H';
s_data();
s_latch();
while(1)
{
if(SW1==0)
{
DATA='E';
s_data();
s_latch();
while(1)
{
if(SW2==0)
{
DATA='L';
s_data();
s_latch();
while(1){
if(SW3==0){
DATA='P';
s_data();
s_latch();
while(1)
{
if(SW4==0)
{ s_inst();
DATA='M';
s_data();
s_latch();
while(1){ //Ch? khi nào chân P1.0 xu?ng m?c th?p
while(1)
{
if(SW5==0)
{ s_inst();
DATA='E';
s_data();
s_latch();
while(1){ //Ch? khi nào chân P1.0 xu?ng m?c th?p
if(SW6==0){
s_inst();
DATA=0XC0; //chon dong 2
s_latch();
DATA=0X0;
s_data();
s_latch(); //code ctr
while(1)
{
if(SW0==0)
{ s_inst();
DATA='0';
s_data();
s_latch();
while(1)
{
if(SW1==0)
{ s_inst();
DATA='1';
s_data();
s_latch();
while(1)
{
if(SW2==0)
{ s_inst();
DATA='2';
s_data();
s_latch();
while(1)
{
if(SW3==0)
{
s_inst();
DATA='3';
s_data();
s_latch();
s_inst();
DATA=0X80; // chon dong 1
s_latch();
while(1){ //Ch? khi nào chân P1.0 xu?ng m?c th?p
if(SW0==0){
DATA='k';
s_data();
s_latch(); //code ctr
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
} }}
while(1);
}
void delay(int n)
{
int i=0,j=0;
for(i=0;i<=n;i++)
for(j=0;j<=10;j++);
}
void s_inst(void)
{
RS=0;
RW=0;
}
void s_data(void)
{
RS=1;
RW=0;
}
void s_latch(void)
{
EN=1;
delay(1000);
EN=0;
delay(1000);
}
Đề tài: viết chuơng trình mô phỏng danh bạ điện tử lên LCD, cho nhập tên và số qua port P1.0->P1.7 :
vd: LCD 2 dòng;
dòng 1 xuất tên: VDK
dòng 2 xuất số: 0903
tiếp theo là cho nhập
dòng 1: ĐTVN
dòng 2 xuất số: 0122
...
và làm tiếp tục như vậy. tất cả đều nhập từ
sau khi nhập xong vài người và số mạng điện thoại của họ thì bấm nút nhấn cho trả lại tên và số mà mình đã nhập bằng cách nào đó mà nhấn nút thì màn hình kéo con trỏ kéo màn hình LCD lên xuống để mình đọc tên và số, chức năng như phím bấm lên xuống trên điện thoại di động.
Mong các anh chuyên VDK 89c51 giúp em với. mò mẫm code cả mấy tuần mà chưa được gì.
đây là code của em (đính kèm file mô phỏng),làm hoài mà chẳng được, nút nhấn thì hoạt động không độc lập được , nản quá:
#include "REGX51.H"
#define RW P0_1
#define RS P0_0
#define EN P0_2
#define DATA P2
#define SW0 P1_0
#define SW1 P1_1
#define SW2 P1_2
#define SW3 P1_3
#define SW4 P1_4
#define SW5 P1_5
#define SW6 P1_6
#define SW7 P1_7
void delay(int n);
void s_inst(void);
void s_data(void);
void s_latch(void);
void main(void)
{
RS=0;
RW=0;
EN=1;
delay(100000);
s_inst();
DATA=0X38; // chon phong chu
s_latch();
s_latch();
s_latch();
s_latch();
DATA=0X0F; // hien thi va nhap nhay chuot
s_latch();
DATA=0X10; // chon dong 1
s_latch();
DATA=0X0; // lam trang LCD
s_data();
s_latch();
while(1)
{
if(SW0==0)
{
DATA='H';
s_data();
s_latch();
while(1)
{
if(SW1==0)
{
DATA='E';
s_data();
s_latch();
while(1)
{
if(SW2==0)
{
DATA='L';
s_data();
s_latch();
while(1){
if(SW3==0){
DATA='P';
s_data();
s_latch();
while(1)
{
if(SW4==0)
{ s_inst();
DATA='M';
s_data();
s_latch();
while(1){ //Ch? khi nào chân P1.0 xu?ng m?c th?p
while(1)
{
if(SW5==0)
{ s_inst();
DATA='E';
s_data();
s_latch();
while(1){ //Ch? khi nào chân P1.0 xu?ng m?c th?p
if(SW6==0){
s_inst();
DATA=0XC0; //chon dong 2
s_latch();
DATA=0X0;
s_data();
s_latch(); //code ctr
while(1)
{
if(SW0==0)
{ s_inst();
DATA='0';
s_data();
s_latch();
while(1)
{
if(SW1==0)
{ s_inst();
DATA='1';
s_data();
s_latch();
while(1)
{
if(SW2==0)
{ s_inst();
DATA='2';
s_data();
s_latch();
while(1)
{
if(SW3==0)
{
s_inst();
DATA='3';
s_data();
s_latch();
s_inst();
DATA=0X80; // chon dong 1
s_latch();
while(1){ //Ch? khi nào chân P1.0 xu?ng m?c th?p
if(SW0==0){
DATA='k';
s_data();
s_latch(); //code ctr
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
} }}
while(1);
}
void delay(int n)
{
int i=0,j=0;
for(i=0;i<=n;i++)
for(j=0;j<=10;j++);
}
void s_inst(void)
{
RS=0;
RW=0;
}
void s_data(void)
{
RS=1;
RW=0;
}
void s_latch(void)
{
EN=1;
delay(1000);
EN=0;
delay(1000);
}
Comment