打印

还是电子钟的问题,用1602显示。出现乱码。大家帮忙看看。

[复制链接]
2837|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liaobiaoxing|  楼主 | 2009-8-29 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liaobiaoxing 于 2009-8-29 21:53 编辑

自己看了半天,终于找到错误了。显示正确了,谢谢回复贴子的人。


#include<reg52.h>
sbit E=P2^7;
sbit RS=P2^5;
sbit RW=P2^6;
unsigned char show[8]={'0','0','-','0','0','-','0','0'};
unsigned int count=0,sec=0,min=0,hour=0;

void delay(unsigned char x)      
{  unsigned int a,b;
    for(a=0;a<=x;a++)
    for(b=0;b<=10;b++);
}

void time0_init()
{  EA=1;
    ET0=1;
    TMOD=0X01;
    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    TR0=1;
}


void time0_int() interrupt 1
{   TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;
     count++;
     if(count==10)
      {  count=0;
           sec++;
          if(sec==60)
             {  sec=0;
                min++;
                  if(min==60)
                    { min=0;
                      hour++;
                     if(hour==24)
                       {  hour=0;
                                      }
                            }
                      }
              }

show[0]=0x30+hour/10;
show[1]=0x30+hour%10;
show[2]='-';
show[3]=0x30+min/10;
show[4]=0x30+min%10;
show[5]='-';
show[6]=0x30+sec/10;
show[7]=0x30+sec%10;
}


unsigned char convert(unsigned char input)      //由于板件的数据位跟P0口的数据位接反了,这是转换程序。
{  unsigned char i,output=0,temp;
   
    for(i=0;i<=7;i++)
       {  temp=(input>>i)&0x01;
             output|=(temp<<(7-i));
        }
  return output;
}


void write_com(unsigned char com)
{   RS=0;
     RW=0;
     P0=convert(com);
     E=1;
     delay(1);
     E=0;
     delay(1);
}


void write_data(unsigned char indata)
{   RS=1;
     RW=0;
     P0=convert(indata);
     E=1;
     delay(1);
     E=0;
     delay(1);
}

void c1602_init()
{  write_com(0x38);
    write_com(0x0c);
    write_com(0x06);
    write_com(0x01);
}

void c1602_char(unsigned char x,unsigned char y,unsigned char charvaule)
{  if(y==1)
      write_com(0x80+x);
  else
   write_com(0xc0+x);
   write_data(charvaule);
}

void c1602_str(unsigned char space,unsigned char hang,unsigned char *str)
{    while(*str!='\0')
     c1602_char(space++,hang,*str++);
}

void main()
{ c1602_init();
time0_init();
  while(1)
  {
c1602_str(3,1,show);
   }
}

相关帖子

沙发
一级菜鸟| | 2009-8-29 10:38 | 只看该作者
P0当IO口使用需要加上拉

使用特权

评论回复
板凳
liaobiaoxing|  楼主 | 2009-8-29 14:55 | 只看该作者
P0当IO口使用需要加上拉
一级菜鸟 发表于 2009-8-29 10:38

这个我知道的,已经加了上拉的。

使用特权

评论回复
地板
一级菜鸟| | 2009-8-29 17:45 | 只看该作者
这个我知道的,已经加了上拉的。
liaobiaoxing 发表于 2009-8-29 14:55


那么就把你送进LCD的数转成ASC-II码再送

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

13

帖子

0

粉丝