📄 hc595.lst
字号:
C51 COMPILER V8.02 HC595 10/31/2008 16:35:00 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE HC595
OBJECT MODULE PLACED IN .\HC595.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\HC595\HC595.c BROWSE DEBUG OBJECTEXTEND PRINT(.\HC595.lst) OBJECT(.\HC59
-5.obj)
line level source
1 /********************************************************************************/
2 /* filename : HC595.c */
3 /* created : xillinx */
4 /* descript : 用硬件SPI接口输出控制HC595进行并口扩展 */
5 /* __________ */
6 /* QB--|1 16|--VCC */
7 /* QC--|2 15|--QA */
8 /* QD--|3 14|--SI */
9 /* QE--|4 13|--/G */
10 /* QF--|5 12|--RCK */
11 /* QG--|6 11|--SCK */
12 /* QH--|7 10|--/SCLR */
13 /* GND-|8 9|--QH' */
14 /* |________| */
15 /********************************************************************************/
16 #include "../CPU/CPU.h"
17 #include "../LED/LED.h"
18 #include "../SEG7/SEG7.h"
19 #include "../HC595/HC595.h"
20
21 /********************************************************************************/
22 /* function : HC595_delay() */
23 /* recension: xillinx */
24 /* descript : HC595的延时函数,根据CPU的时钟调整 */
25 /********************************************************************************/
26 void HC595_delay(void)
27 { _nop_();
28 1 _nop_();
29 1 }
30
31 /********************************************************************************/
32 /* function : HC595_begin() */
33 /* recension: xillinx */
34 /* descript : HC595的其实信号,时钟为低/数据为低/锁存信号为低 */
35 /********************************************************************************/
36 void HC595_begin(void)
37 { HC595_LATCH=0x0;
38 1 HC595_CLK =0x0;
39 1 HC595_DATA =0x0;
40 1 }
41
42 /********************************************************************************/
43 /* function : HC595_shift() */
44 /* recension: xillinx */
45 /* descript : HC595移位操作,在时钟的上升沿移入数据, 所以设置数据后需要等待 */
46 /********************************************************************************/
47 void HC595_shift(void)
48 { HC595_delay();
49 1 HC595_CLK=0x1; //* 上升沿移入数据到HC595
50 1 HC595_delay();
51 1 HC595_CLK=0x0; //* 恢复时钟
52 1 }
53
54 /********************************************************************************/
C51 COMPILER V8.02 HC595 10/31/2008 16:35:00 PAGE 2
55 /* function : HC595_send_mdata() */
56 /* recension: xillinx */
57 /* descript : 向HC595移入一个字节的数据 */
58 /********************************************************************************/
59 void HC595_send_mdata(unsigned char mdata)
60 { unsigned char i;
61 1 for(i=0x0;i<0x8;i++)
62 1 { if((mdata&0x80)==0x80)
63 2 { HC595_DATA=0x1;
64 3 }
65 2 else
66 2 { HC595_DATA=0x0;
67 3 }
68 2 HC595_shift();
69 2 mdata<<=0x1;
70 2 }
71 1 }
72
73 /********************************************************************************/
74 /* function : HC595_refresh() */
75 /* recension: xillinx */
76 /* descript : HC595数据刷新,由2MS的定期刷新,共8个数码管,刷新周期2x8=16MS,刷新 */
77 /* 频率为41.7HZ */
78 /********************************************************************************/
79 void HC595_refresh(void)
80 { static unsigned char seg_counter=0x0;
81 1 seg_counter&=0x7;
82 1 HC595_begin(); //* 每次写入数据时,先让HC595工作到初始化状态
83 1 HC595_send_mdata(LED_buffer[0x0]); //* 应该首先移出第三个芯片的数据,就是LED跑马灯的数
-据信号
84 1 HC595_send_mdata(SEG7_segment_table[seg_counter]); //* 第二个是LED数码管的数字选通信号,每个显示数字的
-选通信号
85 1 HC595_send_mdata(SEG7_buffer[seg_counter]); //* 第三个输出每个数字的数据信号
86 1 seg_counter++; //* 处理下一次动态输出的七段数字信号
87 1 seg_counter&=0x7;
88 1 HC595_LATCH=0x1; //* 向HC595的输出寄存器输出数据,驱动显示
89 1 HC595_delay();
90 1 HC595_LATCH=0x0;
91 1 HC595_delay();
92 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 91 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -