📄 disp.lst
字号:
C51 COMPILER V7.06 DISP 10/24/2006 15:35:21 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 动态数码管扫描显示程序
3 *******************************************************************************/
4
5
6 #include "Disp.h"
7 #include <REG51.h>
8 #include <ABSACC.h>
9 #include <intrins.h>
10
11
12 unsigned char DispBuf[8]; //显示缓冲区(由定时中断程序自动扫描)
13 unsigned char DispX; //坐标,取值0~7
14 unsigned char KeyValue = '\0';
15
16
17 //宏函数:向数码管位选寄存器(74HC573)加载数据
18 #define DIGLD(dat)\
19 {\
20 P0 = (dat);\
21 LE_DIG = 1;\
22 _nop_();\
23 LE_DIG = 0;\
24 }
25
26
27 //宏函数:向数码管段选寄存器(74HC573)加载数据
28 #define SEGLD(dat)\
29 {\
30 P0 = (dat);\
31 LE_SEG = 1;\
32 _nop_();\
33 LE_SEG = 0;\
34 }
35
36
37 /*******************************************************************************
38 函数:DispClear()
39 功能:清除显示
40 *******************************************************************************/
41 void DispClear()
42 {
43 1 unsigned char i;
44 1 DispX = 0;
45 1 for ( i=0; i<8; i++ )
46 1 {
47 2 DispBuf[i] = 0x00;
48 2 }
49 1 DIGLD(0x00);
50 1 SEGLD(0x00);
51 1 }
52
53
54 //定义软件定时器(利用T0中断实现)
55 unsigned int STV; //16位软件定时器
C51 COMPILER V7.06 DISP 10/24/2006 15:35:21 PAGE 2
56 bit STR = 0; //启动标志
57 bit STF = 0; //溢出标志
58
59
60 /*******************************************************************************
61 函数:T0_ISR()
62 功能:定时器T0中断服务程序,定时扫描显示数码管
63 *******************************************************************************/
64 void T0_ISR() interrupt 1
65 {
66 1 code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
67 1 static unsigned char n = 0;
68 1 static unsigned char t = 50;
69 1 //重新定时
70 1 TR0 = 0; //暂停T0(重新定时前应当暂停)
71 1 TH0 = 0xFC; //重新定时1ms
72 1 TL0 = 0x66;
73 1 TR0 = 1; //重启T0
74 1 //扫描数码管
75 1 SEGLD(0xFF); //暂停显示(重要操作)
76 1 DIGLD(com[n]); //更新位选信号
77 1 SEGLD(~DispBuf[n]); //更新段选数据
78 1 n++;
79 1 n &= 0x07;
80 1 //处理软件定时器
81 1 // if ( STR ) if ( --STV == 0 ) STF = 1;
82 1 //扫描按键
83 1 if ( --t == 0 )
84 1 {
85 2 if ( !K1 ) KeyValue = '1';
86 2 if ( !K2 ) KeyValue = '2';
87 2 if ( !K3 ) KeyValue = '3';
88 2 if ( !K4 ) KeyValue = '4';
89 2 if ( KeyValue == '\0' )
90 2 t = 50;
91 2 else
92 2 t = 250;
93 2 }
94 1 }
95
96
97 //键盘扫描,返回键值
98 unsigned char KeyScan()
99 {
100 1 unsigned char k;
101 1 k = KeyValue;
102 1 KeyValue = '\0';
103 1 return k;
104 1 }
105
106
107 /*******************************************************************************
108 函数:Delay()
109 功能:延时0.001s~65.536s
110 参数:延时(t*0.001)s
111 *******************************************************************************/
112 void Delay(unsigned int t)
113 {
114 1 STV = t;
115 1 STR = 1;
116 1 while ( !STF );
117 1 STR = 0;
C51 COMPILER V7.06 DISP 10/24/2006 15:35:21 PAGE 3
118 1 STF = 0;
119 1 }
120
121
122 /*******************************************************************************
123 函数:DispChar()
124 功能:显示1个字符
125 参数:c为要显示的字符(仅限十进制数字)
126 *******************************************************************************/
127 void DispChar(unsigned char c)
128 {
129 1 code unsigned char Tab[10] =
130 1 {//定义数码管字型数据
131 1 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
132 1 };
133 1 if ( (c >= '0') && (c <= '9') )
134 1 {
135 2 DispBuf[3-DispX] = Tab[c-'0'];
136 2 DispX++;
137 2 DispX &= 0x07;
138 2 }
139 1 }
140
141
142 /*******************************************************************************
143 函数:DispInit()
144 功能:初始化
145 *******************************************************************************/
146 void DispInit()
147 {
148 1 LE_DIG = 0;
149 1 LE_SEG = 0;
150 1 LE_LED = 0;
151 1 DispClear(); //清除显示
152 1 TMOD &= 0xF0; //T0设置在方式1,即16位定时器
153 1 TMOD |= 0x01;
154 1 TH0 = 0xFC; //定时1ms
155 1 TL0 = 0x66;
156 1 ET0 = 1; //使能T0定时中断
157 1 TR0 = 1; //启动定时器T0
158 1 EA = 1; //使能总中断
159 1 }
160
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 226 ----
CONSTANT SIZE = 18 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -