📄 disp.lst
字号:
C51 COMPILER V7.06 DISP 10/24/2006 15:34:58 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
10
11 unsigned char DispBuf[4]; //显示缓冲区(由定时中断程序自动扫描)
12 unsigned char DispX; //坐标,取值0~3
13 unsigned char KeyValue = '\0';
14
15
16 /*******************************************************************************
17 函数:DispClear()
18 功能:清除显示
19 *******************************************************************************/
20 void DispClear()
21 {
22 1 unsigned char i;
23 1 DispX = 0;
24 1 for ( i=0; i<4; i++ )
25 1 {
26 2 DispBuf[i] = 0x00;
27 2 }
28 1 XBYTE[DPY_DIG] = 0x00;
29 1 XBYTE[DPY_SEG] = 0x00;
30 1 }
31
32
33 //定义软件定时器(利用T0中断实现)
34 unsigned int STV; //16位软件定时器
35 bit STR = 0; //启动标志
36 bit STF = 0; //溢出标志
37
38
39 /*******************************************************************************
40 函数:T0_ISR()
41 功能:定时器T0中断服务程序,定时扫描显示数码管
42 *******************************************************************************/
43 void T0_ISR() interrupt 1
44 {
45 1 code unsigned char com[] = {0x01,0x02,0x04,0x08};
46 1 static unsigned char n = 0;
47 1 static unsigned char t = 50;
48 1 //重新定时
49 1 TR0 = 0; //暂停T0(重新定时前应当暂停)
50 1 TH0 = 0xFC; //重新定时1ms
51 1 TL0 = 0x66;
52 1 TR0 = 1; //重启T0
53 1 //扫描数码管
54 1 XBYTE[DPY_SEG] = 0xFF; //暂停显示(重要操作)
55 1 XBYTE[DPY_DIG] = com[n]; //更新位选信号
C51 COMPILER V7.06 DISP 10/24/2006 15:34:58 PAGE 2
56 1 XBYTE[DPY_SEG] = ~DispBuf[n]; //更新段选数据
57 1 n++;
58 1 n &= 0x03;
59 1 //处理软件定时器
60 1 if ( STR ) if ( --STV == 0 ) STF = 1;
61 1 //扫描按键
62 1 if ( --t == 0 )
63 1 {
64 2 if ( !K1 ) KeyValue = '1';
65 2 if ( !K2 ) KeyValue = '2';
66 2 if ( !K3 ) KeyValue = '3';
67 2 if ( !K4 ) KeyValue = '4';
68 2 if ( KeyValue == '\0' )
69 2 t = 50;
70 2 else
71 2 t = 250;
72 2 }
73 1 }
74
75
76 //键盘扫描,返回按键值
77 unsigned char KeyScan()
78 {
79 1 unsigned char k;
80 1 k = KeyValue;
81 1 KeyValue = '\0';
82 1 return k;
83 1 }
84
85
86 /*******************************************************************************
87 函数:Delay()
88 功能:延时0.001s~65.536s
89 参数:延时(t*0.001)s
90 *******************************************************************************/
91 void Delay(unsigned int t)
92 {
93 1 STV = t;
94 1 STR = 1;
95 1 while ( !STF );
96 1 STR = 0;
97 1 STF = 0;
98 1 }
99
100
101 /*******************************************************************************
102 函数:DispChar()
103 功能:显示1个字符
104 参数:c为要显示的字符(仅限十进制数字)
105 *******************************************************************************/
106 void DispChar(unsigned char c)
107 {
108 1 code unsigned char Tab[10] =
109 1 {//定义数码管字型数据
110 1 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
111 1 };
112 1 if ( (c >= '0') && (c <= '9') )
113 1 {
114 2 DispBuf[3-DispX] = Tab[c-'0'];
115 2 DispX++;
116 2 DispX &= 0x03;
117 2 }
C51 COMPILER V7.06 DISP 10/24/2006 15:34:58 PAGE 3
118 1 }
119
120
121 /*******************************************************************************
122 函数:DispInit()
123 功能:初始化
124 *******************************************************************************/
125 void DispInit()
126 {
127 1 DispClear(); //清除显示
128 1 TMOD &= 0xF0; //T0设置在方式1,即16位定时器
129 1 TMOD |= 0x01;
130 1 TH0 = 0xFC; //定时1ms
131 1 TL0 = 0x66;
132 1 ET0 = 1; //使能T0定时中断
133 1 TR0 = 1; //启动定时器T0
134 1 EA = 1; //使能总中断
135 1 }
136
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 224 ----
CONSTANT SIZE = 14 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
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 + -