📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 04/30/2010 21:54:56 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************************************************
2 说明: 使用了外部中断4,定时器中断1,实现了跑马灯程序
3 本程序通过按键S1改变LED灯工作的数量,按键S2改变LED灯闪烁的频率,实现跑马灯的效果
4 要求:打开拨码开关J8
5 *********************************************************************************************************/
6 #include <sh88f516.h>
7
8 unsigned char Num,Fnum;
9 unsigned char Disp;
10 unsigned char Time0Count;
11 bit DispFlag;
12 void mcu_init();
13
14 main()
15 {
16 1
17 1 mcu_init();
18 1
19 1 while(1)
20 1 {
21 2
22 2 if(DispFlag)
23 2 {
24 3 DispFlag = 0;
25 3
26 3 P0 = (P0&0xFC) | (Disp&0x03); //端口0的低2位对应LED灯的D2 D3
27 3 P1 = (P1&0x03) | (Disp&0xFC); //端口1的高6位对应LED灯的D4-D9
28 3
29 3 Disp <<= 1;
30 3 if(CY)
31 3 Disp |= 0x01;
32 3 }
33 2
34 2 }
35 1
36 1 }
37
38
39
40 void mcu_init()
41 {
42 1
43 1 CLKCON = 0x60; //系统频率=晶振频率/12
44 1
45 1 P0M0 = 0x00;
46 1 P0M1 = 0xFF; //推挽输出模式
47 1
48 1 P1M0 = 0x00;
49 1 P1M1 = 0xFF; //推挽输出模式
50 1
51 1 IENC = 0x70; //0111 0000 外部中断4的选择寄存器,1-打开,0-关闭
52 1 EXF0 = 0x80; //上升沿触发
53 1
54 1 TH0 = 0xFA;
55 1 TL0 = 0x00;
C51 COMPILER V8.08 MAIN 04/30/2010 21:54:56 PAGE 2
56 1 TMOD = 0x01; // Timer 0 is 16-bit counter, timer mode
57 1 ET0 = 1; //enable timer 0 interrupt
58 1 TR0 = 1; //enable timer 0
59 1
60 1 IEN1 = 0x40; //ELPD EX4 EPWM ESCM ECMP1 ES1 ECMP0 ESPI 0100 0000
61 1 EA = 1; //开启总中断
62 1
63 1 Num = 0;
64 1 Fnum = 4;
65 1 DispFlag = 1;
66 1 P0 = 0;
67 1 P1 = 0;
68 1 P2 =P2 |0x80;
69 1 Disp = 0x01;
70 1
71 1
72 1 }
73
74 void Timer0_int() interrupt 1
75 {
76 1 Time0Count++;
77 1 if(Time0Count>=Fnum)
78 1 {
79 2 Time0Count = 0;
80 2 DispFlag = 1;
81 2 }
82 1 }
83
84
85 void EX4_INT() interrupt 13 //using 2 //外部中断4的中断号为13.
86 {
87 1
88 1 IEN1 &= 0xBF;
89 1
90 1 if(IF45) //P2.5对应于板子上的S2
91 1 {
92 2 Fnum--;
93 2 if(Fnum==0)
94 2 Fnum = 6;
95 2
96 2 }
97 1
98 1 if(IF46) //P2.6对应于板子上的S1
99 1 {
100 2 Num++;
101 2 if(Num==5)
102 2 Num = 0;
103 2
104 2 switch(Num)
105 2 {
106 3 case 0: Disp = 0x01;
107 3 break;
108 3 case 1: Disp = 0x03;
109 3 break;
110 3 case 2: Disp = 0x0F;
111 3 break;
112 3 case 3: Disp = 0x11;
113 3 break;
114 3 case 4: Disp = 0x55;
115 3 break;
116 3 default: Disp = 0x00;
117 3 break;
C51 COMPILER V8.08 MAIN 04/30/2010 21:54:56 PAGE 3
118 3 }
119 2
120 2 }
121 1
122 1
123 1
124 1 EXF1 = 0x00; //需要软件清0
125 1
126 1 IEN1 |= 0x40;
127 1
128 1 }
129
130
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 210 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -