关于1602的电子时钟并联可以,为啥改成串联就不显示了
时间:10-02
整理:3721RD
点击:
#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的电子时钟并联可以,为啥改成串联就不显示了 上面已经把改过的都标注过了 ,其他地方都没变动,哪位大神看见了 帮我看看是哪里的问题 谢谢了


//#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的电子时钟并联可以,为啥改成串联就不显示了 上面已经把改过的都标注过了 ,其他地方都没变动,哪位大神看见了 帮我看看是哪里的问题 谢谢了


这不是引脚都不一样了吗
一个是并行 一个串行 就是不一样啊
你移动完数据忘了锁存了~~
还是不明白, 怎么锁存呀 ,望多多指教 ,小弟洗耳恭听
对不起了兄弟,这个芯片没有锁存,那么在移位时,8位输出端的数据是在随时变化着的,就是说这个芯片不能这么用,我没看手册,以为这个芯片有锁存呢
你换个74HC595试试看吧
没锁存 那不就相当于并行了吗 写个8位数字到SBUF里面,然后到TXD ,再到 74LS164 ,出来后还是8位数字,就是为了省几个io口 ,这样解释正确吗 我就是按照书上写的程序 ,但是就是没反应
8位移动完后输出才和你预想的一样,但是才这过程中,输出的8位随时都在变化呢,会不会影响了呀
哥 ,我加下你的qq吧 这样聊 ,好没效果啊 我的qq 1322685712 别人都说串联好整,为啥我感觉好难呀
但是才这过程中,输出的8位随时都在变化呢, 所以你建议我找个锁存的 芯片 代替下 是吧
在吗兄弟,我加你好友了
