Thắc mắc về LCD và 8051

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Mọi người giúp mình với, chả là đang làm bài tấp lớn có liên quan tới LCD mà mình tính làm bằng C với con 8052 này mà không hiểu sao nó không mô phỏng không chạy :-( Dù đã thử nhiều cách, tham khảo nhiều code.. Xin cám ơn mọi người trước
(Code bằng ASM thì chạy mô phỏng bình thường :gach)
Code:
https://www.dropbox.com/s/9pasng6zy1ut349/Bai%20tap%20lon.rar
 

gochit

Cố Vấn CLB
Code:
sfr LCDData = 0x80;
 
sfr LCDAddr = 0xA0;
 
void LCDPut(unsigned char rs_status, unsigned char d)
 
{
 
    //WaitBusy();
 
    RS = 0;
 
  if(rs_status) RS = 1;
 
  delay_us(20);
 
  EN = 0;
 
  LCDAddr = 0x80;
 
  LCDData = d;
 
 
 
  delay_us(20);
 
  EN = 1;
 
  delay_us(20);
 
  EN = 0;
 
 
 
    delay_us(20);
 
    RW = 0;
 
    delay_us(20);
 
    RW = 1;
 
    //LCDAddr = 0x00;
 
}
Theo mình thấy thì không có lệnh nào để xuất ra LCD, bạn có thể dùng xdata unsigned char LCD _at_ < địa chỉ LCD để truy cập bộ nhớ ngoài >
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Code:
sfr LCDData = 0x80;
 
sfr LCDAddr = 0xA0;
 
void LCDPut(unsigned char rs_status, unsigned char d)
 
{
 
    //WaitBusy();
 
    RS = 0;
 
  if(rs_status) RS = 1;
 
  delay_us(20);
 
  EN = 0;
 
  LCDAddr = 0x80;
 
  LCDData = d;
 
 
 
  delay_us(20);
 
  EN = 1;
 
  delay_us(20);
 
  EN = 0;
 
 
 
    delay_us(20);
 
    RW = 0;
 
    delay_us(20);
 
    RW = 1;
 
    //LCDAddr = 0x00;
 
}
Theo mình thấy thì không có lệnh nào để xuất ra LCD, bạn có thể dùng xdata unsigned char LCD _at_ < địa chỉ LCD để truy cập bộ nhớ ngoài >
Mình tưởng đâu là xuất P0 (0x80) là nó ra luôn rồi chứ gochit..
Vậy bây giờ mình thay sfr LCDData =0x80 thành xdata unsigned char LCD _at_ 0x8000 hả bạn? Nó toàn báo tràn hay sao không à
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Mình khai báo thế này
Code:
extern unsigned char xdata *LCDData;
rồi ở trong hàm LCDPut mình thay lại chỗ khai báo đó thành
Code:
LCDData = (unsigned char xdata *)0x8000;
  *(LCDData) = d;
LCDAddr = 0x80;
mà sao nó vẫn không chạy :(
 

gochit

Cố Vấn CLB
Code:
#include <REGX51.H>
 
xdata unsigned char LCD _at_ 0x8000;
void send(unsigned char Data)
{
    int i;
    LCD=Data;
    P3_4=0;
    P3_4=1;
    for (i=0;i<1000;i++){};
}
int main()
{
    P3_5=0;
    send(0x38);
    send(0x0c);
    send(0x06);
    send(0x01);
    P3_5=1;
    send('a');
    send('b');
    send('c');
    while (1){};
}
Mình chạy bình thường mà :D
 

mafiaWolf

Chủ tịch Hội phụ nữ PIF
Sau khi tiếp thu các "THÀNH TỰU VÀ KHOA HỌC CÔNG NGHỆ TIÊN TIẾN" với lối code vô cùng "ĐƠN GIẢN NHƯ GOOGLE" và chuyển dòng "xdata unsigned char LCDData _at_ 0x8000;" vào chung với LCD.c thì mình đã làm nó chạy được rồi :1cool_byebye:
Cám ơn nhiều nha..hjhj..Cơ mà thắc mắc là nó không chốt con LE ta :2cool_after_boom:
 
Top