标题:
51单片机74HC164串口控制数码管显示
[打印本页]
作者:
9geren
时间:
2014-3-13 04:12
标题:
51单片机74HC164串口控制数码管显示
转自:
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
作者:
小新灬
时间:
2014-3-18 14:57
学习学习
作者:
amgpj
时间:
2014-3-22 07:30
小新灬 发表于 2014-3-18 14:57
学习学习
实用资料,下载学习
作者:
admin
时间:
2014-3-22 13:03
这的确是一个好资料
作者:
blj178
时间:
2014-10-23 08:59
学习学习
作者:
smile1028
时间:
2020-4-16 17:43
有没有c的代码
作者:
抱书人人
时间:
2020-6-25 11:07
谢谢分享,辛苦了,端午节快乐
作者:
329507812
时间:
2020-6-25 18:46
挺好的,但是好像没有c的代码
作者:
2428763543
时间:
2022-8-22 23:16
只有C啊 没有看到仿真咋?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1