您的位置:首页 > 其它

[51]1602液晶程序

2016-04-06 18:03 253 查看
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="*---LCD Test---*";
uchar code table1[]="|__2016-03-20__|" ;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uchar num;                       
void delay(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void write_com(uchar com) /*RS=L,R/W=L,D0-D7,E高脉冲*/
{
    lcdrs=0;     //    选择写命令模式    命令模式时为低电平
    P0=com;           // 将要写的命令送到数据总线上
    delay(5);             //    稍作延迟以待数据稳定
    /*下面脉冲产生*/
    lcden=1;                //使能端给以高电平,因为初始化函数中已经将lcden置为0 
    delay(5);              //稍作延迟
    lcden=0;            //     将使能端置0已完成高脉冲
}

void write_data(uchar date)/*RS=H,R/W=L,D0-D7,E高脉冲*/
{
    lcdrs=1;    
    P0=date;          
    delay(5);        
    lcden=1;               
    delay(5);              
    lcden=0;            
}
void init()                        //初始化函数
{

      WR=0;              // 置写入
    lcden=0;           //E置0
    write_com(0x38);  // 设置16*2显示,5*7点阵,8数据接口  
    write_com(0x0c);   //设置开显示,0x0f显示光标 0x0c不显示光标    00001(1开显示)(1显示光标)(1光标闪烁0光标不显示)
    write_com(0x06);    //写一个字符后地址指针加1                    000001(1读写一字符指针加1,光标加1)(写一个字符整屏左移,0右移)(1开移动0关移动)
    write_com(0x01);    //显示清0,数据指针清0                        0x02回车 本行不写也行
}

void main()
{
    init();
    write_com(0x80);//0x80+(0x00~0x10~0x27)(0x40~0x50~0x67)设置指针
    /*      command集合
    00010000左移光标 0x10
    00010100右移光标 0x14
    00011000整屏左移 0x18
    00011100整屏右移 0x1c
    */
    for(num=0;num<16;num++)
    {
        write_data(table[num]);
        delay(5);
    }
    write_com(0x80+0x40);
    for(num=0;num<16;num++)
    {
        write_data(table1[num]);
        delay(5);
    }
    while(1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  51单片机