Hướng dẫn Bài 5 hiển thị text LCD

nam_9x

Học sinh trung cấp
#31
em vẫn thích viết tiếng việt và cho chạy chữ trên Atmega 16.Anh viết trên mega 8 cũng không sao, Nhưng Em đọc code của anh hơi khó hiểu.anh có thể giải thích chi tiết hơn không ạ !
 

chúng

Kỹ sư
#32
em vẫn thích viết tiếng việt và cho chạy chữ trên Atmega 16.Anh viết trên mega 8 cũng không sao, Nhưng Em đọc code của anh hơi khó hiểu.anh có thể giải thích chi tiết hơn không ạ !
1 kí tự có 7 giá trị ứng với 7 hàng của font 5x7, viết các kí tự vào CGRAM mỗi kí tự nằm trong 8 ô CGRAM, kí tự thứ 0 nằm trong vùng từ 0x40 tới 0x47, kí tự thứ 1 nằm trong vùng từ 0x48 tới 0x4f,..... cứ thế bạn viết và CGRAM cho đủ 8 kí tự bạn cần. Gọi kí tự ra thì lcd_putchar(x) với x là giá trị từ 0 tới 7
 

Nguyen_Huynh

Học sinh trung cấp
#35
a ơi codevision của em k biên dịch được file hex n báo lỗi như này :Encrypted library error: D:\SAVE\cvavr2\lib\alcd.lib(15): #error directive: alcd.lib requires CodeVisionAVR V2.05.1 or later sửa thế nào ak.em dùng bản v2.05.03 ak
 

mta_cdt

Super Moderator
Thành viên BQT
#36
a ơi codevision của em k biên dịch được file hex n báo lỗi như này :Encrypted library error: D:\SAVE\cvavr2\lib\alcd.lib(15): #error directive: alcd.lib requires CodeVisionAVR V2.05.1 or later sửa thế nào ak.em dùng bản v2.05.03 ak
Cái này nó báo lỗi thư viện file bạn chắc coppy ở đâu về mà nó chỉ cho dịch từ bản 2.05.1 trở về trước thôi. Bạn tạo cái mới xem
 

Nguyen_Huynh

Học sinh trung cấp
#37
File em down của a mà.mà em gõ lại từ đầu n cũng thế.có lẽ n chỉ có vấn đề về thư viện của lcd
 

trongfu11

Học sinh phổ thông
#38
Bài trước mình đã hiển thị được trên led 7 seg nhưng nhược điểm của led 7 seg là chỉ hiển thị được số, phần này mình xin giới thiệu hiển thị trên text LCD mình lấy ví dụ lcd16x2 còn những LCD khác như 2x20, 4x20 ... cũng không khác gì.
LCD có các thanh ghi là
- IR: thanh ghi lệnh của LCD, người dùng gửi lệnh đến LCD bằng cách set RS (chân số 4) bằng 0, chân đọc ghi RW=0, EN cho 1 xung từ cao xuống thấp sẽ đưa 1 lệnh vào LCD
- thanh ghi DR chứa dữ liệu 8 bit lưu vào DDRAM hoặc CGRAM
DDRAM Đây là vùng RAM dùng để hiển thị, nghĩa là ứng với một địa chỉ của RAM là một ô kí tự trên màn hình.
CGROM đây là bảng font để hiển thị LCD, người dùng truy cập bằng cách gửi mã ascii của ký tự tương ứng thì LCD sẽ hiển thị ký tự đó.
CGRAM vùng này chứa ký tự do người ùng tự định nghĩa. Phần này mình xin ko giới thiệu
video hướng dẫn giao tiếp với LCD dùng codevison avr​
code và file mô phỏng xin download file đính kèm bên dưới.​
adasdasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssdasdas sadddddddddddd dddddddddddddddddddd
 

quan05

Học sinh phổ thông
#39
cac anh giúp e cái bài hiển thị nhiệt độ này với e chưa thể hiện thì lên LCD được ko biết là cái lệnh hiển thị LCD e viết vậy có đúng ko? có cả mạch e thiết kế,led dùng để cảnh báo
Mã:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 3/28/2014
Author  : NeVaDa
Company :
Comments:


Chip type              : ATmega8
Program type            : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model            : Small
External RAM size      : 0
Data Stack size        : 256
*****************************************************/

#include <mega8.h>

#include <delay.h>

// Alphanumeric LCD Module functions
#include <alcd.h>
#include <stdio.h>
#define ADC_VREF_TYPE 0xC0
#define LED_green PB.0
#define LED_red PB.1
#define LED_yellow PB.2

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
// Declare your global variables here

void main(void)
{
unsigned char nhietDo;
int adc_val;
unsigned char thongBao[3]; 
// Declare your local variables here

// Input/Output Ports initialization
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 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: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

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

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

// USART initialization
// USART disabled
UCSRB=0x00;

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

// ADC initialization
// ADC Clock frequency: 250.000 kHz
// ADC Voltage Reference: Int., cap. on AREF
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x86;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTD Bit 0
// RD - PORTD Bit 1
// EN - PORTD Bit 2
// D4 - PORTD Bit 4
// D5 - PORTD Bit 5
// D6 - PORTD Bit 6
// D7 - PORTD Bit 7
// Characters/line: 16
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,1);
lcd_puts("DAI DUONG");
delay_ms(2000);
//thongBao=0x21;     
while (1)
      {
      adc_val=read_adc(0);
      nhietDo=adc_val*0,25;
      lcd_gotoxy(0,1);
      lcd_putsf("Nhiet do la:");
      lcd_putchar(nhietDo+48);
      delay_ms(1000);
            // Place your code here
      if(0<=nhietDo<=10)
      {
      PINB.2= 1;
      }
      if(10<nhietDo<=35)
      {
      PINB.1=1;
      }
      if(35<nhietDo)
      {
      PINB.0=1;
      }
}
}
 

Đính kèm

lehoang4567

Học sinh phổ thông
#40
có bạn nào viết trên AVR Studio không? có thể hướng dẫn thêm được không...
Xin cám ơn...
 

Quảng cáo Google