tag 标签: 字符型

相关博文
  • 热度 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);  } }  
相关资源