//对需要用到的头文件与管脚进行定义说明 #include "system.h" #include <unistd.h> #include "altera_avalon_pio_regs.h" #define LCD_DATA *(unsigned int *)PIO_LCD12864_DATA_BASE #define LCD_DATA_DIR *(unsigned int *)(PIO_LCD12864_DATA_BASE+4) #define LCD_RSRW *(unsigned int *)PIO_LCD12864_RSRW_BASE #define LCD_EN *(unsigned int *)PIO_LCD12864_EN_BASE #define LCD_DATA_IN 0 #define LCD_DATA_OUT 0xFF
//判忙函数 void busyloop() { unsigned int busy=0; LCD_DATA=0xff; do{ LCD_RSRW=0x01; //使数据口为输入状态(读出忙标志(BF)) usleep(50); //延时50ms LCD_EN=0x1; //使lcd_en为1 ,为数据输入作准备(高 DR→I/O缓冲) busy=LCD_DATA; //读取忙信号 usleep(50); LCD_EN=0; //产生读取数据的有效电平 } while(busy>0x7f); //假如状态位为忙,继续判忙 } //写控制字 void write_command(char cmd) { busyloop(); //判忙函数 LCD_RSRW=0; //写控制字的状态 LCD_EN=0x1; //为有效电平做准备 LCD_DATA_DIR=LCD_DATA_OUT; //使数据口为输出状态 LCD_DATA=cmd; //输出命令到数据口 usleep(100); //延时100ms LCD_EN=0; //产生有效电平 }
//初始化函数 void initialization() { IOWR(PIO_LCD12864_RESET_BASE,0,1); //LCD_DATA=0; write_command(0x30);//功能设定 usleep(100); write_command(0x06);起始点设定光标右移 usleep(37); write_command(0x01);//清屏 usleep(100); write_command(0x0c);//显示状态开关 usleep(100); write_command(0x02);//地址归零 }
//写数据 void write_data(char data) { busyloop(); //判忙函数 LCD_RSRW=0x2; //写控制字的状态 LCD_EN=0x01; //为有效电平做准备 usleep(50); //延时50ms LCD_DATA_DIR=LCD_DATA_OUT; //使数据口为输出状 LCD_DATA=data; //输出命令到数据口 usleep(100); //延时100ms LCD_EN=0; } //产生有效电平 //写字符串子程序:其中addr是地址,str是字符的地址 void write_string(char addr,char* str) { write_command(addr); //写显示地址 do{ write_data(*str); //写显示数据 str++; } while(*str!='\0'); //判断是否写完 }
//写中文字串 //写中文字串: 其中addr是地址,str是字符的地址,i是中文的字数 void write_chstring(char addr,int* str,int i) { int chstr; int hstr=0,lstr=0; write_command(addr); //写显示地址 do{ chstr=*str; lstr=chstr&0xff; hstr=(chstr>>8)&0xff; write_data(hstr); //写显示高位数据 write_data(lstr); //写显示低位数据 str++; //数据地址加一 i--; //数据量减一 } while(i!=0); //判断是否写完 }
int main() {
int hanzi[]={'汉','字'}; char *a="abcdefg";
initialization(); write_command(0x80);//lcd第一行地址为0x80-0x87,第三行为0x088-0x08f,第二行为0x90-0x97,第四行0x98-0x9f write_chstring(0x80,hanzi,2); write_string(0x88,a); }
Tw35S2DZ.rar (3.25 KB)
|