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 Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi nguyendinhvanTheo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
Cách đơn giản...-
Channel: Điện thanh
hôm nay, 00:04 -
-
bởi Ng.Phuong.5Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
Mấy con...-
Channel: Hướng dẫn sử dụng diễn đàn
Hôm qua, 22:44 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi mèomướpDạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
-
Channel: Điện tử công suất
Hôm qua, 19:02 -
-
Trả lời cho Sửa bộ nguồn DC 60V 45Abởi tuyennhanChủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
-
Channel: Điện tử công suất
Hôm qua, 15:43 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi tuyennhanLoa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
-
Channel: Điện thanh
Hôm qua, 15:28 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi mèomướpDạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
-
Channel: Điện thanh
Hôm qua, 11:44 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi viettinhNó không phải cái loa rời. Chả nhẽ đèo thêm 2 con loa tép ngoài thì kỳ lắm....
-
Channel: Điện thanh
Hôm qua, 09:45 -
-
Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.bởi mèomướpDạ chú mua thêm loa tép nối tiếp qua con tụ rồi mắc vào cùng loa trung là được ạ...
-
Channel: Điện thanh
07-01-2025, 19:53 -
-
Trả lời cho Tìm datasheet linh kiện điện tử.bởi mèomướpDạ cháu hỏi bạn cháu thì bạn ấy trả lời như thế này ạ. Cháu cũng hông bít có đúng hông nữa ạ
Linh kiện điện tử với mã "943BA" và "W58BAL" là một loại cầu chì tự động (circuit breaker) do TE Connectivity sản...-
Channel: Điện tử dành cho người mới bắt đầu
07-01-2025, 19:50 -
-
bởi viettinhChuyện là mình mới đập hộp con loa kéo Sony SRS-XV900. Do khu vực mình k có sẵn hàng để trải nghiệm thực tế nên chỉ tham khảo các kênh revew online.
Mua về sử dụng thì thấy hơi buồn về chất âm, Mở max k to bằng cái loa kéo china, bass...-
Channel: Điện thanh
07-01-2025, 17:18 -
Comment