找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请问单片机+lcd1602怎么输入一串数字啊

  [复制链接]
跳转到指定楼层
楼主
ID:959883 发表于 2021-8-13 02:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
比如我按下6,lcd上显示6,继续按2,显示62,可以一直输入连续的,我现在只会显示一个数字的。。。。想了好久不知怎么办,求大神
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2021-8-13 06:43 | 只看该作者
        write_com(0x80);//第一行起始位置
        write_date('6');

        write_com(0x80+1);//第一行次位置
        write_date('2');

        write_com(0x80+2);//以此类推
        write_date('5');

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:190577 发表于 2021-8-13 06:43 | 只看该作者
这个简单,改变显示的地址就行了
回复

使用道具 举报

地板
ID:584195 发表于 2021-8-13 07:09 | 只看该作者
坐标没有加上,最好附上显示的程序,大神们才好给你建议。

评分

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

查看全部评分

回复

使用道具 举报

5#
ID:94031 发表于 2021-8-13 07:31 | 只看该作者
把按下的数放在一个数组里,然后显示一个数组。
回复

使用道具 举报

6#
ID:959439 发表于 2021-8-13 07:34 | 只看该作者
如果让lcd1602显示数字,需要用ascll码。0x30+(要显示的数字)=要显示的数字的ascll码。如果要显示的数字有多个位数的话,需要用求模运算和求余运算把各个位数分开,再用lcd1602显示相应的内容

评分

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

查看全部评分

回复

使用道具 举报

7#
ID:161164 发表于 2021-8-13 07:40 | 只看该作者
上代码
看看你是怎样写的
回复

使用道具 举报

8#
ID:155507 发表于 2021-8-13 07:44 | 只看该作者
可供参考


单片机+LCD1602矩阵键盘的计算器程序
http://www.51hei.com/bbs/dpj-210086-1.html
回复

使用道具 举报

9#
ID:743654 发表于 2021-8-13 08:35 | 只看该作者
这个是万年历的时钟设置,可以参考

万年历.zip

1.6 KB, 下载次数: 9

评分

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

查看全部评分

回复

使用道具 举报

10#
ID:97554 发表于 2021-8-13 09:48 | 只看该作者
设一个变量n,初始值为0,按键检测到一次n+1,把这个n给写命令的地址(比如从第一行第一个字符开始就是  w_com (ox80+n );)这样可以实现按键一次写入一个数字且光标后移一位。

评分

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

查看全部评分

回复

使用道具 举报

11#
ID:71233 发表于 2021-8-13 13:16 | 只看该作者
//显示字符串:第x行第y列显示什么内容
void ShowString(unsigned char x,unsigned char y,unsigned char *str)
{
       
        //设置起始位置
        if(x == 1)
        {
                write_LCD_Command(0x80 | y-1);//  |相当于加法
        }
        if(x == 2)
        {
                write_LCD_Command(0xc0 | y-1);
        }
        //输出字符串
        delayms(2);
        while(*str!='\0')
        {               
                write_LCD_data(*str);               
                str++;
        }

}

评分

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

查看全部评分

回复

使用道具 举报

12#
ID:71233 发表于 2021-8-13 13:17 | 只看该作者
//显示字符串:第x行第y列显示什么字符串
void ShowString(unsigned char x,unsigned char y,unsigned char *str)
{
       
        //设置起始位置
        if(x == 1)
        {
                write_LCD_Command(0x80 | y-1);//  |相当于加法
        }
        if(x == 2)
        {
                write_LCD_Command(0xc0 | y-1);
        }
        //输出字符串
        delayms(2);
        while(*str!='\0')
        {               
                write_LCD_data(*str);               
                str++;
        }

}
ShowString(1,1,"12345678ABC");
回复

使用道具 举报

13#
ID:959883 发表于 2021-8-14 13:24 | 只看该作者
zyluglugl 发表于 2021-8-13 07:09
坐标没有加上,最好附上显示的程序,大神们才好给你建议。

#include<reg51.h>       
#include"lcd.h"

#define GPIO_KEY P1

unsigned char KeyValue;
//óÃà′′æ·Å¶áè¡μ½μļüÖμ
unsigned char KeyState;
//óÃà′′æ·Å°′¼ü×′ì¬
unsigned char dat[]="0123456789ABCDEF";
unsigned char a[6]={0,0,0,0,0,0};
void Delay10ms();   //Ñóê±50us
void KeyDown();                 //¼ì2a°′¼üoˉêy

/*******************************************************************************
* oˉ êy Ãû         : main
* oˉêy1|Äü                   : Ö÷oˉêy
* êä    èë         : ÎT
* êä    3ö         : ÎT
*******************************************************************************/
void main(void)
{
        unsigned char i;
        LcdInit();
        KeyState=0;
        while(1)
        {
                KeyDown();
                if(KeyState)
                {
                        KeyState=0;
                        for(i=0;i<6;i++)
           {
                        a[i+1]=a;               
     }               
                        a[0]=KeyValue;
                        LcdWriteCom(0x80+0x40);
      LcdWriteData(KeyValue+0x30);                 
                }       
        }               
}
回复

使用道具 举报

14#
ID:959883 发表于 2021-8-14 13:25 | 只看该作者
lkc8210 发表于 2021-8-13 07:40
上代码
看看你是怎样写的

大神,这是我写的代码
#include<reg51.h>       
#include"lcd.h"

#define GPIO_KEY P1

unsigned char KeyValue;
//óÃà′′æ·Å¶áè¡μ½μļüÖμ
unsigned char KeyState;
//óÃà′′æ·Å°′¼ü×′ì¬
unsigned char dat[]="0123456789ABCDEF";
unsigned char a[6]={0,0,0,0,0,0};
void Delay10ms();   //Ñóê±50us
void KeyDown();                 //¼ì2a°′¼üoˉêy

/*******************************************************************************
* oˉ êy Ãû         : main
* oˉêy1|Äü                   : Ö÷oˉêy
* êä    èë         : ÎT
* êä    3ö         : ÎT
*******************************************************************************/
void main(void)
{
        unsigned char i;
        LcdInit();
        KeyState=0;
        while(1)
        {
                KeyDown();
                if(KeyState)
                {
                        KeyState=0;
                        for(i=0;i<6;i++)
           {
                        a[i+1]=a;               
     }               
                        a[0]=KeyValue;
                        LcdWriteCom(0x80+0x40);
      LcdWriteData(KeyValue+0x30);                 
                }       
        }               
}
回复

使用道具 举报

15#
ID:959883 发表于 2021-8-14 13:33 | 只看该作者
杨雪飞 发表于 2021-8-13 09:48
设一个变量n,初始值为0,按键检测到一次n+1,把这个n给写命令的地址(比如从第一行第一个字符开始就是  w_ ...

谢谢你,解决了
回复

使用道具 举报

16#
ID:161164 发表于 2021-8-14 14:04 | 只看该作者
殇两盏 发表于 2021-8-14 13:25
大神,这是我写的代码
#include       
#include"lcd.h"

代码不全啊老弟~
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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