以下是个用PIC驱动1602的程序,你可以参考一下
***************************************************************************************************/ #include <pic.h> /**************************************************************************************************/ #define RS RA0 #define E RA1 #define RW RA2 #define LCD_DATA PORTB //数据端 #define LCD_DATATRIS TRISB #define INPUT 0XFF #define OUTPUT 0 #define BF lcddata_temp&0x80 /**************************************************************************************************/ void write_bytelcd (unsigned char lcddata,unsigned char r_s); //命令数据写函数 bit lcd_busy (void); //检测"忙" void lcd_init (void); //LCD初始化 void init_mcu (void); //MCU初始化 /**************************************************************************************************/ void write_bytelcd (unsigned char lcddata,unsigned char r_s) //命令数据写函数 { unsigned int i; for (i=1000;i!=0;i--) { if (lcd_busy()) { LCD_DATATRIS=OUTPUT; //设为数据发送 RS=r_s; //0=写指令, 1=写数据 RW=0; //写操作 E=1; LCD_DATA=lcddata; //送入数据 E=0; //写入HD44780(KS0066) break; } } LCD_DATATRIS=OUTPUT; //设为数据发送 } /***************************************************************************************************/ bit lcd_busy (void) //检测"忙" { unsigned char lcddata_temp; CLRWDT(); LCD_DATATRIS=INPUT; //设为数据接收 RS=0; //命令类型 RW=1; //读 E=1; lcddata_temp=LCD_DATA; E=0; if (BF) return (0); //忙标志 else return (1); //不忙 } /****************************************************************************************************/ void lcd_init (void) { write_bytelcd(0X38,0); //8位接口2行显示 5*7 write_bytelcd(8,0); //关显示,光标不闪烁 write_bytelcd(1,0); //清屏 write_bytelcd(0xC,0); //开显示 write_bytelcd(6,0); //光标右移,文字不动 } /****************************************************************************************************/ void init_mcu (void) { CLRWDT(); TRISA=0; TRISB=0; ADCON1=7; INTCON=0; OPTION=0X80; } /***************************************************************************************************/ void main (void) { unsigned int i; unsigned char count=40; PORTA=0; PORTB=0; for (i=10000;i!=0;i--) {init_mcu();} lcd_init(); while (1) { write_bytelcd(0x80,0); //DDRAM地址设置 do{ write_bytelcd(65,1); //写数据 } while (--count); count=40; //在DDRAM从地址0开始40个地址中连续写入数据"65" }
} |
|