📄 dw.lst
字号:
C51 COMPILER V8.05a DW 12/03/2008 20:05:52 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE DW
OBJECT MODULE PLACED IN dw.OBJ
COMPILER INVOKED BY: D:\学习软件\KEIL3\C51\BIN\C51.EXE dw.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <REGX51.H>
2 #include <stdio.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5
6 uint dw;
7 int Mispeed=25; //步进电机起始速度
8 int Maspeed=100; //步进电机最高转动速度
9 int speed; //速度计数
10 int loopdj; //控制电机线圈的接通
11 int ldata;
12 int count; //显示速度值
13 uint id=0; //电机状态判断
14
15 uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
16 uint code DHTab[]={76,0xd3,86,95,100,106,110,115,119,123};
17 uint code DLTab[]={0,0x00,86,73,212,0,214,96,163,165};
18 void delay(uint n); //延时函数
19 void viewkey(); //键值处理程序
20 uchar scankey(uchar num); //键值扫描程序
21 void led_xianshi(); //速度值显示函数
22
23 //延时函数
24 void delay(uint n)
25 {
26 1 int i,j;
27 1 for(i=0;i<n;i++)
28 1 for(j=0;j<200;j++);
29 1 }
30
31 //主函数
32 void main()
33 {
34 1 speed=Mispeed; //初值
35 1 loopdj=0xf7;
36 1 P1=0xff;
37 1 TMOD=0x10; //定时器T1初始化
38 1 TH1=0x4c;
39 1 TL1=0x00;
40 1 EA=1; //开总中断
41 1 ET1=1;
42 1
43 1 while(1)
44 1 {
45 2 P3=0xff;
46 2 if((P3&0xff)!=0xff)
47 2 {
48 3 delay(2);
49 3 if((P3&0xff)!=0xff)
50 3 {
51 4 dw=scankey(P3); //扫描键值
52 4 }
53 3 }
54 2 viewkey(); //键值处理及显示
55 2 }
C51 COMPILER V8.05a DW 12/03/2008 20:05:52 PAGE 2
56 1 }
57
58
59
60 //键值扫描程序
61 uchar scankey(uchar num)
62 { uchar keynum;
63 1 ldata=num;
64 1 while((P3&0xff)!=0xff); //按键完全释放
65 1 switch(ldata)
66 1 {
67 2 case 0xfe:keynum=1;break;
68 2 case 0xfd:keynum=2;break;
69 2 case 0xfb:keynum=3;break;
70 2 case 0xf7:keynum=4;break;
71 2 }
72 1 return(keynum); //返回键值
73 1 }
74
75
76 //键值处理及显示程序
77 void viewkey()
78 {
79 1 //启动步进电机模块
80 1 if(dw==1)
81 1 {
82 2 TR1=1; //启动T1
83 2 speed=25;
84 2 dw=5;
85 2 led_xianshi(); //显示速度值
86 2 }
87 1 //加速模块
88 1 else if(dw==2)
89 1 {
90 2 while((P3&0xff)!=0xff); //按键完全释放
91 2 speed++;
92 2 if(speed>Maspeed)
93 2 {speed=100;}
94 2 dw=5;
95 2 led_xianshi(); //显示速度值
96 2 }
97 1 //减速模块
98 1 else if(dw==3)
99 1 {
100 2 speed--;
101 2 if(speed<Mispeed)
102 2 {speed=25;}
103 2 dw=5;
104 2 led_xianshi(); //显示速度值
105 2 }
106 1 //停止电机转动模块
107 1 else if(dw==4)
108 1 {
109 2 TR1=0; //停止T1
110 2 P1=0xff; //P1.4-P1.7均置高
111 2 speed=0;
112 2 dw=5;
113 2 led_xianshi(); //显示速度值
114 2 }
115 1 else if(dw==5)
116 1 {
117 2 //TR1=1; //启动T1
C51 COMPILER V8.05a DW 12/03/2008 20:05:52 PAGE 3
118 2 dw=5;
119 2 led_xianshi(); //显示速度值
120 2 }
121 1 }
122
123 //速度值显示函数
124 void led_xianshi()
125 {
126 1 int led_bai,led_shi,led_ge;
127 1 count=speed;
128 1 led_bai=count/100; //显示值百位
129 1 led_shi=count%100/10; //显示值十位
130 1 led_ge =count%10; //显示值个位
131 1
132 1 P2=0x7f; //个位位选
133 1 P0=table[led_ge]; //显示个位数
134 1 delay(2);
135 1
136 1 P2=0xbf; //十位位选
137 1 P0=table[led_shi]; //显示十位数
138 1 delay(2);
139 1
140 1 P2=0xdf; //百位位选
141 1 P0=table[led_bai]; //显示百位数
142 1 delay(2);
143 1 }
144
145
146 //定时器T1中断处理函数
147 void T1INT() interrupt 3 using 2
148 {
149 1 int t;
150 1 TR1=0;
151 1 t=speed-Mispeed;
152 1 TH1=DHTab[t/10]; //重新置初值
153 1 TL1=DLTab[t%10];
154 1
155 1 loopdj=loopdj<<1; //循环输出控制步进电机
156 1 P1=loopdj;
157 1 id++;
158 1 if(id==4)
159 1 {
160 2 id=0; //重新置0
161 2 loopdj=0xf7; //循环
162 2 }
163 1 TR1=1;
164 1 }
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
C51 COMPILER V8.05a DW 12/03/2008 20:05:52 PAGE 4
180
181
182
183
184
185
186
187
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 565 ----
CONSTANT SIZE = 50 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 5
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 + -