Giúp jao tiep lcd 4 bit
mình đang viết chương trình đễ giao tiếp với lcd bằng 4 bit. nhung viết mải mà không chay. có ai jup minh với. code c:
#include<p18f4520.h>
#include<stdio.h>
#include<stdlib.h>
#include<delays.h>
#include<string.h>
#include<ADC.h>
#include<pwm.h>
#include<math.h>
#include <timers.h>
#pragma config WDT=OFF
#pragma config PWRT=OFF
#pragma config LVP=OFF
#pragma config PBADEN=OFF
#pragma config OSC=HS
//===============================
#define TOC_DO_DAT PORTAbits.RA0
#define TOC_DO_DO PORTAbits.RA1
#define MENU PORTEbits.RE0
#define UP PORTEbits.RE1
#define DOWN PORTEbits.RE2
#define EXIT PORTCbits.RC2
#define ENCODER_COUNT PORTCbits.RC0
#define PWM_PIC PORTCbits.RC1
#define SPEAKER PORTCbits.RC3
#define rs PORTBbits.RB0
#define wr PORTBbits.RB1
#define en PORTBbits.RB2
#define ON_OFF_LCD PORTBbits.RB3
#define data_lcd_7 PORTBbits.RB4
#define data_lcd_6 PORTBbits.RB5
#define data_lcd_5 PORTBbits.RB6
#define data_lcd_4 PORTBbits.RB7
//===============================
//dinh nghia cac chuoi
char chuoi1[16] = {"KIT THUC HANH! "};
char chuoi2[16] = {" PID SO VA VXL "};
char chuoi3[17] = {"DESIGNED BY HUNG"};
char chuoi4[16] = {" VERSION 1.0 "};
char chuoi5[16] = {" REBOOT.... "}; //HIEN THI QUA TRINH CAP NHAT LAI CAC THONG SO MAT DINH
char chuoi6[17] = {"CHE DO HOAT DONG"};
char chuoi7[7] = {"MENUAL"};
char chuoi8[5] = {"AUTO"};
char chuoi9[16] = {"NHAP BIEN PID "}; //CHI HIEN DONG NAY KHI DA CHON CHE DO AUTO
char chuoi10[4] = {"KP:"};
char chuoi11[4] = {"KI:"};
char chuoi12[4] = {"KD:"};
char chuoi13[9] = {"ENCODER:"};
char chuoi14[4] = {"X/V"};
char chuoi15[17] = {"GIA TRI MAT DINH"};
char chuoi16[4] = {"V/S"};
char chuoi17[4] = {"V0:"};
char chuoi18[4] = {"V1:"};
//=================================
int i;
int data;
//=================================
void khoi_dong_lcd(void);
void lay_key(void);
void sound(void);
void dieu_xung_2(int n);
void dieu_xung(int n);
void delay(void);
void delay_1s(void);
void delay_ms(unsigned int x_timer);
void beep(void);
void beep_ngan(void);
void beep_dai(void);
void dem_xung_hien_thi(void);
void ham_xuat_4_bit_cao( unsigned int data );
void ham_xuat_4_bit_thap( unsigned int data );
void ham_gui_lenhDK( unsigned int data );
void ham_gui_data( unsigned int data );
void wait_lcd (void);
//==================================
void main(void)
{
OpenPWM1(0xff);
SetDCPWM1(0);
ADCON1=0x09;//dung 5 chan adc dau tien
TRISA=0xFF;
TRISB=0x08;//00001000
TRISC=0x85;
TRISD=0;
TRISE=0XFF;
wr=0;
en=0;
sound();
Delay10KTCYx(25);
khoi_dong_lcd();
ham_gui_lenhDK(0x01);
ham_gui_lenhDK(0x80);
for(i=0;i<strlen(chuoi1);i++){
ham_gui_data(chuoi1[i]);
}
ham_gui_lenhDK(0xC0);
for(i=0;i<strlen(chuoi2);i++){
ham_gui_data(chuoi2[i]);
}
// sound();
// sound();
while(1)
{
ham_gui_lenhDK(0xC0);
for(i=0;i<strlen(chuoi3);i++){
ham_gui_data(chuoi3[i]);
sound();
}
}
}
//=======================================
void sound(void)
{
SPEAKER=1;
//delay_ms(1000);
delay_1s();
SPEAKER=0;
//delay_ms(1000);
delay_1s();
}
void delay_1s(void)
{
Delay10KTCYx(5);
}
void delay_ms(unsigned int x_timer)
{
int x_t;
for (x_t=0;x_t<x_timer;x_t++);
{
Delay10KTCYx(255);
}
}
//========================================
void delay(void)
{
int k;
for(k=0;k<2000;k++);
}
//========================================
void khoi_dong_lcd(void)
{
delay() ;
rs= 0;
wr = 0;
en= 0 ;
ham_xuat_4_bit_cao(0x28);
en= 1;
delay() ;
en= 0 ;
ham_gui_lenhDK(0x28);
ham_gui_lenhDK(0x0C);
ham_gui_lenhDK(0x06);
ham_gui_lenhDK(0x01);
ham_gui_lenhDK(0x02);
}
//==========dien dang dientuvietnam===========================
void ham_xuat_4_bit_thap( unsigned int data )
{
data_lcd_4 = (data & 0x01 );
data_lcd_5 = (data & 0x02 );
data_lcd_6 = (data & 0x04 );
data_lcd_7 = (data & 0x08 );
}
void ham_xuat_4_bit_cao( unsigned int data )
{
data_lcd_4 = (data & 0x10 );
data_lcd_5 = (data & 0x20 );
data_lcd_6 = (data & 0x40 );
data_lcd_7 = (data & 0x80 );
}
void ham_gui_lenhDK( unsigned int data )
{
wait_lcd ();
rs= 0;
wr = 0;
ham_xuat_4_bit_cao(data); // gui 4 bit cao
en= 1;
delay() ;
en= 0 ;
ham_xuat_4_bit_thap(data); // gui 4 bit thap
en= 1;
delay() ;
en = 0 ;
}
void ham_gui_data( unsigned int data )
{
wait_lcd ();
rs = 1 ;
wr = 0 ;
ham_xuat_4_bit_cao(data); // gui 4 bit cao
en= 1;
delay() ;
en= 0 ; // tao xung tren chan E
ham_xuat_4_bit_thap(data); //gui 4 bit thap
en= 1;
delay() ;
en= 0 ; // tao xung tren chan E
}
void wait_lcd (void)
{
short busy;
TRISB=0xF8;//11111000:CAU HINH DOC CHAN DATA
rs=0;
wr=1;
while(1)
{
en=1;
delay();
if (data_lcd_7==1){
if(busy==0) busy=1;
}else if(data_lcd_7==0){
if(busy==1) busy=0;
}
en=0;
delay();
en=1;
delay();
en=0;
sound();
if (busy==0){
goto no_busy;
}
}
no_busy:
wr=0;
TRISB=0x08;//00001000
}
//==========dien dang dientuvietnam===========================
phần jao tiếp lcd mình tham khao nhieu trang nhung no van khong chay. ai jup minh xem minh viet sai o dau khong
|