HC164应用实例驱动数码管两例文档格式.docx
《HC164应用实例驱动数码管两例文档格式.docx》由会员分享,可在线阅读,更多相关《HC164应用实例驱动数码管两例文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
8位移完后点亮数码管==>
延时==>
返回第一步执行
2.中断部分:
进入中断==>
保存现场(以备调查取证,送你入狱^_^)==>
重置TCC==>
够1秒钟将需要显示的数据+1,并重置,不够就退出;
根据以上要求就开始写代码调试了,要注意一点,数据移位时一定要记得高位在前哦,否则显示错误别怪我没有说清楚,我当年实验时就因为这个数据移位方向反了排查了半天,甚至以为是时钟频率不对,又以为时许不对.....搞了半天,NND后来重看DATASHEET才发现,原来是低级错误啊,呜呼哀哉.......,希望你不要重蹈我覆辙,哎哟!
!
谁!
谁扔砖头上来
啥你扔的我废话太多.........,那俺少来两句,继续上菜,咦好像没啥可说的了,上源程序吧
1.;
中断部分:
2.
3.;
;
中断;
4.INTPUT:
5.
MOV
TEMPA,
A;
6.
A,@130;
7.
TCC,A;
255-130=125
8.
CLR
RF;
9.
此处填写250Us处理程序
10.
BS
WKREG,T500US
11.;
12.
DJZ
R1MS
13.
JMP
INTEXT;
14.
A,@4
15.
R1MS,A;
重置
16.
WKREG,T1MS
17.
此处填写1ms处理程序
18.
19.
20.
R20MS
21.
22.
A,@20
23.
R20MS,A;
24.
此处填写1秒处理程序
25.
WKREG,T20MS
26.
27.
R1S
28.
29.
A,@50
30.
R1S,A;
31.
32.
INC
NUMBER
33.
A,NUMBER
34.
SUB
A,@10
35.
JBS
SR,2
36.
INTEXT
37.
A,@0
38.
NUMBER,A
39.
40.
41.
INTEXT:
42.
A,TEMPA;
43.
RETI;
44.
45.
46.
47.
48.
49.;
显示部分:
50.
51.;
==============TXDATA==============
52.TXDATA:
53.
P5,CC1
54.
A,@8
55.
DATALOP,A;
56.TXLOP:
57.
BC
58.
P5,CLK;
clk=高
59.
NOP;
60.
NOP
61.
DATA_BUF,7
62.
$+3
63.
P5,DATA;
64.
$+2
65.
P5,DATA
66.DD1MS:
67.
$-1
68.
P5,CLK
69.
70.
71.
$-1;
72.
RLC
DATA_BUF
73.
DATALOP
74.
TXLOP
75.
76.
77.
78.
79.
80.
81.
P5,CLK
82.
83.
84.
85.
RET;
86.
87.;
数据查表
88.;
===============DSPTBL============
89.DSPTBL:
ADD
PC,A
90.
RETL
@0B01000000;
0
91.
@0B01111001;
1
92.
@0B00100100;
2
93.
@0B00110000;
3
94.
@0B00011001;
4
95.
@0B00010010;
5
96.
@0B00000010;
6
97.
@0B01111000;
7
98.
@0B00000000;
8
99.
@0B00010000;
9
100.
101.
102.;
循环体部分;
103.
104.;
主程序;
105.MLOOP:
106.
107.
CALL
DSPTBL
108.
DATA_BUF,A
109.
TXDATA
110.
111.
112.
113.
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串行驱动
3.#include<
>
4.
5.#define
uint
unsigned
int
7.#define
uchar
char
9.sbit
DAT=P3^7;
//模拟串口数据发送端
11.sbit
CLK=P3^4;
//模拟时钟控制端
15.uchar
code
tab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xff,0xf6};
//0-9,-,全灭
19.void
sendbyte(uchar
byte)
21.{
/
num,c;
num=tab[byte];
for(c=0;
c<
8;
c++)
{
num>
=1;
}
47.}
49.
51.
52.
53.void
delay_50ms(unsigned
t)
55.{
56.
57.unsigned
j;
59.for(;
t>
0;
t--)
for(j=6245;
j>
j--)
63.{;
65.}
66.
69.main()
71.{
77.unsigned
h;
while
(1){
for(h=0;
h<
10;
h++){
delay_50ms
(1);
sendbyte(h);
87.
88.
89.
delay_50ms(4);
h=0;
101.}