一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 4565|回复: 11
收起左侧

[其他综合] 请教C语言驱动1602的问题

[复制链接]
发表于 2011-9-8 22:00 | 显示全部楼层 |阅读模式
试写了一个4线驱动1602的程序能显示,但是不能用清屏和光标复位指令,只要用了这2条指令显示位置就不对了。请大家帮忙看看
#include<reg52.h>
#define un8 unsigned char
#define un16 unsigned int
sbit e= P0^2;
sbit rs=P0^3;
void lcdinit();    //1602初始化
void lcdcom(un8 com); //1602写指令
void lcddata(un8 dat); //1602写数据
void Delay(un16 xms);  
void Delay1(un16 xus);

void lcdinit()
{
  Delay(15);
   lcdcom(0x03);
    Delay(5) ;
     lcdcom(0x03);
      Delay(5);
   lcdcom(0x03);
        Delay(2);
    lcdcom(0x2); //4线模式
         Delay(1);
   lcdcom(0x06); //地址增量1,字符不动
           lcdcom(0x0f); //显示开,光标开,光标闪
               lcdcom(0x28);
      //lcdcom(0x10); //清屏
            // lcdcom(0x20); //光标复位(  就是这两条不能用,不知道是不是放的位置不对?)
  }
void lcdcom(un8 com)
{
un8 temp;
  temp=com;
   P0=com|0x0f;
    rs=0;
      Delay1(2);
       e=1;
        Delay1(2);
         e=0;
   
com=temp;
  P0=(com<<4)|0x0f;
   rs=0;
     Delay1(2);
      e=1;
       Delay1(2);
        e=0;
    }
void lcddata(un8 dat)
{
un8 temp1;
temp1=dat;
P0=dat|0x0f;
    rs=1;
Delay1(2);
e=1;
Delay1(2);
e=0;
dat=temp1;
P0=(dat<<4)|0x0f;
    rs=1;
Delay1(2);
e=1;
Delay1(2);
e=0;
}
void Delay(un16 xms)
{
un16 i,j;
for(i=xms;i>0;i--)
    for(j=120;j>0;j--);
}  
   
void Delay1(un16 xus)
{
un16 i,j;
for(i=xus;i>0;i--)
    for(j=10;j>0;j--);
}

void main()
{
  
  lcdinit();
      lcdcom(0xc5); //第2行第6位
   lcddata(0x41);
    lcddata(0x41);
        lcddata(0x41);
   lcdcom(0x80);//第1行第1位
   lcddata(0x42);
      lcddata(0x42);
          lcddata(0x42);
    while(1);
     
    }

附件中有PROTEUS7。7仿真文件和LEIL4文件 lcd.rar (27.68 KB, 下载次数: 660)
发表于 2011-9-9 00:34 | 显示全部楼层
记得是:
lcdcom(0x01); //清屏
lcdcom(0x02); //光标复位

执行后都要有延迟的。
发表于 2011-9-9 02:27 | 显示全部楼层
仿真都不成功的话,加点延迟
发表于 2011-9-9 07:35 | 显示全部楼层
记得是:
lcdcom(0x01); //清屏
lcdcom(0x02); //光标复位

执行后都要有延迟的。
huayuliang 发表于 2011-9-9 00:34 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



仿真都不成功的话,加点延迟
狗狗百里游 发表于 2011-9-9 02:27 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



      


void Delay1(un16 xus)LCD,LED,电源,充电器,可调电源,液晶模块,VFD,套件,1602,1604,2402,2004,12864,数控电源,白菜白光,avr,18650电池,LED手电,点阵,创意DIY,单片机制作,电池,秀,淘宝,论坛/ ]+ W, o  ~; t( K
{7 Z9 u- b- U0 i  U* I$ Q% e8 ^
un16 i,j;7 e9 a( T9 r2 r0 l, u
for(i=xus;i>0;i--)
  for(j=50;j>0;j--);M8数字电源(PWM  D/A),M8电子负载,M8数控电源,T26白光烙头控制器,T26做双路电流电压表,单片机技术论坛,电子类技术论坛,电子技术论坛,电子开发论坛,电子开源社区,一乐电子社区,一乐,yleee0 g6 g, N1 G, ^+ o$ J% m! E7 ^, x
}一乐网- a6 L8 b; `( N5 Y& H1 |8 @# f



      适当增加延迟一试!
 楼主| 发表于 2011-9-9 19:10 | 显示全部楼层
谢谢大家!我按大家给的建议试了还是不行。请看图片,第一张是没这两条指令的,显示很正常。第二张加了清屏和复位指令就不对了。 正常.jpg 错误.jpg
发表于 2011-9-9 20:37 | 显示全部楼层
晕倒 干嘛用P0口啊
p2多好不用加上啦 仿真其实没必要上拉把 要是实物
发表于 2011-9-10 07:21 | 显示全部楼层
本帖最后由 倪大德 于 2011-9-10 07:23 编辑
谢谢大家!我按大家给的建议试了还是不行。请看图片,第一张是没这两条指令的,显示很正常。第二张加了清屏 ...
WOSS1001 发表于 2011-9-9 19:10 [url=https://www.yleee.com.cn/images/common/back.gif]https://www.yleee.com.cn/images/common/back.gif[/url]



           应该是可以的!   不清楚你用的是啥编译器?


          适当改动延时,给你重新编译了下!

          lcd_s.rar (83.17 KB, 下载次数: 636)

         ee.JPG
发表于 2011-9-10 08:17 | 显示全部楼层
看来单片机频率太快也是个问题
 楼主| 发表于 2011-9-10 19:11 | 显示全部楼层
回复 7# 倪大德


    谢谢!真是怪了,我用的是KEIL4就是不行
 楼主| 发表于 2011-9-10 20:48 | 显示全部楼层
现在怀疑是我电脑的问题,请倪版再帮我把下 lcd.rar (772 Bytes, 下载次数: 645) 面的文件编译一下。我编译后显示就是不正常。麻烦了,谢谢!

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-4-29 02:17 , Processed in 0.061362 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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