找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7433|回复: 8
打印 上一主题 下一主题
收起左侧

51单片机74HC164串口控制数码管显示

  [复制链接]
跳转到指定楼层
楼主
ID:59583 发表于 2014-3-13 04:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
转自:http://www.51hei.com/mcu/2655.html

一般数码管需要接7个脚才能显示,如果用单片机本身的I/O口,虽然可以但是浪费宝贵的i/O口资源。本例用移位寄存器74HC164作为数码管驱动进行控制。

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


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

   
      
                          :
                     
时序图:
            


             注意脉冲宽度:

               





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

原理图:
            


程序代码:
完整的keil工程文件下载地址: http://www.51hei.com/f/k164.rar
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:                                            ;数码管码表
         DB 40H,79H,24H,30H,19H   ;0,1,2,3,4
DB 12H,02H,78H,00H,10H   ;5,6,7,8,9
END


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:59780 发表于 2014-3-18 14:57 | 只看该作者
学习学习
回复

使用道具 举报

板凳
ID:59269 发表于 2014-3-22 07:30 | 只看该作者

实用资料,下载学习
回复

使用道具 举报

地板
ID:1 发表于 2014-3-22 13:03 来自手机 | 只看该作者
这的确是一个好资料
回复

使用道具 举报

5#
ID:67573 发表于 2014-10-23 08:59 | 只看该作者
学习学习
回复

使用道具 举报

6#
ID:629091 发表于 2020-4-16 17:43 | 只看该作者
有没有c的代码
回复

使用道具 举报

7#
ID:451500 发表于 2020-6-25 11:07 | 只看该作者
谢谢分享,辛苦了,端午节快乐
回复

使用道具 举报

8#
ID:785163 发表于 2020-6-25 18:46 | 只看该作者
挺好的,但是好像没有c的代码
回复

使用道具 举报

9#
ID:720231 发表于 2022-8-22 23:16 | 只看该作者
只有C啊 没有看到仿真咋?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表