实例1
- /****************************************************************
- 作用: 发送一个字节
- 入口参数: number ;出口参数: 无
- 调用全局变量: 无
- 使用前需定义好clk_164 ,ab_164的管脚。
- *******************Transmit and Recive ********************/
- void Transmit164(unsigned char number) // Transmit a byte;
- {unsigned char i="8";
- do{i--;
- CLK_164=0;
- AB_164=(bit)(number&0x80);
- number="number"<<1;
- CLK_164=1;
- }while(i!=0);
- }
- /******************************************************/
- // 用74hc164发送一位。
- void Transmit1Bit(unsigned char number) // Transmit a bit from 74hs164
- {CLK_164=0;
- AB_164=(bit)(number&0x80);
- CLK_164=1;
- }
实例2
- /**********************************************************/
- 下面是汇编写的程序,在pic16系列中编译通过。
- ;***************************************************************SUB_TRANSMIT发送子程序。
- ;入口参数:W
- ;出口参数:无
- ;所用的参数:Transmit_cnta Transmittb
- ; 扩展74LS164 LS164_CLK LS164_AB
- ; #define LS164_CLK XX.X
- ; #define LS164_AB XX.X
- ;*****************************************************************
- SUB_TRANSMIT BCF STATUS,RP1 ;BANK0
- BCF STATUS,RP0
- MOVWF Transmit_cnta ;W--》COUNTA,左移一位---》RA2
- MOVLW D'8'
- MOVWF Transmittb
- AGA_LI1 RRF Transmit_cnta,1
- BTFSC STATUS,C ;IF C="1" THEN RA2<---1 ELSE 0--->RA2
- GOTO SETBRA2
- BCF LS164_AB
- GOTO XIA_DISPLAY1
- SETBRA2 BSF LS164_AB
- XIA_DISPLAY1 NOP
- BSF LS164_CLK
- NOP
- BCF LS164_CLK
- NOP
- DECFSZ Transmittb,1
- GOTO AGA_LI1
- CLRWDT
- RETURN
- ;*************************************************************************
实例3
- #include "reg52.h"
- #define uint unsigned int
- #define uchar unsigned char
- sbit DAT=P1^0;
- sbit CLK=P1^1;
- uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0xe7f,0xff,0x00};//0-9,-,全灭
- void sendbyte(uchar byte)
- {
- uchar num,c;
- num=tab[byte];
- for(c=0;c<8;c++)
- {
- CLK=0;
- DAT=num&0x01;
- CLK=1;
- num>>=1;
- }
- }
- void delay_50ms(unsigned int t)
- {
- unsigned int j;
- for(;t>0;t--)
- for(j=6245;j>0;j--)
- {;}
- }
- main()
- {
- unsigned char h;
- while(1){
- for(h=0;h<10;h++){
- delay_50ms(1);
- sendbyte(h);
- delay_50ms(10);
- }
- h=0;
- }
- }
实例4
- ;-------------------------------------------------------------
- ;单片机驱动74LS164/74HC164的一个示例
- ;74HC164是串入并出的数据移位模块,在其时钟端(CK)每送入一个时钟
- ;脉冲,则其当前的数据线(DT)状态即被移位至输出端输出,164的数据
- ;在时钟上升沿被锁存,输出由A向H依次移位
- ;------------------------------------------------------------
- ;送一个字节数据到164的过程
- ;R0----要送出的数据/指令字节
- ;-----------------------------------------------------------
- SENDTO164:
- PUSH R0
- PUSH R1
- CLRBIT CK_164 ;set clock line is low
- NOP
- NOP
- CLRBIT DT_164 ;set data line is low
- LD R1,#08H
- SENDA_164:
- RLC R0 ;right shift R0,bit0 into C
- SETBIT DT_164 ;set data line
- JR C,SENDB_164 ;if C=1,skip
- CLRBIT DT_164 ;clear data line
- SENDB_164:
- NOP
- NOP
- SETBIT CK_164 ;send one clock pulse
- NOP
- NOP
- NOP
- CLRBIT CK_164 ;
- DEC R1
- JR NZ,SENDA_164
- SEND164_BACK:
- POP R1
- POP R0
- RET