74HC164特性  是一种8位串转并口的控制芯片,用于数码管和液晶显示等.
            工作电压2--6V
       管脚定义:

 1) A,B管脚:与门数据输入引脚。
  2)QA---QH 数据并口输出引脚
  3) CLR 低电平时,数据清零,不能输入
  4) CLK 数据输入时钟,上升沿读取串口数据


 :
          
时序图:

注意脉冲宽度:


本51单片机用的是12MHZ晶振,每条指令最小执行时间1uS》》1ns ,可以根据时序图随便使用.
原理图:

程序代码:
ORG 00H            ;程序起始地址00H
START:
       MOV 50H,#9          ;立即数9放入50H单元  第一个数码管显示9
MOV 51H,#4          ;立即数4放入51H单元 第二个数码管显示4
MOV R0,#50H         ;R0=50 
MOV R1,#60H         ;R1=60 
MOV R2,#2
DP0:
MOV DPTR,#TABLE   ;将码表首地址给DPTR指针
MOV A,@R0          ;将50H单元中的9给A
MOVC A,@A+DPTR   ;查表得到(9+码表首地址)合成的地址中的数给累加器A
MOV @R1,A         ;把立即数9的段码,放入 60H单元中
INC R1              ;R1=61H
INC R0              ;R0=51H
DJNZ R2,DP0        ;如果R2不等于0,则跳转到DP0
      //---------------从上面计算可得到: (60H)=10H,(61H)=19H
        MOV R0,#60H        ;R0=60重新建立映射关系
MOV R1,#2           ;数码管有2个段码
DP1:
       MOV R2,#8           ;一个71HC164移位寄存器需要移动8次,以产生并口输出数据给数码管
MOV A,@R0          ;(60H)中的数9的段码,赋给累加器A
DP2:
        RLC A               ;带进位标志的左移操作
MOV P2.0,C          ;串行输出一位段码数据
   CLR P2.1            ;
SETB P2.1           ;来个上升沿以产生移位时钟, 每次来这个脉冲,移位寄存器上的数往后面移动一位,原来A=1,
                             ;来个脉冲后B=1,在来个脉冲后,C=1,以此类推。。。。。
DJNZ R2,DP2        ;判断8位段码是否输出完整
INC R0              ;下一个需要输出的段码地址加1
DJNZ R1,DP1        ;判断2个段码是否输出完毕
JMP $               ;程序停在此处
TABLE:                      ;数码管码表
    DB40H,79H,24H,30H,19H  ;0,1,2,3,4
DB12H,02H,78H,00H,10H  ;5,6,7,8,9
END
