搜索
bottom↓
回复: 3

新手求教,延时程序问题

[复制链接]

出0入0汤圆

发表于 2013-1-25 17:17:40 | 显示全部楼层 |阅读模式
/////////////////1602显示///////////
#include<reg52.h>

#define uint unsigned int
#define uchar unsigned char

sbit wela = P2^7;   
sbit dula = P2^6;

uchar code LCD1602firstline[] = " I LOVE YOU ";
uchar code LCD1602secondline[] = " WELCOME ";

sbit LCDRS = P3^5;
sbit LCDWR = P3^6;
sbit LCDEN = P3^4;

void Delay1MS(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
        {
                        for(y=124;y>0;y--);
  }
/*uint i = 124;
        while (z--)   //为什么改成这样就不可以了呢
        {
                i--;
        }*/
}

void WriteCom1602(uchar com)
{
        LCDEN = 0;
        LCDRS = 0;
        LCDWR = 0;
        P0 = com;
        LCDEN = 1;
        Delay1MS(1);
        LCDEN = 0;
}

void WriteDat1602(uchar dat)
{
        LCDEN = 0;
        LCDRS = 1;
        LCDWR = 0;
        P0 = dat;
        LCDEN = 1;
        Delay1MS(1);
        LCDEN = 0;
}
void Writechar1602(uchar x , uchar y , uchar date )
{
        x &= 0x0f;
        y &= 0x01;
       
        if (y==1)
        {
                x += 0x40;
  }
        x += 0x80;
       
        WriteCom1602(x);
        WriteDat1602(date);
       
}

void LCD1602Init()
{
  LCDEN = 0 ;
        WriteCom1602(0x38);
        WriteCom1602(0x01);
        WriteCom1602(0x06);
        WriteCom1602(0x0c);
}
void main()
{
        uint i = 0 ;
       
        P0 = 0xff ;                     //ÊýÂë¹Ü¹Ø¶Ï
        wela = 1 ;
        wela = 0;
        Delay1MS(5);
       
        LCD1602Init();
        for (i=0 ; i<12 ; i++)
        {
                Writechar1602(i ,0 , LCD1602firstline);
        }
        for (i=0 ; i<9 ; i++)
        {
                Writechar1602(i , 1, LCD1602secondline);
        }
       
        while(1);
       
}



/*
汗,今天我调了好久才发现好像延迟函数出了问题
上面Delay1MS()改成下面之后1602不能显示,是不是我延时函数写的不对
新手求教,还有一般延时函数怎么写好呢
*/

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-1-25 17:22:03 | 显示全部楼层
uint i = 124;
        while (z--)   //为什么改成这样就不可以了呢
        {
                i--;
        }
这个循环在干什么?
z一直减到0退出循环,i在每次循环里就减一次
看起来是时间不够

出0入0汤圆

发表于 2013-1-25 17:31:07 | 显示全部楼层
显然这个延时时间不够长嘛
while(z--)
    for(i=124;i>0;i--);

出0入0汤圆

 楼主| 发表于 2013-1-25 17:52:52 | 显示全部楼层
谢谢各位 我知道了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 09:03

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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