找回密码
 立即注册

QQ登录

只需一步,快速开始

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

编完的程序为什么lcd162不能显示,帮忙改改

[复制链接]
跳转到指定楼层
楼主
ID:322908 发表于 2018-5-10 21:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
20黑币
#include<reg51.h.>
#define uchar unsigned char
#define uint unsigned int
sbit lcdrs=P1^0;
sbit lcdrw=P1^1;
sbit lcden=P2^5;
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
lcden=0;
write_com(0x38);    //显示模式控制
write_com(0x0f);    //显示开关 开启光标  光标闪烁
write_com(0x06);    //光标自加一   未开启全屏移动
write_com(0x01);    //清屏
write_com(0x80);    //设置数据指针
}
void main()
{
init();

while(1)
{
write_data('1');

}
}

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

使用道具 举报

沙发
ID:304772 发表于 2018-5-10 22:35 | 只看该作者
留印,我也新学,我给你一个程序你试试。过两天看看有没有人回答你
/*
* 1602
*/

#include <reg52.h>
#include <intrins.h>

typedef unsigned char uint8;

sbit RS = P1^0 ;
sbit RW = P1^1 ;
sbit EN = P2^5 ;
sbit STA7 = P0^7;


unsigned char code word1[]={"QQ:398115088"};
unsigned char code word2[]={"WWW.HJMCU.COM"};


/**
* 等待繁忙标志
*/
void wait(void)
{
        P0 = 0xFF;
       
        do
        {
                RS = 0;
                RW = 1;
                EN = 0;
                EN = 1;
        }while (STA7 == 1);
        EN = 0;
}

/**
* 写数据
*/
void w_dat(uint8 dat)
{
        wait();
        EN = 0;
        P0 = dat;
        RS = 1;
        RW = 0;
        EN = 1;
        EN = 0;
}

/**
* 写命令
*/
void w_cmd(uint8 cmd)
{
        wait();
        EN = 0;
        P0 = cmd;
        RS = 0;
        RW = 0;
        EN = 1;
        EN = 0;
}

/**
* 发送字符串到LCD
*/
void w_string(uint8 addr_start, uint8 *p)
{
        w_cmd(addr_start);
        while (*p != '\0')
        {
                w_dat(*p++);
        }
}


/**
* 初始化1602
*/
void Init_LCD1602(void)
{
        w_cmd(0x38);  // 16*2显示,5*7点阵,8位数据接口
        w_cmd(0x0C);  // 显示器开、光标开、光标允许闪烁
        w_cmd(0x06);  // 文字不动,光标自动右移
        w_cmd(0x01);  // 清屏
}


main()
{

        Init_LCD1602();
       
        w_string(0x80,word1);
        w_string(0xC0,word2);
       
        while (1);
}
回复

使用道具 举报

板凳
ID:83230 发表于 2018-5-11 09:01 | 只看该作者
不能显示一定是你哪里出错了。
回复

使用道具 举报

地板
ID:319019 发表于 2018-5-11 11:40 | 只看该作者
本帖最后由 zhdp 于 2018-5-11 13:19 编辑

缺少判断是否忙碌的函数  还缺一个显示用的数组char code Num[]={'0','1','2','3','4','5','6','7','8','9'};

void Read_Busy()      
{
        char busy;
        LCD1602_DB = 0xff;      //复位数据总线  (DB为输出端)
        LCD1602_RS = 0;          //拉低RS
        LCD1602_RW = 1;          //拉高RW读
        do
        {
            LCD1602_EN = 1;//使能EN
            busy = LCD1602_DB;//读回数据
            LCD1602_EN = 0;         //拉低使能以便于下一次产生上升沿
        }while(busy & 0x80); //判断状态字BIT7位是否为1,为1则表示忙,程序等待
}
回复

使用道具 举报

5#
ID:306178 发表于 2018-5-11 12:39 | 只看该作者
1、include<reg51.h>  (你多了个点)
2、#define uchar unsigned char
#define uint unsigned int
回复

使用道具 举报

6#
ID:306178 发表于 2018-5-11 12:42 | 只看该作者
错误1、include <reg51.h.>   多了个点
错误2、#define uchar unsigned char    不能这么用,正确应该使用:  typedef unsigned char uchar;

有问题欢迎继续问,说实话这都是基础问题,完全都可以看书解决的。
回复

使用道具 举报

7#
ID:327060 发表于 2018-5-11 13:35 | 只看该作者
可能程序出错
回复

使用道具 举报

8#
ID:327651 发表于 2018-5-11 15:41 | 只看该作者
可能屏幕初始化错了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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