51学习库(3)--12864

学过51单片机的回过头来都会觉得51还是比较简单的,在此我将贴出在我的学习过程中,把对各种外设所进行的操作,封装成函数库的形式,以供新手学习。

注:使用的单片机是stc12c5a60s2,该系列单片机属于加强51,在运行速度上是普通51的8-12倍,有关时序的操作需要加以注意。
注2:12864相关操作,使用方法:

char array[10] = "hello";
unsigned char i =0;
lcd_pos(0, 0);    //设置显示位置在第0行
while(0 != array[i])
    lcd_wdat(array[i++])    //显示字符串

申明:本系列全部例程通过单片机开发板,实验亲测有效!

/* 12864 */
#define LCD_data  P0             //数据口
sbit LCD_RS  =  P2^5;            //寄存器选择输入 
sbit LCD_RW  =  P2^4;            //液晶读/写控制
sbit LCD_EN  =  P2^3;            //液晶使能控制
sbit LCD_PSB =  P2^2;            //串/并方式控制

/*******************************************************************/
/*                                                                 */
/*检查LCD忙状态                                                    */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
/*                                                                 */
/*******************************************************************/
bit lcd_busy()
{                     
    bit result;
    P0=0X00;              //关掉数码管的信号。阻止数码管受到P0口信号的影响
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    delayms(1);
    result = (bit)(P0&0x80);
    LCD_EN = 0;
    return(result); 
}

/*******************************************************************/
/*                                                                 */
/*写指令数据到LCD                                                  */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
/*                                                                 */
/*******************************************************************/
void lcd_wcmd(unsigned char cmd)
{                        
    while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    _nop_();
    _nop_(); 
    P0 = cmd;
    delayms(1);
    LCD_EN = 1;
    delayms(1);
    LCD_EN = 0;  
}

/*******************************************************************/
/*                                                                 */
/*写显示数据到LCD                                                  */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
/*                                                                 */
/*******************************************************************/
void lcd_wdat(unsigned char dat)
{                          
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    P0 = dat;
    delayms(1);
    LCD_EN = 1;
    delayms(1);
    LCD_EN = 0; 
}

/*******************************************************************/
/*                                                                 */
/*  LCD初始化设定                                                  */
/*                                                                 */
/*******************************************************************/
void lcd_init()
{ 

    LCD_PSB = 1;         //并口方式

    lcd_wcmd(0x34);      //扩充指令操作
    delayms(5);
    lcd_wcmd(0x30);      //基本指令操作
    delayms(5);
    lcd_wcmd(0x0C);      //显示开,关光标
    delayms(5);
    lcd_wcmd(0x01);      //清除LCD的显示内容
    delayms(5);
}

/*********************************************************/
/*                                                       */
/* 设定显示位置                                          */
/*                                                       */
/*********************************************************/
void lcd_pos(unsigned char X,unsigned char Y)
{                          
    unsigned char pos;
    if (X==0)
     {X=0x80;}
    else if (X==1)
     {X=0x90;}
    else if (X==2)
     {X=0x88;}
    else if (X==3)
     {X=0x98;}
    pos = X+Y ;  
    lcd_wcmd(pos);     //显示地址
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值