74HC164应用实例驱动数码管两例电路图和源程序.docx

上传人:b****1 文档编号:13670747 上传时间:2023-06-16 格式:DOCX 页数:14 大小:182.95KB
下载 相关 举报
74HC164应用实例驱动数码管两例电路图和源程序.docx_第1页
第1页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第2页
第2页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第3页
第3页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第4页
第4页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第5页
第5页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第6页
第6页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第7页
第7页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第8页
第8页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第9页
第9页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第10页
第10页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第11页
第11页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第12页
第12页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第13页
第13页 / 共14页
74HC164应用实例驱动数码管两例电路图和源程序.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

74HC164应用实例驱动数码管两例电路图和源程序.docx

《74HC164应用实例驱动数码管两例电路图和源程序.docx》由会员分享,可在线阅读,更多相关《74HC164应用实例驱动数码管两例电路图和源程序.docx(14页珍藏版)》请在冰点文库上搜索。

74HC164应用实例驱动数码管两例电路图和源程序.docx

74HC164应用实例驱动数码管两例电路图和源程序

74HC164应用实例:

驱动数码管两例(电路图和源程序)

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

4HC164应用实例:

驱动数码管两例(电路图和源程序)

 

文章编号:

100816210758

文章分类:

电路 > 电子元件

点击:

...

关键词:

74HC164

文章来源:

百合电子工作室收集整理

摘要:

74HC164应用实例:

驱动数码管的两个实例分别提供了汇编源程序和C源程序...

实例1

  74HC164是串行输入,并行输出接口器件,可用在单向的并行输出/并行地址锁存等.74HC164因为价格便宜,容易使用特别适合使用在在需要用到数码管显示IO口又比较紧张的电子产品中,下面浅谈使用方法:

1.首先先了解他的引脚功能和逻辑图,如下图:

图1 引脚名称和用途

 

图2真值表

通过真值表我们可以了解到,A,B两个输入端是互锁的,CLK上升沿时数据移入移位寄存器中,CLEAR为清零用的,接低电平时所有端口都输出低电平,了解了真值表之后开始运用了,先给出如下原理图:

 

图3原理图

图中,采用义隆的EM78P153作为控制芯片,P50作为CLK时钟信号,注意平时数据不传输时,时钟信号是不发送的应一直保持低电平或者高电平,数据需要传输的时候才输出时钟信号^_^,继续P51作为移位数据输出端,接到74HC164的B端,A端接高电平,当然也可以AB端短路,然后连接到DATA移位数据端,P52作为数码管的选通信号(也可以叫消隐^_^),作用是使数据传输过程暂时关闭显示,以免显示出不需要的数据,原因是应为164不带锁存功能,数据传输过程是一位一位的向高位移位输出的,所以要等数据全部移入后才打开始点亮数码管.

注意了哦,通过查看164的规格书发现,164输出高电平电流比输出低电平电流要小,亦称灌电流大,扇出电流弱,所以适合选用共阳数码管,如图,本人偷懒没有画出那个数码管的8字

该介绍的介绍的差不多了,废话少说,该开始干活了,任务是:

 显示0-9每秒+1,到9后又返回0,一直循环显示,根据任务得到如下流程图:

1. 显示部分:

将需要显示的数值送入A==>查表求得显示段码==>将段码逐位移入164==>8位移完后点亮数码管==>延时==>返回第一步执行

2.中断部分:

 

 进入中断==>保存现场(以备调查取证,送你入狱^_^)==>重置TCC==>够1秒钟将需要显示的数据+1,并重置,不够就退出;

根据以上要求就开始写代码调试了,要注意一点,数据移位时一定要记得高位在前哦,否则显示错误别怪我没有说清楚,我当年实验时就因为这个数据移位方向反了排查了半天,甚至以为是时钟频率不对,又以为时许不对.....搞了半天,NND后来重看DATASHEET才发现,原来是低级错误啊,呜呼哀哉.......,希望你不要重蹈我覆辙,哎哟!

!

谁!

谁!

谁扔砖头上来?

 啥?

你扔的?

我废话太多.........,那俺少来两句,继续上菜,咦好像没啥可说的了,上源程序吧

 

1.;中断部分:

  

2.  

3.;;;;;;;;;;中断;;;;;;;;  

4.INTPUT:

  

5. MOV TEMPA, A;  

6. MOV  A,@130;  

7.  MOV TCC,A;255-130=125  

8.  CLR RF;  

9.  ;;;;;此处填写250Us处理程序  

10.  BS WKREG,T500US  

11.;;;;;;;;;;;;;;;;;;;;;;;;;  

12.  DJZ R1MS  

13.  JMP INTEXT;  

14.   MOV A,@4  

15.  MOV R1MS,A;重置  

16.  BS WKREG,T1MS  

17.  ;;;;;;;此处填写1ms处理程序  

18.    

19. ;;;;;;;;;;;;;;;;;;;;;;;;;;  

20.  DJZ R20MS  

21.  JMP INTEXT;  

22.   MOV A,@20  

23.   MOV R20MS,A;重置  

24.  ;;;此处填写1秒处理程序  

25. BS WKREG,T20MS  

26. ;;;;;;;;;;;;;;  

27.  DJZ R1S  

28.  JMP INTEXT;  

29.  MOV A,@50  

30.  MOV R1S,A;  

31.  ;;;;;;;;;  

32.  INC NUMBER  

33.  MOV A,NUMBER  

