📄 main7221_1.lst
字号:
C51 COMPILER V7.06 MAIN7221_1 06/20/2011 18:39:48 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN7221_1
OBJECT MODULE PLACED IN main7221_1.obj
COMPILER INVOKED BY: E:\lah\KEIL\C51\BIN\C51.EXE source\source7221动态显示\main7221_1.c BROWSE DEBUG OBJECTEXTEND PRINT(
-.\main7221_1.lst) OBJECT(main7221_1.obj)
stmt level source
1 //*************************************************************************************************
2 //*************************************************************************************************
3 //**<程序名>:7221 LED动态扫描显示 **
4 //**<功能>:LED动态显示1s计数。 **
5 //**<作者>:lah **
6 //**<完成时间>:2010年12月14日 **
7 //*************************************************************************************************
8 //*************************************************************************************************
9
10
11
12 //*************************************************************************************************
13 //* *
14 //* ******************************头文件及宏定义************************** *
15 //* *
16 //*************************************************************************************************
17
18 #include "at89X51.h"
19 #include "LED6Show1.h"
20 #include "intrins.h"
21 #include "absacc.h"
22 #include "Max7221.h"
23 unsigned char DisplayBuffer[8]={0,1,2,3,4,5,6,7};//显示缓冲区
24 #define TIME0H 0xFC
25 #define TIME0L 0x18//定时器0溢出时间:5ms,用于刷新LED。
26
27 #define TIME1H 0x80
28 #define TIME1L 0x98 //定时器1溢出时间:49ms,用于计时模式的计数增加。
29
30
31 //*************************************************************************************************
32 //* *
33 //* ********************************全局变量****************************** *
34 //* *
35 //*************************************************************************************************
36
37 unsigned char uc_DisCount=5; //定时器0定时刷新LED计数。
38
39 unsigned char uc_TimeCount=0; //定时器1定时计数。
40
41 unsigned char uc_Count=0; //定时器0定时计数。
42 unsigned long ul_Number=123456; //LED显示数字。
43 unsigned char uca_LedNum[8];
44
45 //*************************************************************************************************
46 //* *
47 //* ********************************主函数****************************** *
48 //* *
49 //*************************************************************************************************
50 void Delay1ms(unsigned int count)
51 {
52 1 unsigned int i,j;
53 1 for(i=0;i<count;i++)
54 1 for(j=0;j<120;j++);
C51 COMPILER V7.06 MAIN7221_1 06/20/2011 18:39:48 PAGE 2
55 1 }
56
57 unsigned char * pucLedNum(unsigned long ulNumber)
58 {
59 1 if(ulNumber>999999)
60 1 ulNumber=999999;
61 1 if(ulNumber<0)
62 1 ulNumber=0;
63 1 uca_LedNum[0] = ulNumber/100000; //最高位
64 1
65 1 uca_LedNum[1] = (ulNumber-100000*(long)uca_LedNum[0])/10000;
66 1
67 1 uca_LedNum[2] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1])/1000;
68 1
69 1 uca_LedNum[3] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1]
70 1 -1000*(long)uca_LedNum[2])/100;
71 1
72 1 uca_LedNum[4] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1]
73 1 -1000*(long)uca_LedNum[2]-100*(long)uca_LedNum[3])/10;
74 1
75 1 uca_LedNum[5] = (ulNumber-100000*(long)uca_LedNum[0]-10000*(long)uca_LedNum[1]
76 1 -1000*(long)uca_LedNum[2]-100*(long)uca_LedNum[3]-10*(long)uca_LedNum[4]);
77 1 uca_LedNum[6] =0x0a;
78 1 uca_LedNum[7] =0x0a;
79 1 return uca_LedNum;
80 1 }
81
82
83
84 void main()
85 {
86 1 TMOD=0x11; //定时器0:模式一;定时器0:模式一.
87 1
88 1
89 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0,用于LCD刷新>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
90 1 TH0=TIME0H;
91 1 TL0=TIME0L;
92 1 TR0=1; //开启定时器0
93 1 // ET0=1; //开定时器0中断
94 1
95 1
96 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于1s计时 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
97 1 TH1=TIME1H;
98 1 TL1=TIME1L;
99 1 TR1=1; //开启定时器1
100 1 ET1=1; //开定时器1中断
101 1
102 1
103 1 EA=1; // 开启总中断
104 1
105 1 InitialMax7221();
106 1 Max7221Display(&DisplayBuffer[0]);
107 1
108 1
109 1 while(1)
110 1 {
111 2 Delay1ms(200);
112 2 pucLedNum(ul_Number);
113 2 Max7221Display(&uca_LedNum[0]);
114 2 }
115 1 }
116
C51 COMPILER V7.06 MAIN7221_1 06/20/2011 18:39:48 PAGE 3
117
118 //*************************************************************************************************
119 //* *
120 //* *****************************定时器1中断,用于计时功能****************************** *
121 //* *
122 //*************************************************************************************************
123 void vTimer1(void) interrupt 3
124 {
125 1
126 1 if(uc_TimeCount==19)
127 1 {
128 2 uc_TimeCount=0;
129 2 ul_Number++;
130 2 }
131 1 else uc_TimeCount++;
132 1
133 1 TH1=TIME1H;
134 1 TL1=TIME1L;
135 1 }
136 //*************************************************************************************************
137 //* *
138 //* ***************************定时器0,定时刷新LED************************* *
139 //* *
140 //*************************************************************************************************
141 void vTimer0(void) interrupt 1
142
143 {
144 1
145 1 if(uc_DisCount<5)
146 1 uc_DisCount++; //定时器0在每次被触发时,改变LED显示。
147 1 else uc_DisCount=0; //从第一位到第六位循环显示。
148 1
149 1 TH0=TIME0H; //恢复定时器0初始值。
150 1 TL0=TIME0L;
151 1
152 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1035 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 23 8
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 + -