سلام
برنامه ای که می خوام بنویسم یه برنامه اتصال LCD و KEYPAD به ای سی lpc2138 است. فقط قسمت lcd برنامه را گذاشتم ولی سخت افزاری کل قسمت ها را
ولی مشکلی که ایجاد شده ، هنگامی مقاومت های pull up را به کی پد وصل می کنم LCD کار نمی کنه ، ولت متر میزارم مقدار یک روی پایه ها میفته ولی توی شماتیک مثا اینه که پایه ها خاموش باشه، سیم اتصال پایه هایی که ظاهرا خاموش شده اند را قطع می کنم پایه ها روشن میشه و مقدار یک میده
وقتی پورت کی پد را تغییر می دم و اونا پورت یک می زارم مشکل حل میشه ولی نمی دفهمم چرا روی یه پورت این مشکل ایجاد میشه
اینم برنامه:
و این هم برنامه LCD
فایل برنامه
برنامه ای که می خوام بنویسم یه برنامه اتصال LCD و KEYPAD به ای سی lpc2138 است. فقط قسمت lcd برنامه را گذاشتم ولی سخت افزاری کل قسمت ها را
ولی مشکلی که ایجاد شده ، هنگامی مقاومت های pull up را به کی پد وصل می کنم LCD کار نمی کنه ، ولت متر میزارم مقدار یک روی پایه ها میفته ولی توی شماتیک مثا اینه که پایه ها خاموش باشه، سیم اتصال پایه هایی که ظاهرا خاموش شده اند را قطع می کنم پایه ها روشن میشه و مقدار یک میده
وقتی پورت کی پد را تغییر می دم و اونا پورت یک می زارم مشکل حل میشه ولی نمی دفهمم چرا روی یه پورت این مشکل ایجاد میشه
اینم برنامه:
کد:
[FONT=Yekan]#include <lpc21xx.h>[/FONT]#include "lcd.h" int main(void) { //IODIR0|=0x000000F; lcd_init(); lcd_clear(); lcd_gotoxy(1,1); lcd_print(" HELLO"); [FONT=Yekan]}[/FONT]
کد:
[FONT=Yekan]#include<lpc21xx.h>[/FONT]#define pin_rs 1<<24 /*lcd rs pin*/ #define pin_rw 1<<23 /*lcd rw pin*/ #define pin_en 1<<22 /*lcd en pin*/ #define pin_ctrl pin_rs|pin_rw|pin_en /*lcd control pins*/ #define lcd_d4 1<<10 /*lcd data pins D4,D5,D6,D7*/ #define lcd_d5 1<<11 #define lcd_d6 1<<12 #define lcd_d7 1<<13 #define lcd_data lcd_d4|lcd_d5|lcd_d6|lcd_d7 #define lcd_rs(x) ((x)?(IOSET1=pin_rs):(IOCLR1=pin_rs)); /*lcd_rs(x) if x=1 will set the lcd_rs pin will clear if x=0*/ #define lcd_rw(x) ((x)?(IOSET1=pin_rw):(IOCLR1=pin_rw)); #define lcd_en(x) ((x)?(IOSET1=pin_en):(IOCLR1=pin_en)); #define data_in ((IOPIN0>>10)&(0x0F)) /*direction of the data pins as input*/ #define data_out(x) IOCLR0=lcd_data; IOSET0=(x & 0x0F)<<10; /*direction of the data pins and control pins as output*/ #define lcd_all_dir_out IODIR0 |= lcd_data ; IODIR1 |= pin_ctrl; /*setting as output for both data and control pins*/ #define lcd_dir_data_out IODIR0 |= lcd_data #define lcd_dir_data_in IODIR0 &= ~(lcd_data) #define delay_2n 4 static void delay(int); static unsigned char busy_wait(); static void delay(int cnt) { cnt <<= delay_2n; while(cnt--); } static unsigned char busy_wait() { unsigned char status; do { lcd_dir_data_in; delay(10); lcd_rs(0); delay(10); lcd_rw(1); delay(10); lcd_en(1); delay(10); status= (data_in<<4)&(0xF0); lcd_en(0); delay(10); lcd_en(1); delay(10); status |=data_in; lcd_en(0); delay(10); lcd_dir_data_out; delay(10); }while(status & 0x80); return (status); } void lcd_write_4bit(unsigned char c) { lcd_rw(0); delay(10); lcd_en(1); delay(10); data_out(c & 0x0F); delay(10); lcd_en(0); delay(10); } void lcd_cmd_write(unsigned char c) { busy_wait(); lcd_rs(0); delay(10); lcd_write_4bit(c>>4); lcd_write_4bit(c); } static void lcd_data_write(unsigned char c) { busy_wait(); lcd_rs(1); delay(10); lcd_write_4bit(c>>4); lcd_write_4bit(c); } void lcd_putchar(char c) { lcd_data_write(c); } void lcd_init() { lcd_all_dir_out; delay(10); lcd_rs(0); lcd_write_4bit(0x3); delay(10); lcd_write_4bit(0x3); delay(10); lcd_write_4bit(0x3); lcd_write_4bit(0x2); lcd_cmd_write(0x28); lcd_cmd_write(0x0C); lcd_cmd_write(0x06); } int lcd_gotoxy( unsigned int x, unsigned int y) { int retval = 0; if( (x > 1) && (y > 15) ) { retval = -1; } else { if( x == 0 ) { lcd_cmd_write( 0x80 + y ); /* command - position cursor at 0x00 (0x80 + 0x00 ) */ } else if( x==1 ){ lcd_cmd_write( 0xC0 + y ); /* command - position cursor at 0x40 (0x80 + 0x00 ) */ } } return retval; } void lcd_clear() { lcd_cmd_write(0x01); lcd_gotoxy(0,0); } void lcd_print(unsigned char const *str) { while(*str) { lcd_putchar(*str++); } [FONT=Yekan]}[/FONT]
فایل برنامه
دیدگاه