74HC138是3-8译码器,74HC245是八总线收发器,74HC595是八位移位寄存器,TPIC6B595和74HC595的功能类似,输出电流能力要大很多(500mA),但管脚不兼容。
74HC138的1(A)、2(B)、3(C)脚是三位二进制码的输入端,4(G2A)、5(G2B)、6(G1)脚都是使能控制脚,只要G2A和G2B中有一个为高电平或者是G1为低电平,74HC138的所有输出脚就都是高电平,只有当G1为高电平、同时G2A和G2B都是低电平时,74HC138才能正常译码,15脚(Y0)、14脚(Y1)、13脚(Y2)、12脚(Y3)、11脚(Y4)、10脚(Y5)、9脚(Y6)、7脚(Y7)是8路译码输出,16脚接正电源,8脚接电源地;
74HC245的1脚(DIR)为数据传输方向控制脚,2脚~9脚(A1~A8)和11脚~11脚(B1~B8)均为发送接收脚,当1脚为高电平输入时,数据从A1~A8传输到B1~B8,1脚为低电平输入时,数据从B1~B8传输到A1~A8,19脚(OE)为使能控制脚,当OE为高电平时,74HC245不工作,为低电平时进行数据传输,20脚接正电源,10脚接电源地;
其他的后边再补充,临时有点事。
这要从74hc595锁存方式说起,它是串行输入转并行输出的8位数据锁存器,需要串行输入8位二进制,也就是说要求将8位二进制dat,一位一位地送入74hc595数据输入端SD,且每输入一位需要一个时间脉冲CLK,共需要8个时钟脉冲才能将dat的8位数全部输入到74hc595内,再转换成并行8位数据。所以,要从dat的高位取出一位,送入SD,SER=dat&0x80;就是取出高位,然后还是将dat向左移一位,即将下一位移向高位,准备下次再取出送放SER。程序中肯定有移位一行或两行的。
而SER是定义为端口的,即是单片机接到74hc595的SD的那个I/O脚,假设是接到P1.1,那程序的前面就应该有一行是:sbit SER=P1.1;
这样,SER是一个位,并不是8位二进制,而你理解成8位二进制数了,所以,就不理解SER=dat&0x80这行的意义了。