关于1602的电子时钟并联可以,为啥改成串联就不显示了

2019-07-15 18:46发布

#include<reg52.h>
//#include <stdio.h>
#include <intrins.h>
sbit R=P2^3;
sbit lcdrs=P2^0;
sbit lcdrw=P2^1;
sbit lcden=P2^2;
void init();
void delay(unsigned int z);
void write_com(unsigned char com);
void write_data(unsigned char dat);
void display();
unsigned int num,a,b,c,s;
unsigned int sum,miao,fen,shi,second,min,hour;
unsigned char code table[]={"0123456789:'c"};
unsigned char code table1[]={"SunMonTueWedThuFriSat"};
void main()
{
          s=second=min=hour=0;  
init();
SCON=0x00;
TH1=(65536-5000)/256;
              TL1=(65536-5000)%256;
TMOD=0X10;
EA=1;
ET1=1;
TR1=1;     
      R=0; _nop_(); _nop_(); R=1;        //   这条 是我改过的, 原来并行通信时,这条 是没有的   
        while(1)
          display();
}   
void init()
{
            lcden=0;
         lcdrw=0;
write_com(0x01);   
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x80);
}
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=70;y>0;y--);
}
void write_com(unsigned char com)
{
lcdrs=0;  
            SBUF=com;         //       原来并行通信时,  这条 是  P1=com;         
         P1=com;         
          while(ti==0);TI=0;  //   这条 是我改过的, 原来并行通信时,这条 是没有的  
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(unsigned char dat)
{
lcdrs=1;      
             SBUF=dat;            //     原来并行通信时,  这条 是  P1=com;
             while(TI==0);TI=0;        //     这条 是我改过的, 原来并行通信时,这条 是没有的  
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void show1(void) interrupt 3  
{
   unsigned int  q;
   TH1=(65536-5000)/256;
    TL1=(65536-5000)%256;
    q++ ;
    if(q==200)
  {
    q=0;
   second++;
   if(second==60)
   {
    second=0;
     min++;
    if(min==60)
    {
     min=0;
     hour++;
     if(hour==24)
     {
      hour=0;
      s++;
      if(s==7) s=0;
     }
    }
    }
   }
}
void display(void)
{
  unsigned int a1,a2,b1,b2,c1,c2;
write_com(0x80);
  a1=hour/10;write_data(table[a1]);
  a2=hour%10;write_data(table[a2]);
  write_data(table[10]);
  b1=min/10; write_data(table[b1]);
  b2=min%10; write_data(table[b2]);
  write_data(table[10]);
  c1=second/10; write_data(table[c1]);
  c2=second%10; write_data(table[c2]);
  write_com(0xc5); write_data(table1[3*s]);  
  write_data(table1[3*s+1]);write_data(table1[3*s+2]);
}

关于1602的电子时钟并联可以,为啥改成串联就不显示了   上面已经把改过的都标注过了  ,其他地方都没变动,哪位大神看见了  帮我看看是哪里的问题   谢谢了
串联图.gif 并联.gif

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
君羽落
1楼-- · 2019-07-15 23:24
这不是引脚都不一样了吗
hamelate
2楼-- · 2019-07-16 04:38
君羽落 发表于 2014-8-18 21:17
这不是引脚都不一样了吗

     一个是并行  一个串行   就是不一样啊

阿信509
3楼-- · 2019-07-16 05:23
你移动完数据忘了锁存了~~
hamelate
4楼-- · 2019-07-16 08:27
 精彩回答 2  元偷偷看……
阿信509
5楼-- · 2019-07-16 09:39
对不起了兄弟,这个芯片没有锁存,那么在移位时,8位输出端的数据是在随时变化着的,就是说这个芯片不能这么用,我没看手册,以为这个芯片有锁存呢
你换个74HC595试试看吧
hamelate
6楼-- · 2019-07-16 13:15
阿信509 发表于 2014-8-19 19:11
对不起了兄弟,这个芯片没有锁存,那么在移位时,8位输出端的数据是在随时变化着的,就是说这个芯片不能这 ...

                  没锁存  那不就相当于并行了吗       写个8位数字到SBUF里面,然后到TXD ,再到 74LS164  ,出来后还是8位数字,就是为了省几个io口 ,这样解释正确吗    我就是按照书上写的程序 ,但是就是没反应  

一周热门 更多>