找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求老师指点关于1602液晶具体显示在那个地方的问题

[复制链接]
跳转到指定楼层
楼主
老师们,我想把1602的液晶行和列显示弄成disply(0,1,'a');
就是说想显示在屏幕上那一点就直接调用disply();
那怎么编程呢,我编的始终有错误求指点


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

使用道具 举报

沙发
ID:67818 发表于 2014-11-3 12:02 | 只看该作者
我附上1602的程序假如要显示ABCD在第一行第3位开始和EFG在第二行第4位显示呢求大神指点
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P3^5;
sbit wr=P3^6;
sbit lcden=P3^4;
sbit dula=P2^6;
sbit wela=P2^7;
uchar table1[]="PL-51STAR MCU";
uchar table2[]="WWW.51hei.COM";
void delay(uint x)
{
        uint a,b;
        for(a=x;a>0;a--)
                for(b=10;b>0;b--);
}

void write_com(uchar com)         //些命令,RS=0
{
        P0=com;
           wr=0;
        rs=0;
        lcden=0;
        delay(10);
        lcden=1;
        delay(10);
        lcden=0;
        
}

void write_data(uchar dat)           //写数据,RS=1
{
        P0=dat;
        wr=0;
        rs=1;
        lcden=0;
        delay(10);
        lcden=1;
        delay(10);
        lcden=0;
        
}

void init()
{
        dula=0;
        wela=0;
        write_com(0x38);   //显示模式设置:16×2显示,5×7点阵,8位数据接口
        delay(20);
        write_com(0x0f);   //显示模式设置
        delay(20);
        write_com(0x06);   //显示模式设置:光标右移,字符不移
        delay(20);
        write_com(0x01);   //清屏幕指令,将以前的显示内容清除
        delay(20);        
}
void main()
{
        
        init();                          //1602初始化
        
        while(1);
}
回复

使用道具 举报

板凳
ID:67818 发表于 2014-11-3 12:04 | 只看该作者
void frmxy( char x , char y) {  if(y==0)x=x|0x80;  else x=x|0xc0;  write_com(x);  write_data(led);  }
回复

使用道具 举报

地板
ID:68299 发表于 2014-11-3 12:45 | 只看该作者
回复

使用道具 举报

5#
ID:67992 发表于 2014-11-3 18:12 | 只看该作者
disply(char x,char y,char *p,)
回复

使用道具 举报

6#
ID:67818 发表于 2014-11-3 19:27 | 只看该作者

        void frmxy( char x , char y ,char *p ,uchar count)
        {
          uchar i;
          for(i=0;i<*p;i++)
         {
          
         if(y==0)x=x|0x80;
         else x=x|0xc0;
         write_com(x);
         write_data(*p);
         x++;
         p++;
       
        }
         }
回复

使用道具 举报

7#
ID:67818 发表于 2014-11-3 19:35 | 只看该作者
为啥我的程序能显示字符在那一列和行
frm(0,1,xiexie,6);这样的能显示出来但是放进一个简单按S2加1就错了
disdata[0]=count/10;
frm(0,1,disdata,1);就错了不解啊
回复

使用道具 举报

8#
ID:67818 发表于 2014-11-3 19:35 | 只看该作者
dgahz 发表于 2014-11-3 18:12
disply(char x,char y,char *p,)

   void frmxy( char x , char y ,char *p ,uchar count)
        {
          uchar i;
          for(i=0;i<*p;i++)
         {
         
         if(y==0)x=x|0x80;
         else x=x|0xc0;
         write_com(x);
         write_data(*p);
         x++;
         p++;
        
        }
         }
回复

使用道具 举报

9#
ID:67818 发表于 2014-11-3 19:35 | 只看该作者
dgahz 发表于 2014-11-3 18:12
disply(char x,char y,char *p,)

为啥我的程序能显示字符在那一列和行
frm(0,1,xiexie,6);这样的能显示出来但是放进一个简单按S2加1就错了
disdata[0]=count/10;
frm(0,1,disdata,1);就错了不解啊
回复

使用道具 举报

10#
ID:67992 发表于 2014-11-3 20:16 | 只看该作者
  fujian2014 发表于 半小时前
