bác nào thử viết hộ em bài đếm xung hiển thị ra LCD làm mẫu cho em với.viết bằng C ấy.em không biết tại sao con số không xuất ra được
Thông báo
Collapse
No announcement yet.
bác nào giúp em chỗ LCd với
Collapse
X
-
Mấy bác coi giúp cái code này sai ở đâu mà không chạy được với.
//D4 - P1.4
//D5 - P1.5
//D6 - P1.6
//D7 - P1.7
//EN - P1.3
//RS - P1.2
#include<reg51.h>
#define lcd_port P1
//LCD Registers addresses
#define LCD_EN 0x08
#define LCD_RS 0x04
void delayus(unsigned long int t)
{
unsigned long int i;
for(i=0;i<t;i++);
}
void delayms( unsigned int ms )
{ unsigned int i,j;
for (i=0;i<ms;i++)
for (j=0;j<120;j++){};
}
void lcd_putcmd (char cmd)
{
lcd_port = (cmd & 0xF0)|LCD_EN;
lcd_port = (cmd & 0xF0);
lcd_port = ((cmd >> 4) & 0xF0)|LCD_EN;
lcd_port = ((cmd >> 4) & 0xF0);
delayus(200);
delayus(200);
}
void lcd_putchar(unsigned char dat)
{
lcd_port = ((dat & 0xF0)|LCD_EN|LCD_RS);
lcd_port = ((dat & 0xF0)|LCD_RS);
lcd_port = (((dat >> 4) & 0xF0)|LCD_EN|LCD_RS);
lcd_port = (((dat >> 4) & 0xF0)|LCD_RS);
delayus(200);
delayus(200);
}
void lcd_reset()
{
lcd_port = 0xFF;
delayms(20);
lcd_port = 0x03+LCD_EN;
lcd_port = 0x03;
delayms(10);
lcd_port = 0x03+LCD_EN;
lcd_port = 0x03;
delayms(1);
lcd_port = 0x03+LCD_EN;
lcd_port = 0x03;
delayms(1);
lcd_port = 0x02+LCD_EN;
lcd_port = 0x02;
delayms(1);
}
void lcd_init ()
{
lcd_reset(); // Call LCD reset
lcd_putcmd(0x28); // 4-bit mode - 2 line - 5x7 font.
lcd_putcmd(0x0C); // Display no cursor - no blink.
lcd_putcmd(0x06); // Automatic Increment - No Display shift.
lcd_putcmd(0x80); // Address DDRAM with 0 offset 80h.
}
void lcd_putsf(char *s)
{
while(*s);
{
lcd_putchar(*s);
s++;
}
}
void main(void)
{
delayms(30) ;
lcd_init();
while(1)
{
lcd_putcmd(0x01) ;
lcd_putcmd(0x80);
lcd_putchar('s') ;
}
}
Comment
-
Chú em có hiểu 2 cái định nghĩa này là gì không ?
#define LCD_EN 0x08
#define LCD_RS 0x04
Sai bét hết rồi
Để anh sửa lại cho chu em này !
Tất cả các chân của LCD đều nối trên P1 cho nó gọn:
RS - P1_0
RW - GND
EN - P1_2
D4..7 - P1_4..P1_7
PHP Code:
#define lcd_port P1
//LCD Registers addresses
#define LCD_EN 0x04
#define LCD_RS 0x01
void delayus(unsigned long int t)
{
unsigned long int i;
for(i=0;i<t;i++);
}
void delayms( unsigned int ms )
{
unsigned int i,j;
for (i=0;i<ms;i++)
for (j=0;j<120;j++){};
}
void lcd_putcmd (char cmd)
{
delayms(2);
lcd_port = (cmd & 0xF0)|LCD_EN;
lcd_port = (cmd & 0xF0);
delayms(1);
lcd_port = ((cmd << 4)&0xF0)|LCD_EN;
lcd_port = ((cmd << 4)&0xF0);
delayus(200);
delayus(200);
}
void lcd_putchar (unsigned char dat)
{
delayms(2);
lcd_port = ((dat & 0xF0)|LCD_EN|LCD_RS);
lcd_port = ((dat & 0xF0)|LCD_RS);
delayms(1);
lcd_port = (((dat << 4)&0xF0)|LCD_EN|LCD_RS);
lcd_port = (((dat << 4)&0xF0)|LCD_RS);
delayus(200);
delayus(200);
}
void lcd_reset()
{
lcd_port = 0xFF;
delayms(20);
lcd_port = 0x00+LCD_EN;
lcd_port = 0x00;
delayms(1);
lcd_port = 0x20+LCD_EN;
lcd_port = 0x00;
delayms(1);
lcd_port = 0x20+LCD_EN;
lcd_port = 0x00;
delayms(1);
lcd_port = 0x20+LCD_EN;
lcd_port = 0x00;
delayms(1);
}
void lcd_init ()
{
lcd_reset(); // Call LCD reset
lcd_putcmd(0x28); // 4-bit mode - 2 line - 5x7 font.
lcd_putcmd(0x0C); // Display no cursor - no blink.
lcd_putcmd(0x06); // Automatic Increment - No Display shift.
lcd_putcmd(0x80); // Address DDRAM with 0 offset 80h. */
}
void lcd_putsf(char *s)
{
while(*s);
{
lcd_putchar(*s);
s++;
}
}
void main(void)
{
lcd_init();
lcd_putchar('s') ;
while(1)
{
}
}
Comment
-
Nguyên văn bởi Multi System Xem bài viếtChú em có hiểu 2 cái định nghĩa này là gì không ?
#define LCD_EN 0x08
#define LCD_RS 0x04
Sai bét hết rồi
Để anh sửa lại cho chu em này !
Tất cả các chân của LCD đều nối trên P1 cho nó gọn:
RS - P1_0
RW - GND
EN - P1_2
D4..7 - P1_4..P1_7
PHP Code:
#define lcd_port P1
//LCD Registers addresses
#define LCD_EN 0x04
#define LCD_RS 0x01
void delayus(unsigned long int t)
{
unsigned long int i;
for(i=0;i<t;i++);
}
void delayms( unsigned int ms )
{
unsigned int i,j;
for (i=0;i<ms;i++)
for (j=0;j<120;j++){};
}
void lcd_putcmd (char cmd)
{
delayms(2);
lcd_port = (cmd & 0xF0)|LCD_EN;
lcd_port = (cmd & 0xF0);
delayms(1);
lcd_port = ((cmd << 4)&0xF0)|LCD_EN;
lcd_port = ((cmd << 4)&0xF0);
delayus(200);
delayus(200);
}
void lcd_putchar (unsigned char dat)
{
delayms(2);
lcd_port = ((dat & 0xF0)|LCD_EN|LCD_RS);
lcd_port = ((dat & 0xF0)|LCD_RS);
delayms(1);
lcd_port = (((dat << 4)&0xF0)|LCD_EN|LCD_RS);
lcd_port = (((dat << 4)&0xF0)|LCD_RS);
delayus(200);
delayus(200);
}
void lcd_reset()
{
lcd_port = 0xFF;
delayms(20);
lcd_port = 0x00+LCD_EN;
lcd_port = 0x00;
delayms(1);
lcd_port = 0x20+LCD_EN;
lcd_port = 0x00;
delayms(1);
lcd_port = 0x20+LCD_EN;
lcd_port = 0x00;
delayms(1);
lcd_port = 0x20+LCD_EN;
lcd_port = 0x00;
delayms(1);
}
void lcd_init ()
{
lcd_reset(); // Call LCD reset
lcd_putcmd(0x28); // 4-bit mode - 2 line - 5x7 font.
lcd_putcmd(0x0C); // Display no cursor - no blink.
lcd_putcmd(0x06); // Automatic Increment - No Display shift.
lcd_putcmd(0x80); // Address DDRAM with 0 offset 80h. */
}
void lcd_putsf(char *s)
{
while(*s);
{
lcd_putchar(*s);
s++;
}
}
void main(void)
{
lcd_init();
lcd_putchar('s') ;
while(1)
{
}
}
lcd_port = (cmd & 0xF0);
lcd_port = ((cmd << 4)&0xF0)|LCD_EN;
lcd_port = ((cmd << 4)&0xF0);
lcd_port = ((dat & 0xF0)|LCD_EN|LCD_RS);
lcd_port = ((dat & 0xF0)|LCD_RS);
lcd_port = (((dat << 4)&0xF0)|LCD_EN|LCD_RS);
lcd_port = (((dat << 4)&0xF0)|LCD_RS);
Mấy câu lệnh trên là sao vậy?giải thích giùm em với!
Với lại trong code có hàm lcd_reset() để làm gì vậy?Bki4u-University of Technology!
Comment
-
Vì đây là giao tiếp 4bit cho nên không thể gửi 1byte (8bit) cùng 1 lúc được, do đó phải gửi 2 lần, mỗi lần 4bit (1 Nibble).
lần 1 lấy High Nibble, và lần 2 lấy Low Nibble. Cuối cùng sẽ được 1 byte.
Mỗi lần gửi lên LCD cần phải có 1 xung cao xuống thâp từ chấn E của LCD.
Bạn nên tham khảo lại cách hoạt động của LCD.
Comment
-
Nguyên văn bởi Multi System Xem bài viếtVì đây là giao tiếp 4bit cho nên không thể gửi 1byte (8bit) cùng 1 lúc được, do đó phải gửi 2 lần, mỗi lần 4bit (1 Nibble).
lần 1 lấy High Nibble, và lần 2 lấy Low Nibble. Cuối cùng sẽ được 1 byte.
Mỗi lần gửi lên LCD cần phải có 1 xung cao xuống thâp từ chấn E của LCD.
Bạn nên tham khảo lại cách hoạt động của LCD.
em nhập : cmd=0x28,dat='s' thì nó qua 4 câu lệnh cho mỗi trường hợp:
lcd_port = (cmd & 0xF0)|LCD_EN;
lcd_port = (cmd & 0xF0);
lcd_port = ((cmd << 4)&0xF0)|LCD_EN;
lcd_port = ((cmd << 4)&0xF0);
lcd_port = ((dat & 0xF0)|LCD_EN|LCD_RS);
lcd_port = ((dat & 0xF0)|LCD_RS);
lcd_port = (((dat << 4)&0xF0)|LCD_EN|LCD_RS);
lcd_port = (((dat << 4)&0xF0)|LCD_RS);
lúc này lcd_port bằng bao nhiêu và LCD_EN tạo xung như thế nào??
Ý em là anh có thể debug giùm em được không ạ(em thử rồi mà vần ko hiểu).
Cảm ơn mấy anh nhiều.Bki4u-University of Technology!
Comment
Bài viết mới nhất
Collapse
-
Trả lời cho Tiếng Anh cho người Việtbởi tuyennhanCái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .-
Channel: Tâm tình dân kỹ thuật
hôm nay, 07:44 -
-
Trả lời cho Tiếng Anh cho người Việtbởi vi van phamCám ơn những lời chúc tốt đẹp của em.
Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.
Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....-
Channel: Tâm tình dân kỹ thuật
hôm nay, 02:00 -
-
Trả lời cho Tiếng Anh cho người Việtbởi nhathung1101Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.
Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.
Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 22:18 -
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.
Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 14:51 -
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.
Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 14:39 -
-
Trả lời cho Tiếng Anh cho người Việtbởi dinhthuong80Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.
Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 14:28 -
-
Trả lời cho Tiếng Anh cho người Việtbởi bqvietĐúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
-
Channel: Tâm tình dân kỹ thuật
21-02-2025, 20:26 -
-
Trả lời cho Tiếng Anh cho người Việtbởi mèomướpDạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
-
Channel: Tâm tình dân kỹ thuật
21-02-2025, 12:32 -
-
Trả lời cho Tiếng Anh cho người Việtbởi vi van phamNhững lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).
Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...-
Channel: Tâm tình dân kỹ thuật
20-02-2025, 21:31 -
-
Trả lời cho Hỏi về cách hàn linh kiện ( giúp tớ với )bởi bqvietThiết nghĩ thi thoảng bác lên đây chia xẻ ít kinh nghiệm cũng vui rồi. Còn chuyện con người sinh lão bệnh tử là thường, sống cùng với quy luật đó thôi. Bqv nhớ trước đây bác từng kể về chuyện rang chì ô-xít bằng chảo để phục hồi bình điện, đấy cũng là thành quả đáng nể phục ở thời kỳ thiếu thốn đó.20-02-2025, 17:22
Comment