热度 24
2012-11-24 20:40
1188 次阅读|
4 个评论
,这里没有介绍12864字符型液晶的使用,我就卖弄一下吧。 我用的是一款字符型的,引脚排序如下,我用单片机的PC口作为总线,显示字符还是可以的,完全可以显出唐诗宋词什么的。。。淘宝上卖屏的一般也会提供例程,但基本都是有些小错误的,毕竟人家只是卖屏的。 看看我的例程吧,屏的引脚排序相同的话应该可以套用。 对屏的初始化就不介绍了,这个每个人引脚配置不一样,所以会有细微区别。 /* ********************************************************************************************************* ** 函数名称 :Int_char() ** 函数功能 :字符转换程序 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2009年11月27日13:58:33 ********************************************************************************************************* */ void Int_char(int data) { if(data/1000) { Result =data/1000+'0'; Result =data/100%10+'0'; Result =data/10%10+'0'; Result =data%10+'0'; Result =0; } else if(data/100) { Result =data/100+'0'; Result =data/10%10+'0'; Result =data%10+'0'; Result =0; Result =0; } else if(data/10) { Result =data/10%10+'0'; Result =data%10+'0'; Result =0; Result =0; Result =0; } else { Result =data%10+'0'; Result =0; Result =0; Result =0; Result =0; } } /* ********************************************************************************************************* ** 函数名称 :chek_busy() ** 函数功能 :测试12864是否忙 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2012年3月22日13:58:33 ********************************************************************************************************* */ void chek_busy(void) { unsigned char temp1=0x01; //状态信息(判断是否忙) while(temp1) { PA4=0; //245的E脚使能 PA5=0; //245的DIR脚使能,从12864读取 RS=0; // RS = 0; RW=1; // RW = 1; E=0; // E = 0; delay_nus(1); E=1; DDRC=0x00; PORTC=0xff; delay_nus(1); temp1=PINC; temp1=temp10x80; delay_nus(100); E=0; RS=0; // RS = 0; RW=1; // RW = 1; PA4=1; //245的高阻 } } /* ********************************************************************************************************* ** 函数名称 :chek_busy() ** 函数功能 :测试是否有按键 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2012年3月22日13:58:33 ********************************************************************************************************* */ void chek_anj(void) { unsigned char temp; PA4=1; //245的E脚不使能 PINC=0x00; PB4=0; DDRC=0x00; PORTC=0xff; delay_nus(10); temp=PINC; if(temp==0x7f) { if(comon0x00) comon--; comon1=0x01; } else if(temp==0xbf) { if(comon0x10) comon++; comon1=0x01; } else { comon1=0x00; } PB4=1; } /* ********************************************************************************************************* ** 函数名称 :write_code() ** 函数功能 :写命令子程序 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2012年3月22日13:58:33 ********************************************************************************************************* */ void write_code(unsigned char cmd) { chek_busy(); PA4=0; //245的E脚使能 PA5=1; //245的DIR脚使能,写12864 DDRC=0xff; delay_nus(1); RS=0; // RS = 0; RW=0; // RW = 0; E=0; PORTC=cmd; //写入命令 delay_nus(1); E=1; delay_nus(50); E=0; RS=0; // RS = 0; RW=0; // RW = 1; PA4=1; //245的高阻 } /* ********************************************************************************************************* ** 函数名称 :write_data() ** 函数功能 :写命令子程序 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2012年3月22日13:58:33 ********************************************************************************************************* */ void write_data(unsigned char dat) { chek_busy(); PA4=0; //245的E脚使能 PA5=1; //245的DIR脚使能,写12864 RS=1; // RS = 1; RW=0; // RW = 0; E=0; DDRC=0xff; delay_nus(1); PORTC=dat; //写入命令 E=1; delay_nus(50); E=0; RS=0; // RS = 0; RW=0; // RW = 0; PA4=1; //245的高阻 } /* ********************************************************************************************************* ** 函数名称 :Init12864() ** 函数功能 :初始化12864 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2009年11月28日13:24:56 ********************************************************************************************************* */ void Init12864(void) { write_code(0x01); //0000,0001 清DDRAM delay_nms(2); write_code(0x30); //功能设置,一次送8位数据,基本指令集 delay_nms(2); write_code(0x0c); //0000,1100 整体显示,游标off,游标位置off delay_nms(2); write_code(0x01); //0000,0001 清DDRAM delay_nms(2); write_code(0x02); //0000,0010 DDRAM地址归位 delay_nms(2); write_code(0x80); //1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC delay_nms(2); } /* ********************************************************************************************************* ** 函数名称 :set_xy() ** 函数功能 :设置显示位置 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2009年11月28日13:24:56 ********************************************************************************************************* */ void set_xy(unsigned char xpos,unsigned char ypos) { unsigned char byAddress ; switch(ypos) { case 1: byAddress=(0X80|xpos);break; case 2: byAddress=(0X90|xpos);break; case 3: byAddress=(0X88|xpos);break; case 4: byAddress=(0X98|xpos);break; default:break; } write_code(byAddress); } /* ********************************************************************************************************* ** 函数名称 :print() ** 函数功能 :在指定位置显示内容 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2009年11月28日13:24:56 ********************************************************************************************************* */ void print(unsigned char x,unsigned char y,char* str) { unsigned char lcd_temp; set_xy(x,y); lcd_temp=*str; while(lcd_temp != 0x00) { write_data(lcd_temp); lcd_temp=*(++str); } } /* ********************************************************************************************************* ** 函数名称 :printstr() ** 函数功能 :写字符串子程序 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2009年11月28日13:24:56 ********************************************************************************************************* */ void printstr( unsigned char x, unsigned char y, unsigned char *pData ) { set_xy( x, y ) ; while( *pData != '\0' ) { write_data( *pData++ ) ; } } /* ********************************************************************************************************* ** 函数名称 :printstr_d() ** 函数功能 :写数字子程序 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2009年11月28日13:24:56 ********************************************************************************************************* */ void printstr_d( unsigned char x, unsigned char y, unsigned char digit ) { set_xy( x, y ) ; } //主程序显示“书山有路勤为径,学海无涯苦作舟” /* ********************************************************************************************************* ** 函数名称 :main() ** 函数功能 :主函数 ** 入口参数 :无 ** 出口参数 :无 ** 创建人 :tom ** 创建时间 :2009年11月27日13:58:33 ********************************************************************************************************* */ void main(void) { PortInit(); //端口初始化 delay_nms(50); PSB=1; TargetInit(); //目标函数初始化 Init12864(); //设定液晶工作方式 delay_nms(2); printstr(1,1,"课堂演示系统"); printstr(0,2,"设计者:tom"); printstr(0,3,"书山有路勤为径");//xpos应为偶数 printstr(0,4,"学海无涯苦作舟");//xpos应为偶数 delay_nms(500); delay_nms(500); while(1) { chek_anj(); delay_nms(20); printstr(1,1,"课堂演示系统"); printstr(0,2,"设计者:tom"); printstr(0,3,"书山有路勤为径");//xpos应为偶数 printstr(0,4,"学海无涯苦作舟");//xpos应为偶 delay_nms(20); } }