34.  SUB A,@10  

35.  JBS SR,2   

36.  JMP INTEXT  

37.  MOV A,@0  

38.  MOV NUMBER,A  

39.  

40.    

41. INTEXT:

  

42.  MOV A,TEMPA;  

43.  RETI;;;;;;;;;;;;;;;;;;;;;  

44.  

45.   

46.  

47.   

48.  

49.;显示部分:

  

50.  

51.;==============TXDATA==============  

52.TXDATA:

  

53. BS P5,CC1  

54. MOV A,@8  

55. MOV DATALOP,A;  

56.TXLOP:

   

57. BC WKREG,T500US  

58. BS P5,CLK;clk=高  

59. NOP;  

60. NOP  

61. JBS DATA_BUF,7   

62. JMP $+3  

63. BS P5,DATA;  

64. JMP $+2  

65. BC P5,DATA  

66.DD1MS:

  JBS WKREG,T500US  

67. JMP $-1  

68. BC P5,CLK  

69. BC WKREG,T500US  

70. JBS WKREG,T500US  

71. JMP $-1;  

72. RLC DATA_BUF  

73. DJZ DATALOP  

74. JMP TXLOP  

75. ;;;;;;;;;;  

76. BC WKREG,T500US  

77. BS P5,CLK;clk=高  

78. BC WKREG,T500US  

79. JBS WKREG,T500US  

80. JMP $-1;  

81. BC P5,CLK   

82. ;;;;;;;;  

83. BC P5,CC1  

84.   

85. RET;;;;;;;  

86.  

87.;数据查表  

88.;===============DSPTBL============  

89.DSPTBL:

 ADD PC,A  

90. RETL @0B01000000;0  

91. RETL @0B01111001;1  

92. RETL @0B00100100;2  

93. RETL @0B00110000;3  

94. RETL @0B00011001;4  

95. RETL @0B00010010;5  

96. RETL @0B00000010;6  

97. RETL @0B01111000;7  

98. RETL @0B00000000;8  

99. RETL @0B00010000;9  

100.   

101.  

102.;循环体部分;  

103.  

104.;;;;;;;;;;主程序;;;;;;;;;;;   

105.MLOOP:

   

106. MOV A,NUMBER  

107. CALL DSPTBL  

108. MOV DATA_BUF,A  

109. CALL TXDATA  

110. BC WKREG,T1MS  

111. JBS WKREG,T1MS  

112. JMP $-1  

113. NOP;  

114.          

115.JMP MLOOP;;;;;;;;;;;;;;;;;;;;  

实例2

  在实际应用中驱动数码管常用的方式分动态扫描和静态驱动。

动态扫描方式需要x+y个IO(x*y个数码管的情况,一般x=8,y=位数)这种方法很浪费MPU的IO端口对于2051等20脚的芯片就很难实现。

静态显示驱动法,即是指每一个LED灯分别对应一个独立的IO驱动口,这种方法适用较少LED的驱动,不适合数码管驱动。

 

     还有一种利用74HC164来驱动的方法。

74HC164是比较典型的移位寄存器,该移位寄存器有一个数据输入端口、一个时钟信号端口和八个输出端口。

这种方法只需要2个MPU的IO端口,而且在锁存器件这2个端口还可以干别的事情。

    74HC164驱动共阴、共阳数码管都很方便。

驱动要点:

 1、上升沿写入串行数据:

    CLK=0; 

     DAT=num&0x01;

     CLK=1;

  2、写入数据的数码管编码(指代码中的tab[])

     串行数据是FIFO先进先出,也就是先写高位,移位放入。

 

    电路如图:

3、 程序源代码:

 

1.//共阴数码管74HC164串行驱动   

2.  

3.#include   

4.  

5.#define uint unsigned int   

6.  

7.#define uchar unsigned char   

8.  

9.sbit DAT=P3^7; //模拟串口数据发送端   

10.  

11.sbit CLK=P3^4;//模拟时钟控制端   

12.  

13.   

14.  

15.uchar code tab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xff,0xf6};//0-9,-,全灭   

16.  

17.   

18.  

19.void sendbyte(uchar byte)  

20.  

21.{     /

22.  

23.        uchar num,c;  

24.  

25.        num=tab[byte];  

26.  

27.  for(c=0;c<8;c++)  

28.  

29.        {  

30.  

31.    CLK=0;  

32.  

33.  DAT=num&0x01;  

34.  

35.  CLK=1;  

36.  

37.        num>>=1;  

38.  

39.         

40.  

41.         

42.  

43.        }  

44.  

45.   

46.  

47.}  

48.  

49.   

50.  

51.   

52.  

53.void delay_50ms(unsigned int t)  

54.  

55.{  

56.  

57.unsigned int j;   

58.  

59.for(;t>0;t--)  

60.  

61.  for(j=6245;j>0;j--)  

62.  

63.{;}  

64.  

65.}  

66.  

67.   

68.  

69.main()  

70.  

71.{  

72.  

73.   

74.  

75.   

76.  

77.unsigned char h;  

78.  

79.  while

(1){  

80.  

81.  for(h=0;h<10;h++){  

82.  

83.      delay_50ms

(1);  

84.  

85.      sendbyte(h);  

86.  

87.          

88.  

89.   

90.  

91.  delay_50ms(4);  

92.  

93.  }  

94.  

95.  h=0;  

96.  

97.    }  

98.  

99.     

100.  

101.}  

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2