Hướng dẫn Điều khiển LCD 16x02 dùng AVR cho người mới bắt đầu

codientu98

Học sinh trung cấp
#71
Đang gặp lỗi tương tự như bạn mặc dù đã thêm phần ds18b20_init(T,0,0,DS18B20_12BIT_RES) rồi. Có bạn nào giúp mình được cái này không? Nhân tiện mình làm thử LM35 cũng đã khai báo ADC nhưng không biết lệnh đọc cái analog đó.
nếu trên mô phỏng thì bạn kiểm tra lại thạch anh của con avr co trùng với thạch anh bạn dùng ko?(chuột phải vào con avr, tìm đến phần tần số), còn trên thực thế xem lại khai báo tần số thạch anh sử dụng đúng chưa.
 

hoangle56

Học sinh phổ thông
#72
nếu trên mô phỏng thì bạn kiểm tra lại thạch anh của con avr co trùng với thạch anh bạn dùng ko?(chuột phải vào con avr, tìm đến phần tần số), còn trên thực thế xem lại khai báo tần số thạch anh sử dụng đúng chưa.
Cám ơn bạn! Mình làm được rồi. Đúng là do lỗi khai báo tần số. (mình dùng mạch thật) khi nạp chip quên không puse bit cho con chip nên nó mặc định là 1MHz
 

anh_sang0001

Học sinh phổ thông
#73
Mã:
#include <mega16.h>
#include <delay.h>

// Alphanumeric LCD Module functions
#asm
  .equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

// Declare your global variables here
void lcd_putnum(float so, char x,char y)
{
long c,d;
long tp1,tp2;//tp3,tp4;
float temp1,temp2;

c= so/10;// lay hang chuc
d= so-10*c;// lay hang don vi
//if(so<0){temp2=so*-1;}

temp2=so;

temp1=temp2-(c*10+d);  // tach lay phan thap phan
tp1=(long)(temp1*10); // lay chu so thap phan thu nhat
tp2=(long)(temp1*100-tp1*10);  // chu so thap phan thu 2
//tp3 =(unsigned char)(temp1*1000-tp1*100-tp2*10);
//tp4 =(unsigned char)(temp1*10000-tp1*1000-tp2*100-tp3*10);  

lcd_gotoxy(x,y);

lcd_putchar(c+48);
lcd_putchar(d+48);
lcd_putsf(".");
lcd_putchar(tp1+48);
lcd_putchar(tp2+48);

}
void main(void)
{
// Declare your local variables here


PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;



// LCD module initialization
lcd_init(16);

while (1)
      {
      {
        
      
        //lcd_gotoxy(0,0);// Dua con tro ve goc, dong 0, cot 0
        //lcd_putsf("toi ngu kinh");
        //delay_ms(3000); // Tre 3 s
        //lcd_clear();
                    
      
        lcd_gotoxy(0,1);
        //lcd_putsf("nhiet do vi du");
        lcd_putnum(34.56,0,0);
        delay_ms(3000); // Tre 3 s
        lcd_clear();            
      
      
      /* lcd_gotoxy(0,1);// Dua con tro ve dong 1, cot 0
        //lcd_putsf("Wellcome you avr");
        lcd_putnum(34.56,0,0);
        delay_ms(3000); // Tre 3 s
        lcd_clear();
      
        /*lcd_gotoxy(0,0);
        lcd_putsf( "nhiet do");
        delay_ms(3000); // Tre 3 s  
        lcd_clear();      */
      
      /* lcd_gotoxy(1,1);// Dua con tro ve dong 1, cot 0
      
        // dua con tro ve dau dong thu 2    C0
      
        lcd_putnum(34.56,0,0);
        delay_ms(3000);
        lcd_clear();      */
      
        /*lcd_gotoxy(0,0); // Dua con tro ve dong 0 cot 0
      
        lcd_putsf("i am chu  "); // Hien thi dong chu
        delay_ms(3000); // Tre 3 s  
        lcd_gotoxy(0,1);// Dua con tro ve dong 1, cot 0
        lcd_putsf("vi dieu khien avr"); // Hien thi dong chu
        delay_ms(3000); // Tre 3 s  */
      
      
    };

      };
}
đấy anh xem giúp em
hehe cái hàm
lcd_putnum(float so, char x,char y)
thì char x, char y là vị trí của nó hiện thị lên LCD rồi còn đâu, bạn cứ điền nó là 0,0 thì nó cứ hiện một chỗ thôi làm sao mà đổi đi chỗ khác được
 

caonam

Học sinh phổ thông
#75
các bác giúp em viết đoan chương trình hiển thị lcd khi ấn mỗi phím(tăng tốc,giảm tốc) sử dụng atmega 16 với
 

huy2001qn1

Học sinh phổ thông
#76
anh viết code hiển thị chữ tiếng việt lên màn hình lcd khi dùng raspbian đc ko ạ ???
 

SÓI ĐƠN ĐỘC

Học sinh phổ thông
#79
đây ạ , nó bị lỗi như trên ak , e viết trên phần mền AVR studio 4 ak
#ifndef F_CPU
#define F_CPU 16000000UL // 16 MHz clock speed
#endif


#define D4 eS_PORTD4
#define D5 eS_PORTD5
#define D6 eS_PORTD6
#define D7 eS_PORTD7
#define RS eS_PORTC6
#define EN eS_PORTC7

#include <avr/io.h>
#include <util/delay.h>
#include "lcd.h"


#include <avr/io.h>

int main(void)
{
DDRD = 0xFF;
DDRC = 0xFF;
int i;
Lcd4_Init();
while(1)
{
Lcd4_Set_Cursor(1,1);
Lcd4_Write_String("electroSome LCD Hello World");
for(i=0;i<15;i++)
{
_delay_ms(500);
Lcd4_Shift_Left();
}
for(i=0;i<15;i++)
{
_delay_ms(500);
Lcd4_Shift_Right();
}
Lcd4_Clear();
Lcd4_Set_Cursor(2,1);
Lcd4_Write_Char('e');
Lcd4_Write_Char('S');
_delay_ms(2000);
}
}
 

Quảng cáo Google