| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8630 人关注过本帖
标题:求助51单片机LCD1602数字显示的问题
只看楼主 加入收藏
ID不见了
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2016-5-10
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:9 
求助51单片机LCD1602数字显示的问题
程序代码:
#include<stc15.h>
#include<intrins.h>
#include<gpio.h>
#define uchar unsigned char
#define uint  unsigned int
#include<lcd1602.h>

//uint m,f,s;     //秒、分、时
uint m1,m2;     //秒的个位、十位
uint f1,f2;     
uint s1,s2;
uint aa;
uchar dis1[]={0x30,0x30,0x3a,0x30,0x30,0x3a,0x30,0x30};
uint i;

void Delay1ms()        //@11.0592MHz
{
    unsigned char i, j;

    _nop_();
    _nop_();
    _nop_();
    i = 11;
    j = 190;
    do
    {
        while (--j);
    } while (--i);
}

void Delayxms(uint x)
{
    uint i;
    for(i=0;i<x;i++)
    {
        Delay1ms();
    }
}

 void init()
{
    TMOD=0x01;                //计数器T0计数
    TH0=(65536-50000)/256;    //设置T0  50ms定时的初始值
    TL0=(65536-50000)%256;
    EA=1;                    //开放CPU中断
    ET0=1;                    //允许外部中断
    TR0=1;                    //定时器开始计时
    aa=0;
    m1=0;
}

void timer0() interrupt 1
{
    TH0=(65536-50000)/256; //每50MS产生一次中断,给寄存器装初值并累加aa
    TL0=(65536-50000)%256;
    aa++;
}

void time_add()
{
    /*m1=0,m2=0,f1=0,f2=0,s1=0,s2=0;
    lcd_data(0x30+0x30+0x3a+0x30+0x30+0x3a+0x30+0x30);*/
    if(aa==20)
    {
        aa=0;
        m1++;
        if(m1>9)
        {
            m1=0;
            m2++;
            if(m2>5)
            {
                m2=0;
                f1++;
                if(f1>9)
                {
                    f1=0;
                    f2++;
                    if(f2>5)
                    {
                        f2=0;
                        s1++;
                        if(s1>9)
                        {
                            s1=0;
                            s2++;
                            if(s2>5)
                            {
                                m1=0;
                                m2=0;
                                f1=0;
                                f2=0;
                                s1=0;
                                s2=0;
                            }
                        }
                    }
                }
            }
        }
    }
}

void main()
{
    gpio();
    lcd_init();      //初始化
    Delayxms(20);
    m1=0,m2=0,f1=0,f2=0,s1=0,s2=0;
    init();      //定时器
    while(1)
    {
        time_add();
        dis1[7]=m1+'0';
        dis1[6]=m2+'0';
        dis1[4]=f1+'0';
        dis1[3]=f2+'0';
        dis1[1]=s1+'0';
        dis1[0]=s2+'0';
        i=0;
        while(i<8)
        {
            lcd_start(4+i);
            lcd_data(dis1[i]);
            i++;
        }
    }
}

请问红色部分的代码是怎么回事?是加上'0'就能将数字转换成ASCII码了吗?
搜索更多相关主题的帖子: include 单片机 
2016-06-28 19:01
ID不见了
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2016-5-10
收藏
得分:0 
dis1[7]=m1+'0';
dis1[6]=m2+'0';
dis1[4]=f1+'0';
dis1[3]=f2+'0';
dis1[1]=s1+'0';
dis1[0]=s2+'0';


这里
2016-06-28 19:02
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:15 
“0”的ASII码是32,“1”是33,余类推。加上32的基数之后,就可以显示出m1、m2、f1、f2、s1、s2等变量的数值(仅限于0-9,大于9则不能正确显示)。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2016-06-29 07:30
ID不见了
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2016-5-10
收藏
得分:0 
回复 3楼 hu9jj
那如果我想其他的字符也能正常显示,我应该怎么做啊?
2016-06-29 09:59
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:5 
“0”的ASII码是十进制数48(30H),32是空格的asc码
查了下LCD1602资料,该模块自带字符集,只需向对应寄存器写字符asc码即可,要显示其他的也很简单,如下:即显示“AB:CD:EF”了。
dis1[7]='F';
dis1[6]='E';
dis1[4]='D';
dis1[3]='C';
dis1[1]='B';
dis1[0]='A';

[此贴子已经被作者于2016-6-29 20:50编辑过]


能编个毛线衣吗?
2016-06-29 20:47
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用ID不见了在2016-6-29 09:59:11的发言:

那如果我想其他的字符也能正常显示,我应该怎么做啊?

在C下面可以直接将显示的字符发送给LCD显示屏,编译后会自动转换为ASCII码。也可以直接将字符的ASCII码发送给显示屏,只是要从对照表中查出代码。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2016-06-29 20:54
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
这是1602LCD的资料,里面有其自带的字符集:
1602液晶显示器资料.rar (375.45 KB)


活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2016-06-29 21:01
东方灵将2
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-8-14
收藏
得分:0 
'0' 是取ascill, dis1[7]=m1+'0';实际就是取m1数值的ascill,m1为偏移量
2016-07-20 14:32
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
5楼说的极是,‘0’的ASCII码是48,是我记错了,在此表示歉意!

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2016-07-21 07:28
q913794286
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2017-4-27
收藏
得分:0 
1602的字符显示都是assic查表,理解下,没啥好说的
2017-04-27 08:09
快速回复:求助51单片机LCD1602数字显示的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014839 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved