找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1536|回复: 1
打印 上一主题 下一主题
收起左侧

【1602液晶显示问题】

[复制链接]
跳转到指定楼层
楼主
ID:204212 发表于 2017-5-29 11:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想通过键盘来切换lcd的显示界面(共四个界面),我觉得思路没问题,可是就是实现不了,下面是代码
void main()
{
    LcdInit();
    while(1)
    {
        //key_return=Keyscan();
        Operation(Keyscan());
        Show(interface);


    }
}
void T0Init()
{
}
/*void T0() interrupt 1
{

}*/
void Operation(uchar key)//界面切换
{
    switch(interface)
    {
        case 1:if(key==10)
                    interface=2;
                    //运行界面,启动定时器,同时切换界面
                if(key==12)
                    interface=3;//设置界面
                if(key==16)
                    interface=1;
                break;
        case 2:if(key==13)
                {
                    interface=4;//查询界面
                }
                else if(key==11)
                {
                    //TR0=0;
                    interface=1;
                }
                else if(key==12)
                {
                    //TR0=0;
                    interface=3;
                }
                break;
          case 3:if(key==10)
                {
                    //TR0=1;
                    interface=2;
                }
                else if(key==11)
                {
                    //TR0=0;
                    interface=1;
                }
                break;
           case 4:if(key==11)
                {
                    interface=2;
                }
    }
}
void Show(uchar n)
{
    switch(n)
    {
        case 1:Interface_start();
               break;
        case 2:Interface_run();
               break;
        case 3:Interface_set();
               break;
        case 4:Interface_find();
               break;
    }
}
void refresh_date(uchar address,uchar date)
{
    Write_cmd(0x80+address);
    Write_data(date);
}
void Interface_start()//打开电源显示界面
{
    //Write_cmd(0x01);
    Write_cmd(0x80);
    for(num=0;num<16;num++)
    {
        Write_data(table[num]);
        delay(20);
    }
    Write_cmd(0x80+0x40);//第二行显示
    for(num=0;num<16;num++)
    {
        Write_data(table1[num]);
        delay(20);
    }
    Write_cmd(0x80+0x50);
    Write_cmd(0x0c);//开显示,不显示光标,不闪烁   
}
void Interface_run()//运行界面
{
    LcdInit();
    for(num=0;num<16;num++)
    {
        Write_data(table3[num]);
        delay(20);
    }
    Write_cmd(0x80+0x40);//第二行显示
    for(num=0;num<16;num++)
    {
        Write_data(table2[num]);
        delay(20);
    }

}
void Interface_set()//设置界面
{
     Write_cmd(0x80+5);
     Write_cmd(0x0f);
}
void Interface_find()//查询界面
{   
    refresh_date(0x40+5,table2[5]);
    refresh_date(0x40+6,table2[6]);
    refresh_date(0x40+7,table2[7]);
    refresh_date(0x40+8,table2[8]);
    refresh_date(0x40+9,table2[9]);
    refresh_date(0x40+10,table2[10]);
    refresh_date(0x40+11,table2[11]);
}

void LcdInit()
{
    wela=0;//lcd和数码管共用P0
    dula=0;//防止数码管干扰
    lcd_en=0;
    Write_cmd(0x38);//设置16*2显示,5*7点阵,8位数据口
    Write_cmd(0x0f);//开显示,显示光标,光标闪烁
    Write_cmd(0x06);
    Write_cmd(0x01);//清除数据,防止出现错误
    Write_cmd(0x80);

}
void Write_cmd(uchar cmd)
{
    rs=0;//数据/命令选择段(h/l)
    P0=cmd;
    delay(5);
    lcd_en=1;//使能信号,高脉冲
    delay(5);
    lcd_en=0;  
}
void Write_data(uchar data_)
{
    rs=1;
    P0=data_;
    delay(5);
    lcd_en=1;
    delay(5);
    lcd_en=0;
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2017-5-29 16:00 | 只看该作者
其实这是最基本的。检测取得按键值后,根据其值将程序跳转到指定的显示内容即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表