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 Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietCuối năm bàn thêm chuyện to hơn chút, đấy là 2 vụ rơi đám 737 đời mới và trục trặc ở cả tá chiếc khác. Ngay cả những thứ tưởng như cao siêu sang xịn thật thì vẫn có thể gặp trường hợp oái oăm như thường. Từ hồi đó bqv đã thấy khó hiểu làm sao lại đẻ ra đám MCAS quái thai đến thế được. Rồi...
-
Channel: Điện tử công suất
Hôm qua, 19:40 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi bqvietBqv phải vào ngay để tán đồng với bài viết trên của bạn. Chỉ bàn về kỹ thuật, thiết bị máy móc của hãng dù danh tiếng vẫn có thể xảy ra những chuyện ngoài dự kiến, thậm chí những chuyện tưởng như không bao giờ có thể xảy ra....
-
Channel: Điện tử công suất
Hôm qua, 19:31 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80(ĐT chia sẻ MPPT này, với mong muốn rằng, chúng ta hãy tự tin lên, hãy tự hào là người VN, đừng quá tin vào người khác, đừng quá thần tượng họ, cần kiểm tra thực chứng chứ không nên cứ cho các thiết bị thông minh, cao siêu là hoàn hảo)
-
Channel: Điện tử công suất
Hôm qua, 12:08 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80Dưới đây là hình ảnh thực:
(bị phạm con tụ pi C17 (phía trên IC U3/DIP08: văng mất xác!)
(hàn vào vị trí C17 tụ pi 27nF ( giá trị phỏng đoán từ 10-100nF!), mạch vẫn chạy như trước khi cạy keo)...-
Channel: Điện tử công suất
Hôm qua, 12:05 -
-
Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?bởi dinhthuong80ĐT đã mạnh dạn mail thử cho hãng SRNE, họ trả lời là nó dùng nhiệt điện trở ở bên trong mạch như sau:
"Our street light controller product triggers high temperature protection based on internal thermistor sampling''
Thấy hơi lo lắng vì kiến thức điện tử...-
Channel: Điện tử công suất
Hôm qua, 11:39 -
-
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
21-01-2025, 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
21-01-2025, 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
21-01-2025, 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
21-01-2025, 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 -
Comment