找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助!想请教大家单片机+lcd连续显示的问题

[复制链接]
跳转到指定楼层
楼主
200黑币
大家好!我做了一个舵机角度的代码,其中有uint value[]={1500,1000,1500,2000,1500};
uint ms[]={0,45,0,45,0};
。。。。。。
        for(i=0;i<5;i++)                {
                        pwm_value=value;//通过数组就可以改变舵机的转角度
                        delay_ms(1000);
       }
想要在lcd上随着这个循环连续显示数组ms里的数,怎么改呢?
我读51单片机实战指南这本书上面,都是直接显示一个数组,不会举一反三了。想请问大家。




最佳答案

查看完整内容

按你的要求给你写一个示例+仿真,有详细注释,看懂后就可以随心所欲的显示各种字符。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2019-12-10 22:59 | 只看该作者
按你的要求给你写一个示例+仿真,有详细注释,看懂后就可以随心所欲的显示各种字符。
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit LCD_RS=P3^5;                                //液晶屏RS口  写指令低,写数据高
  5. sbit LCD_EN=P3^4;                                //液晶屏EN口  高脉冲使能写指令/数据,低跳变执行

  6. uint value[]={1500,1000,1500,2000,1500};
  7. uint ms[]={0,45,0,45,0};
  8. uint pwm_value;
  9. /*******100us延时程序********/
  10. void delay(uint x)
  11. {
  12.         uint a,b;
  13.         for(a=x;a>0;a--)
  14.                 for(b=10;b>0;b--);
  15. }
  16. /*******1ms延时程序********/
  17. void delay_ms(uint x)
  18. {
  19.         uint a,b;
  20.         for(a=x;a>0;a--)
  21.                 for(b=125;b>0;b--);
  22. }
  23. /*******液晶写指令程序********/
  24. void write_com(uchar com)
  25. {
  26.         LCD_EN=0;        //初始设置LCD_EN低电平
  27.         LCD_RS=0;        //允许写指令
  28.         P0=com;                //传递指令
  29.         delay(10);        //延时1ms
  30.         LCD_EN=1;        //使能写入
  31.         delay(10);        //延时1ms
  32.         LCD_EN=0;        //低跳变执行
  33.        
  34. }
  35. /*******液晶写数据程序********/
  36. void write_date(uchar date)
  37. {
  38. //        LCD_EN=0;        //初始设置LCD_EN低电平
  39.         LCD_RS=1;        //允许写数据
  40.         P0 =date;        //传递数据
  41.         delay(10);        //延时1ms
  42.         LCD_EN=1;        //使能写入
  43.         delay(10);        //延时1ms
  44.         LCD_EN=0;        //低跳变执行
  45.        
  46. }
  47. /*******液晶初始化程序********/
  48. void init()                //设置显示模式、
  49. {
  50.         write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
  51.         write_com(0x01);//显示清零,数据指针清零
  52.         write_com(0x0c);//设置开显示,不显光标
  53.         write_com(0x06);//设置写一个字符后地址指针加1
  54. }
  55. /**********************主程序*************************/
  56. void main()
  57. {
  58.         uchar i;                                        //定义循环变量
  59.         init();                                        //初始化LCD程序
  60.         for(i=0;i<5;i++)
  61.         {
  62.                 pwm_value=value[i];//通过数组就可以改变舵机的转角度

  63.                 write_com(0x80);//LCD1602的第一行第0位置起
  64.                 write_date(value[i]/1000%10+'0');//LCD显示数据的千位
  65.                 write_date(value[i]/100%10+'0');//LCD显示数据的百位
  66.                 write_date(value[i]/10%10+'0');//LCD显示数据的十位
  67.                 write_date(value[i]%10+'0');//LCD显示数据的个位

  68.                 write_com(0xc0+i*3);//LCD1602的第二行第0位置起,每次+3格
  69.                 write_date(ms[i]/10+'0');//LCD显示数据的十位
  70.                 write_date(ms[i]%10+'0');//LCD显示数据的个位
  71.                 delay_ms(1000);
  72.         }
  73.         while(1);
  74. }
复制代码





回复

使用道具 举报

板凳
ID:470332 发表于 2019-12-11 08:56 | 只看该作者
你把数组里的数一个一个的送到显示不就可以吗,每次循环完后数组下标在从0开始
回复

使用道具 举报

地板
ID:630579 发表于 2019-12-11 09:44 | 只看该作者
moluxiyan 发表于 2019-12-11 08:56
你把数组里的数一个一个的送到显示不就可以吗,每次循环完后数组下标在从0开始

大佬,可以麻烦你一下能用代码写一两行吗?随着循环显示lcd
回复

使用道具 举报

5#
ID:630579 发表于 2019-12-11 09:46 | 只看该作者
moluxiyan 发表于 2019-12-11 08:56
你把数组里的数一个一个的送到显示不就可以吗,每次循环完后数组下标在从0开始

那个数组里面的数还要再加一些的,怕这样单个单个显示会让整个代码冗长。
回复

使用道具 举报

6#
ID:470332 发表于 2019-12-11 11:20 | 只看该作者
一个杰 发表于 2019-12-11 09:44
大佬,可以麻烦你一下能用代码写一两行吗?随着循环显示lcd

for(i=0;i<5;i++)               
{
            pwm_value=value;//通过数组就可以改变舵机的转角度
            delay_ms(1000);
            显示(ms);
  }
回复

使用道具 举报

7#
ID:630579 发表于 2019-12-11 14:39 | 只看该作者
wulin 发表于 2019-12-11 13:30
按你的要求给你写一个示例+仿真,有详细注释,看懂后就可以随心所欲的显示各种字符。

大佬,是运行1500的时候,舵机转0度,同时在lcd上显示0度,然后运行1000,舵机转45度,同时在lcd上显示45度等等。每运行一次lcd显示一个角度。再改一下就完美了。感谢感谢!
回复

使用道具 举报

8#
ID:630579 发表于 2019-12-11 14:39 | 只看该作者

这个之前也想到过,但是感觉不太行。
回复

使用道具 举报

9#
ID:630579 发表于 2019-12-11 14:52 | 只看该作者
wulin 发表于 2019-12-10 22:59
按你的要求给你写一个示例+仿真,有详细注释,看懂后就可以随心所欲的显示各种字符。

对的对的!感谢
回复

使用道具 举报

10#
ID:630579 发表于 2019-12-11 16:14 | 只看该作者
wulin 发表于 2019-12-10 22:59
按你的要求给你写一个示例+仿真,有详细注释,看懂后就可以随心所欲的显示各种字符。

大佬,我按照你的方法弄出来了,但是LCD上本该显示数字的地方显示四条横线,第二条横线随着循环在动,请问你知道啥意思吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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