搜索
bottom↓
回复: 6

请教:1602已经写过的地址要重新写别的数据怎么操作?

[复制链接]

出0入0汤圆

发表于 2012-5-16 17:33:52 | 显示全部楼层 |阅读模式
很多例程都给出显示欢迎或者LOGO什么的就没有下文了,现在的问题是,比如说我在第一行第五列的地方先显示为“5”,后来要改为显示“0”,应该怎样操作?试过直接指定该地址写“0”,但结果是光标移到了此处,但只是“擦去”了“5”,却没有显示“0”,请教此时我就如何操作?谢谢。

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-5-16 17:37:30 | 显示全部楼层
肯定可以啊,要是人家要显示时间不是就有改变吗?

出0入0汤圆

发表于 2012-5-16 17:46:56 | 显示全部楼层
检查程序吧 先控制字 定位到改变字符的位置 再发数据

出0入0汤圆

 楼主| 发表于 2012-5-17 09:58:03 | 显示全部楼层
#include <reg51.h>
#define uchar unsigned char
uchar s,m,h;
uchar code shuzi[]={"0123456789"};
sbit rs=P2^0;
sbit en=P2^1;
sbit kb=P2^2;

void delay5ms(void)   
{
    unsigned char a,b;
    for(b=185;b>0;b--)
        for(a=12;a>0;a--);
}



void xiezhiling(uchar zhiling)
{
        en=1;
        rs=0;
        P0=zhiling;
        delay5ms();
        en=0;
}

void xieshuju(uchar shuju)
{
        en=1;
        rs=1;
        P0=shuju;
        delay5ms();
        en=0;
}
void hangliezi(uchar hang,uchar lie,uchar zhi)
{
        if(hang==1)
        {
                xiezhiling(lie+0x7f);
                xieshuju(shuzi[zhi]);
        }
        else if(hang==2)
        {
                xiezhiling(lie+0xbf);
                xieshuju(shuzi[zhi]);
        }
}

main()
{
        xiezhiling(0x06);
        xiezhiling(0x0f);
        xiezhiling(0x38);
        xiezhiling(0x01);
        TMOD=0X01;
        EA=1;
        ET0=1;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=1;
        while(1);
}
void timer0() interrupt 1
{
        static uchar  m;       
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        m++;
        if(m==20)
        {
                s++;
                if(s==60)
                {
                        s=0;
                        m++;
                        if(m==60)
                        {
                                h++;
                                if(h==24)
                                        h=0;
                hangliezi(1,1,shuzi[h/10]);
                hangliezi(1,2,shuzi[h%10]);
                        }
                hangliezi(1,4,shuzi[m/10]);
                hangliezi(1,5,shuzi[m%10]);
                }
                hangliezi(1,7,shuzi[s/10]);
                hangliezi(1,8,shuzi[s%10]);
        }
}


这是我的程序,我希望在第一行第一列显示小时的十位,第一行第二列显示小时个位,第一行第三列显示分钟十位,依次类推,但结果是光标一直定位在秒钟位闪烁,没有显示。

出0入0汤圆

 楼主| 发表于 2012-5-17 10:52:45 | 显示全部楼层
调用以上程序写的按键控制就可以,定时器就不行

出0入0汤圆

 楼主| 发表于 2012-5-17 13:32:12 | 显示全部楼层
已经搞定,是程序的问题,这样写就好了:
#include <reg51.h>
#define uchar unsigned char
uchar i=0,s,m,h;
uchar code shuzi[]={"0123456789"};
uchar code zifu[]={"00-00-00"};
sbit rs=P2^0;
sbit en=P2^1;
sbit kb=P2^2;

void delay5ms(void)   
{
    unsigned char a,b;
    for(b=185;b>0;b--)
        for(a=12;a>0;a--);
}



void xiezhiling(uchar zhiling)
{
        en=1;
        rs=0;
        P0=zhiling;
        delay5ms();
        en=0;

}

void xieshuju(uchar shuju)
{
        en=1;
        rs=1;
        P0=shuju;
        delay5ms();
        en=0;

}
void hangliezi(uchar hang,uchar lie,uchar num)
{
        if(hang==1)
        {
                xiezhiling(lie+0x7f);
                xieshuju(shuzi[num]);
        }
        else if(hang==2)
        {
                xiezhiling(lie+0xbf);
                xieshuju(shuzi[num]);
        }
}

main()
{
        uchar m;
        xiezhiling(0x38);
        xiezhiling(0x0d);
        xiezhiling(0x06);
        xiezhiling(0x01);
        xiezhiling(0x80);
        for(m=0;m<8;m++)
        {
                xieshuju(zifu[m]);
        }
        TMOD=0x01;
        EA=1;
        ET0=1;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=1;
        while(1)
        {
                if(i==20)
                {
                        i=0;
                        s++;
                        if(s==60)
                        {
                                s=0;
                                m++;
                                if(m==60)
                                {
                                        m=0;
                                        h++;
                                        if(h==24)
                                                h=0;
                                        hangliezi(1,1,h/10);
                                        hangliezi(1,2,h%10);
                                }
                                hangliezi(1,4,m/10);
                                hangliezi(1,5,m%10);
                        }
                        hangliezi(1,7,s/10);
                        hangliezi(1,8,s%10);                       
                }
        }
}
void timer0()interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        i++;
}


出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-27 01:15

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

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