找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

为什么LCD1602的数字时钟显示不出来 大神们

查看数: 8048 | 评论数: 19 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-5-21 20:21

正文摘要:

这是程序#include<reg51.h>#define LCD_data P0 sbit RS=P2^0; sbit RW=P2^1; sbit LCDE=P2^2; unsigned char m,miao,fen=12,shi=10; unsigned char line1[16]={"  BEIJING TIME   ...

回复

ID:116078 发表于 2017-5-7 12:29
仿真不用查忙
ID:116078 发表于 2017-5-7 12:28
仿真是不用查忙的,实物中需要。因为仿真中单片机速度没有1602反应快
ID:116078 发表于 2017-5-7 12:27
其实不用查忙的,延时就行,忙这个条件有点苛刻
ID:197655 发表于 2017-5-7 11:44
跪求,感觉好难!
ID:111634 发表于 2017-5-7 11:34
本帖最后由 zl2168 于 2017-5-7 14:43 编辑

实例91  具有校正功能的时钟1302(LCD1602显示)
先Proteus仿真,确认有效。
实例91 带校正时钟1302(LCD1602显示).rar (52.68 KB, 下载次数: 19)

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,书中电路和程序设计有详细说明,程序语句条条有注解。
仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。


ID:197635 发表于 2017-5-7 11:06
同问求大佬兹磁
ID:197635 发表于 2017-5-7 11:06
你看看你的接口顺序对吗
ID:129350 发表于 2017-5-7 08:28
TR0=0,未进入中断函数
ID:196174 发表于 2017-5-7 00:16
我写的程序也是显示乱码。。。。。
ID:197560 发表于 2017-5-6 23:49

TR0=0,未进入中断函数
ID:197554 发表于 2017-5-6 23:42
你的延时太多了  不用探忙的
ID:19568 发表于 2017-5-6 23:16
初始化很重要
ID:140642 发表于 2016-9-29 16:56
对于任何外设访问都要探忙,但是好像跟你这个显示的没关系,你不能把程序模块化了吗,写的很乱,到最后自己都不好改。
ID:138194 发表于 2016-9-29 15:51
为什么要探忙,能解释下吗
ID:78515 发表于 2015-5-25 09:38
写数据之前要查看LCD1602忙吗,你程序没有的

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

ID:80172 发表于 2015-5-24 21:09
wanglu071912 发表于 2015-5-24 10:42
TR0=0,未进入中断函数

对哦 谢谢哈
ID:76853 发表于 2015-5-24 10:42
TR0=0,未进入中断函数

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

ID:69240 发表于 2015-5-22 10:50
我自己是焊了个LCD1602的时钟,就是不想看代码,代码风格不一样,很脑大的。我把我的LCD1602.c贴出来,宋老师的风格,功能模块化,好查错,你对比分析一下吧,这个.c是一定没问题的。

#include<reg52.h>
#define lcdDB P0
sbit lcdRS = P1^0;
sbit lcdRW = P1^1;
sbit lcdE = P1^5;

void lcdready()     //探忙
{
  unsigned char sta;
        lcdDB = 0xFF;
        lcdRS = 0;
        lcdRW = 1;
        do{
                lcdE = 1;
                sta = lcdDB;
                lcdE = 0;
        }while(sta & 0x80);
}

void lcdwritecmd(unsigned char cmd)      //写入命令
{
  lcdready();
        lcdRS = 0;
        lcdRW = 0;
        lcdDB = cmd;
        lcdE = 1;
        lcdE = 0;
}

void lcdwritedat(unsigned char dat)      //写入数据
{
  lcdready();
        lcdRS = 1;
        lcdRW = 0;
        lcdDB = dat;
        lcdE = 1;
        lcdE = 0;
}

void lcdsetaddr(unsigned char x, unsigned char y)      //设置显示位置
{
  unsigned char addr;
        if(y == 0)
                addr = 0x00 + x;
        else
                addr = 0x40 + x;
        lcdwritecmd(addr | 0x80);
}

void lcdshowstr(unsigned char x, unsigned char y, unsigned char *str)     //显示内容
{
  lcdsetaddr(x, y);
  while(*str != '\0')
        {
          lcdwritedat(*str++);
        }               
}

/***********************************************************
void lcdareaclear(unsigned char x, unsigned char y, unsigned char len)    //局部清除
{
  lcdsetaddr(x, y);
        while(len--)
        {
          lcdwritedat(' ');
        }
}

void lcdfullclear()     //整屏清除
{
  lcdwritecmd(0x01);
}
**********************************************************************/

void lcdgbss(unsigned char x, unsigned char y, bit gb)     //光标闪烁:1开0关
{
        if(gb == 1)
                lcdwritecmd(0x0F);
        else
                lcdwritecmd(0x0C);
        lcdsetaddr(x, y);
}

void initlcd()        //初始化
{
  lcdwritecmd(0x38);
        lcdwritecmd(0x0C);
        lcdwritecmd(0x06);
        lcdwritecmd(0x01);       
}




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的积分奖励!

查看全部评分

ID:80407 发表于 2015-5-21 22:35
同问!

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

Powered by 单片机教程网

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