找回密码
 立即注册

QQ登录

只需一步,快速开始

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

Proteus仿真 LCD1602显示问题

[复制链接]
回帖奖励 100 黑币 回复本帖可获得 20 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
用52单片机做作息时间控制器
用protues仿真发现时间显示界面可以正常修改,但是切换到闹钟设置界面
时钟显示I5-I5,且不能修改,请问这是为什么呢

#include "lcd1602.h"


/*******************************************************************************
* 函 数 名       : lcd1602_write_cmd
* 函数功能                 : LCD1602写命令
* 输    入       : cmd:指令
* 输    出             : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_cmd(u8 cmd)
{
        LCD1602_RS=0;//选择命令
        LCD1602_RW=0;//选择写
        LCD1602_E=0;
        LCD1602_DATAPORT=cmd;//准备命令
        delay_ms(1);
        LCD1602_E=1;//使能脚E先上升沿写入
        delay_ms(1);
        LCD1602_E=0;//使能脚E后负跳变完成写入        
}
#else        //4位LCD
void lcd1602_write_cmd(u8 cmd)
{
        LCD1602_RS=0;//选择命令
        LCD1602_RW=0;//选择写
        LCD1602_E=0;
        LCD1602_DATAPORT=cmd;//准备命令
        delay_ms(1);
        LCD1602_E=1;//使能脚E先上升沿写入
        delay_ms(1);
        LCD1602_E=0;//使能脚E后负跳变完成写入
        
        LCD1602_DATAPORT=cmd<<4;//准备命令
        delay_ms(1);
        LCD1602_E=1;//使能脚E先上升沿写入
        delay_ms(1);
        LCD1602_E=0;//使能脚E后负跳变完成写入        
}
#endif

/*******************************************************************************
* 函 数 名       : lcd1602_write_data
* 函数功能                 : LCD1602写数据
* 输    入       : dat:数据
* 输    出             : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_write_data(u8 dat)
{
        LCD1602_RS=1;//选择数据
        LCD1602_RW=0;//选择写
        LCD1602_E=0;
        LCD1602_DATAPORT=dat;//准备数据
        delay_ms(1);
        LCD1602_E=1;//使能脚E先上升沿写入
        delay_ms(1);
        LCD1602_E=0;//使能脚E后负跳变完成写入               
}
#else
void lcd1602_write_data(u8 dat)
{
        LCD1602_RS=1;//选择数据
        LCD1602_RW=0;//选择写
        LCD1602_E=0;
        LCD1602_DATAPORT=dat;//准备数据
        delay_ms(1);
        LCD1602_E=1;//使能脚E先上升沿写入
        delay_ms(1);
        LCD1602_E=0;//使能脚E后负跳变完成写入
        
        LCD1602_DATAPORT=dat<<4;//准备数据
        delay_ms(1);
        LCD1602_E=1;//使能脚E先上升沿写入
        delay_ms(1);
        LCD1602_E=0;//使能脚E后负跳变完成写入               
}
#endif

/*******************************************************************************
* 函 数 名       : lcd1602_init
* 函数功能                 : LCD1602初始化
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
#if (LCD1602_4OR8_DATA_INTERFACE==0)//8位LCD
void lcd1602_init(void)
{
        lcd1602_write_cmd(0x38);//数据总线8位,显示2行,5*7点阵/字符
        lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁
        lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
        lcd1602_write_cmd(0x01);//清屏        
}
#else
void lcd1602_init(void)
{
        lcd1602_write_cmd(0x28);//数据总线4位,显示2行,5*7点阵/字符
        lcd1602_write_cmd(0x0c);//显示功能开,无光标,光标闪烁
        lcd1602_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
        lcd1602_write_cmd(0x01);//清屏        
}
#endif

/*******************************************************************************
* 函 数 名       : lcd1602_clear
* 函数功能                 : LCD1602清屏
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void lcd1602_clear(void)
{
        lcd1602_write_cmd(0x01);        
}

/*******************************************************************************
* 函 数 名       : lcd1602_show_string
* 函数功能                 : LCD1602显示字符
* 输    入       : x,y:显示坐标,x=0~15,y=0~1;
                                   str:显示字符串
* 输    出             : 无
*******************************************************************************/
void lcd1602_show_string(u8 x,u8 y,u8 *str)
{
        u8 i=0;

        if(y>1||x>15)return;//行列参数不对则强制退出

        if(y<1)        //第1行显示
        {        
                while(*str!='\0')//字符串是以'\0'结尾,只要前面有内容就显示
                {
                        if(i<16-x)//如果字符长度超过第一行显示范围,则在第二行继续显示
                        {
                                lcd1602_write_cmd(0x80+i+x);//第一行显示地址设置        
                        }
                        else
                        {
                                lcd1602_write_cmd(0x40+0x80+i+x-16);//第二行显示地址设置        
                        }
                        lcd1602_write_data(*str);//显示内容
                        str++;//指针递增
                        i++;        
                }        
        }
        else        //第2行显示
        {
                while(*str!='\0')
                {
                        if(i<16-x) //如果字符长度超过第二行显示范围,则在第一行继续显示
                        {
                                lcd1602_write_cmd(0x80+0x40+i+x);        
                        }
                        else
                        {
                                lcd1602_write_cmd(0x80+i+x-16);        
                        }
                        lcd1602_write_data(*str);
                        str++;
                        i++;        
                }        
        }                                
}





#ifndef _lcd1602_H
#define _lcd1602_H

#include "public.h"

//LCD1602数据口4位和8位定义,若为1,则为LCD1602四位数据口驱动,反之为8位
#define LCD1602_4OR8_DATA_INTERFACE        0        //默认使用8位数据口LCD1602

//管脚定义
//sbit LCD1602_RS=P2^6;//数据命令选择
//sbit LCD1602_RW=P2^5;//读写选择
//sbit LCD1602_E=P2^7; //使能信号

sbit LCD1602_RS=P2^0;//数据命令选择
sbit LCD1602_RW=P2^1;//读写选择
sbit LCD1602_E=P2^2; //使能信号

#define LCD1602_DATAPORT P0        //宏定义LCD1602数据端口


//函数声明
void lcd1602_init(void);
void lcd1602_clear(void);
void lcd1602_show_string(u8 x,u8 y,u8 *str);

#endif




#ifndef __TIME_H
#define __TIME_H

#include "public.h"

void time0_init(void);

#endif



#include "time.h"

void time0_init(void)
{
        TMOD|=0X01;
        TH0=0xDC;
        TL0=0x00;//定时10ms
        ET0=1;
        EA=1;
        TR0=1;                                
}




1111111111111.png (104.03 KB, 下载次数: 1)

闹钟设置不了

闹钟设置不了

22222222222222.png (101.33 KB, 下载次数: 1)

时间可以正常设置

时间可以正常设置
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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