smgzyxs.lst
来自「RZ-51V20 实例程序」· LST 代码 · 共 171 行
LST
171 行
C51 COMPILER V8.18 SMGZYXS 01/06/2010 20:50:46 PAGE 1
C51 COMPILER V8.18, COMPILATION OF MODULE SMGZYXS
OBJECT MODULE PLACED IN smgzyxs.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE smgzyxs.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h> //51芯片管脚定义头文件
2
3 typedef unsigned char uchar;
4 typedef unsigned int uint;
5
6 uchar code ledcode[11] =
7 {
8 0xC0,0xF9,0xA4,0xB0,0x99,
9 0x92,0x82,0xF8,0x80,0x90,0xff
10 };
11
12 uchar data display[8];
13
14 uchar shift,n,num ;
15
16 /**********************************************************
17
18 延时函数
19
20 **********************************************************/
21 void delayms(uint ms)
22 {
23 1 uchar t;
24 1 while(ms--)
25 1 {
26 2 for(t = 0; t < 114; t++);
27 2 }
28 1 }
29
30 /**********************************************************
31
32 显存单元初始化子函数
33
34 **********************************************************/
35 void init_data(void)
36 {
37 1 uchar i;
38 1
39 1 for(i=0; i<8; i++)
40 1 display[i] = 0x0a; //写入熄灭代码
41 1 }
42
43 /**********************************************************
44
45 数据交换子函数 1 (向左移动)
46
47 **********************************************************/
48 void exchange1()
49 {
50 1 uchar i;
51 1
52 1 for(i=7; i>0; i--)
53 1 display[i] = display[i-1]; //低位单元向高位单元传输数据
54 1
55 1 display[0] = num+1; //写入数据“1-8”
C51 COMPILER V8.18 SMGZYXS 01/06/2010 20:50:46 PAGE 2
56 1 }
57
58 /**********************************************************
59
60 数据交换子函数 2 (向左移动)
61
62 **********************************************************/
63 void exchange2()
64 {
65 1 uchar i;
66 1
67 1 for(i=7; i>0; i--)
68 1 display[i] = display[i-1]; //低位单元向高位单元传输数据
69 1
70 1 display[0] = 0x0a; //写入熄灭代码
71 1 }
72
73 /**********************************************************
74
75 主函数
76
77 **********************************************************/
78 void main(void)
79 {
80 1 P0=0xff;
81 1 P2=0xff;
82 1 n=0;
83 1 num = 0;
84 1 shift=0x7f; //位码初值
85 1
86 1 T2CON = 0x00; //设置T2CON寄存器
87 1 TH2 = 0xfc; //1ms定时
88 1 TL2 = 0x66;
89 1 ET2 = 1; //启用Timer2中断
90 1 EA = 1; //总中断允许
91 1 TR2 = 1; //启动定时器2
92 1
93 1 while(1)
94 1 {
95 2 init_data();
96 2
97 2 while(num<8)
98 2 {
99 3 exchange1(); //数据交换
100 3 delayms(500); //调整移动速度
101 3 num++; //计数值加1
102 3 }
103 2
104 2 num = 0; //清计数单元
105 2 delayms(1000); //调整停留速度
106 2
107 2 while(num<8)
108 2 {
109 3 exchange2(); //数据交换
110 3 delayms(500); //调整移动速度
111 3 num++; //计数值加1
112 3 }
113 2 num = 0; //清计数单元
114 2 }
115 1 }
116
117 /**********************************************************
C51 COMPILER V8.18 SMGZYXS 01/06/2010 20:50:46 PAGE 3
118
119 中断服务子函数
120
121 **********************************************************/
122 void timer2() interrupt 5
123 {
124 1 TF2 = 0; //手工清中断标志
125 1 TH2 = 0xfc; //1ms定时常数
126 1 TL2 = 0x66;
127 1
128 1 if(n >= 8) //8位数码管显示
129 1 {
130 2 n=0;
131 2 shift=0x7f; //位码初值
132 2 P2 = 0xff; //关闭显示
133 2 }
134 1 else
135 1 {
136 2 P0=ledcode[display[n]]; //送段码
137 2 P2=shift; //送位码
138 2 shift=shift>>1|0x80; //修改位码
139 2 n++;
140 2 }
141 1 }
142
143 /*********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 238 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?