📄 disp.lst
字号:
C51 COMPILER V7.06 DISP 10/24/2006 10:05:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DISP
OBJECT MODULE PLACED IN Disp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Disp.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2 Disp.c
3 数码管扫描显示驱动程序
4 */
5
6
7 #include <reg51.h>
8 #include <absacc.h>
9 #include <intrins.h>
10 #include "Disp.h"
11
12
13 //宏函数:向数码管位选寄存器(74HC573)加载数据
14 #define DIGLD(dat)\
15 {\
16 P0 = (dat);\
17 LE_DIG = 1;\
18 _nop_();\
19 LE_DIG = 0;\
20 }
21
22
23 //宏函数:向数码管段选寄存器(74HC573)加载数据
24 #define SEGLD(dat)\
25 {\
26 P0 = (dat);\
27 LE_SEG = 1;\
28 _nop_();\
29 LE_SEG = 0;\
30 }
31
32
33 //定义显示缓冲区(由定时中断程序自动扫描)
34 unsigned char DispBuf[8];
35
36
37 unsigned char DispX;
38
39
40 /*
41 函数:T1INTSVC()
42 功能:定时器T1的中断服务函数
43 */
44 void T1INTSVC() interrupt 3
45 {
46 1 code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
47 1 static unsigned char n = 0;
48 1 TR1 = 0; //暂停T1(重新定时前应当暂停)
49 1 TH1 = 0xFC; //重新定时1ms
50 1 TL1 = 0x66;
51 1 TR1 = 1; //重启T1
52 1 SEGLD(0xFF); //暂停显示(重要操作)
53 1 DIGLD(com[n]); //更新位选信号
54 1 SEGLD(~DispBuf[n]); //更新段选数据
55 1 n++;
C51 COMPILER V7.06 DISP 10/24/2006 10:05:25 PAGE 2
56 1 n &= 0x07;
57 1 }
58
59
60 /*
61 函数:DispClear()
62 功能:清除数码管的所有显示
63 */
64 void DispClear()
65 {
66 1 unsigned char i;
67 1 for ( i=0; i<8; i++ )
68 1 {
69 2 DispBuf[i] = 0x00;
70 2 }
71 1 DIGLD(0x00);
72 1 SEGLD(0x00);
73 1 DispX = 0;
74 1 }
75
76
77 /*
78 函数:DispChar()
79 功能:在数码管上显示字符
80 参数:
81 x:数码管的坐标位置(0~7)
82 c:要显示的字符(仅限十进制数字和减号)
83 */
84 void DispChar(unsigned char c)
85 {
86 1 //0123456789的数码管字型数据
87 1 code unsigned char Tab[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
88 1 unsigned char t;
89 1 if ( c == '-' )
90 1 {
91 2 t = 0x40;
92 2 }
93 1 else if ( ( c >= '0' ) && ( c <= '9' ) )
94 1 {
95 2 t = Tab[c-'0'];
96 2 }
97 1 DispBuf[7-DispX] = t;
98 1 DispX++;
99 1 DispX &= 0x07;
100 1 }
101
102
103 /*
104 函数:DispStr()
105 功能:在数码管上显示字符串
106 参数:
107 x:数码管的坐标位置(0~7)
108 *s:要显示的字符串(字符仅限十进制数字和减号)
109 */
110 /*
111 void DispStr(unsigned char x, unsigned char *s)
112 {
113 unsigned char c;
114 for (;;)
115 {
116 c = *s;
117 if ( c == '\0' ) break;
C51 COMPILER V7.06 DISP 10/24/2006 10:05:25 PAGE 3
118 s++;
119 DispChar(c);
120 x++;
121 }
122 }
123 */
124
125
126 /*
127 函数:DispDotOn()
128 功能:显示指定位的小数点
129 参数:x为数码管坐标
130 */
131 void DispDotOn(unsigned char x)
132 {
133 1 DispBuf[7-x] |= 0x80;
134 1 }
135
136
137 /*
138 函数:DispInit()
139 功能:数码管扫描显示初始化
140 */
141 void DispInit()
142 {
143 1 EA = 0;
144 1 LE_DIG = 0;
145 1 LE_SEG = 0;
146 1 LE_LED = 0;
147 1 DispClear();
148 1 TMOD &= 0x0F;
149 1 TMOD |= 0x10;
150 1 TH1 = 0xFC;
151 1 TL1 = 0x66;
152 1 TR1 = 1;
153 1 ET1 = 1;
154 1 EA = 1;
155 1 }
156
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 184 ----
CONSTANT SIZE = 18 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
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 + -