void frmxy( char x , char y ,char *p ,uchar count)
        {
          uchar i;
          for(i=0;i<*p;i++)
         {
         
         if(y==0)x=x|0x80;
         else x=x|0xc0;
         write_com(x);
         write_data(*p);
         x++;
         p++;
        
        }
         }

count在函数体中没让它起作用

评分

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

查看全部评分

回复

使用道具 举报

11#
ID:67818 发表于 2014-11-3 22:59 | 只看该作者
dgahz 发表于 2014-11-3 20:16
count在函数体中没让它起作用

老师我想让1602显示动态的数据有啥方法吗;
我不会,你最好了,能用1602举个例子吗
回复

使用道具 举报

12#
ID:67818 发表于 2014-11-3 23:01 | 只看该作者
dgahz 发表于 2014-11-3 20:16
count在函数体中没让它起作用

1602我的程序发不过来,说要审核
回复

使用道具 举报

13#
ID:67992 发表于 2014-11-4 09:42 | 只看该作者
本帖最后由 dgahz 于 2014-11-4 09:55 编辑

void frmxy( char x , char y ,char *p ,uchar count)
        {
          uchar i;
                 char disdata[]="=00" ;
                  disdata[1]=count/10+0x30;
                  disdata[2]=count%10+0x30;
                 if(y==0)x=x|0x80;
         else x=x|0xc0;
         write_com(x);
          for(;*p!='\0';p++)
         {
                         write_data(*p);
         }
          for(i=0;i<3;i++)
                 {
          write_data(disdata[ i ]);
         }
        
        
回复

使用道具 举报

14#
ID:67992 发表于 2014-11-4 09:59 | 只看该作者
count只限于100变化内显示
回复

使用道具 举报

15#
ID:67818 发表于 2014-11-5 09:17 | 只看该作者
谢谢喽
回复

使用道具 举报

16#
ID:71774 发表于 2015-1-7 15:30 | 只看该作者
dgahz 发表于 2014-11-4 09:42
void frmxy( char x , char y ,char *p ,uchar count)
        {
          uchar i;

  disdata[1]=count/10+0x30;
                  disdata[2]=count%10+0x30;

我向您求教,求余后为什么都+0x30
回复

使用道具 举报

17#
ID:67992 发表于 2015-1-7 17:27 | 只看该作者
因为0的字符码是0x30.1是0x31,一直到9是0x39;
回复

使用道具 举报

18#
ID:67992 发表于 2015-1-7 17:28 | 只看该作者
因为0的字符码是0x30.1是0x31,一直到9是0x39;
回复

使用道具 举报

19#
ID:71774 发表于 2015-1-7 18:06 | 只看该作者
dgahz 发表于 2015-1-7 17:28
因为0的字符码是0x30.1是0x31,一直到9是0x39;

那为什么要加个0字符?请教!
回复

使用道具 举报

20#
ID:67992 发表于 2015-1-7 18:46 | 只看该作者
十六进制格式为0x数字。
回复

使用道具 举报

21#
ID:67992 发表于 2015-1-7 18:50 | 只看该作者

回复

使用道具 举报

22#
ID:67992 发表于 2015-1-7 18:51 | 只看该作者
百度1602字符手册
回复

使用道具 举报

23#
ID:71774 发表于 2015-1-7 18:58 | 只看该作者
dgahz 发表于 2015-1-7 18:46
十六进制格式为0x数字。

不明白为什么要加上这个代表0字符的十六进制数0x30?烦指导,初学。
回复

使用道具 举报

24#
ID:67992 发表于 2015-1-7 19:07 | 只看该作者
要显示0,输入0x30;显1输0x31;2输入0x32;3输入0x33;9输入0x39;
1+0x30=0x31;2+0x30=0x32;9+0x30=0x39;0+0x30=0x30
回复

使用道具 举报

25#
ID:67992 发表于 2015-1-7 19:20 | 只看该作者

回复

使用道具 举报

26#
ID:71774 发表于 2015-1-7 19:29 | 只看该作者
dgahz 发表于 2015-1-7 18:46
十六进制格式为0x数字。

谢了!在您的指导下基本明白了,原来ASCII码的0字符代码是十进制的48,1字符代码是十进制的49,2字符代码是十进制的50......,又因为十进制的48就是十六进制的0X30,所以都应加上0X30。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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