📄 s_ motor-key.lst
字号:
C51 COMPILER V8.05a S__MOTOR_KEY 11/23/2006 20:59:18 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE S__MOTOR_KEY
OBJECT MODULE PLACED IN S_ MOTOR-key.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE S_ MOTOR-key.C BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /*****************************************************************/
3 /* *
4 /* ME500单片机开发系统演示程序 - 步进电机键控正反转实验 *
5 /* *
6 /* LCD1602显示 *
7 /* *
8 /* 版本: V1.0 (2006/11/20) *
9 /* 作者: gguoqing (Email: gguoqing@willar.com) *
10 /* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界)*
11 /* 时间: 2006/06/03 *
12 /* *
13 /*【版权】COPYRIGHT(C)伟纳电子 www.willar.com ALL RIGHTS RESERVED *
14 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! *
15 /* *
16 /*****************************************************************/
17
18 #include <reg51.h> //51芯片管脚定义头文件
19 #include <intrins.h> //内部包含延时函数 _nop_();
20
21 #define uchar unsigned char
22 #define uint unsigned int
23 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
24
25
26 uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
27 uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
28
29 sbit K1 = P1^4; //运行与停止
30 sbit K2 = P1^5; //设定圈数
31 sbit K3 = P1^6; //方向转换
32 sbit K4 = P1^7; //速率调整
33 sbit BEEP = P3^7; //蜂鸣器
34
35 sbit LCD_RS = P2^0;
36 sbit LCD_RW = P2^1;
37 sbit LCD_EN = P2^2;
38
39 bit on_off=0; //运行与停止标志
40 bit direction=1; //方向标志
41 bit rate_dr=1; //速率标志
42 bit snum_dr=1; //圈数标志
43
44 uchar code cdis1[ ] = {" STEPPING MOTOR "};
45 uchar code cdis2[ ] = {"CONTROL PROCESS"};
46 uchar code cdis3[ ] = {" STOP "};
47 uchar code cdis4[ ] = {"NUM: RATE: "};
48 uchar code cdis5[ ] = {" RUNNING "};
49
50 uchar m,v=0,q=0;
51
52 uchar number=0,number1=0;
53 uchar snum=5,snum1=5; //预设定圈数
54 uchar rate=8; //预设定速率
55 uchar data_temp,data_temp1,data_temp2;
C51 COMPILER V8.05a S__MOTOR_KEY 11/23/2006 20:59:18 PAGE 2
56
57 /********************************************************/
58 /*
59 /* 延时t毫秒
60 /* 11.0592MHz时钟,延时约1ms
61 /*
62 /********************************************************/
63 void delay(uint t)
64 {
65 1 uchar k;
66 1 while(t--)
67 1 {
68 2 for(k=0; k<125; k++)
69 2 { }
70 2 }
71 1 }
72
73 /********************************************************/
74 void delayB(uchar x) //x*0.14MS
75 {
76 1 uchar i;
77 1 while(x--)
78 1 {
79 2 for (i=0; i<13; i++)
80 2 { }
81 2 }
82 1 }
83
84 /********************************************************/
85 void beep()
86 {
87 1 uchar j;
88 1 for (j=0;j<180;j++)
89 1 {
90 2 delayB(5);
91 2 BEEP=!BEEP; //BEEP取反
92 2 }
93 1 BEEP=1; //关闭蜂鸣器
94 1 delay(170);
95 1 }
96
97 /********************************************************/
98 /*
99 /*检查LCD忙状态
100 /*lcd_busy为1时,忙,等待。为0时,闲,可写指令与数据。
101 /*
102 /********************************************************/
103
104 bit lcd_busy()
105 {
106 1 bit result;
107 1 LCD_RS = 0;
108 1 LCD_RW = 1;
109 1 LCD_EN = 1;
110 1 delayNOP();
111 1 result = (bit)(P0&0x80);
112 1 LCD_EN = 0;
113 1 return(result);
114 1 }
115
116 /********************************************************/
117 /*
C51 COMPILER V8.05a S__MOTOR_KEY 11/23/2006 20:59:18 PAGE 3
118 /*写指令数据到LCD
119 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
120 /*
121 /********************************************************/
122
123 void lcd_wcmd(uchar cmd)
124
125 {
126 1 while(lcd_busy());
127 1 LCD_RS = 0;
128 1 LCD_RW = 0;
129 1 LCD_EN = 0;
130 1 _nop_();
131 1 _nop_();
132 1 P0 = cmd;
133 1 delayNOP();
134 1 LCD_EN = 1;
135 1 delayNOP();
136 1 LCD_EN = 0;
137 1 }
138
139 /********************************************************/
140 /*
141 /*写显示数据到LCD
142 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。
143 /*
144 /********************************************************/
145
146 void lcd_wdat(uchar dat)
147 {
148 1 while(lcd_busy());
149 1 LCD_RS = 1;
150 1 LCD_RW = 0;
151 1 LCD_EN = 0;
152 1 P0 = dat;
153 1 delayNOP();
154 1 LCD_EN = 1;
155 1 delayNOP();
156 1 LCD_EN = 0;
157 1 }
158
159 /********************************************************/
160 /*
161 /* LCD初始化设定
162 /*
163 /********************************************************/
164
165 void lcd_init()
166 {
167 1 delay(30);
168 1 lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据
169 1 delay(5);
170 1 lcd_wcmd(0x38);
171 1 delay(5);
172 1 lcd_wcmd(0x38);
173 1 delay(5);
174 1
175 1 lcd_wcmd(0x0c); //显示开,关光标
176 1 delay(5);
177 1 lcd_wcmd(0x06); //移动光标
178 1 delay(5);
179 1 lcd_wcmd(0x01); //清除LCD的显示内容
C51 COMPILER V8.05a S__MOTOR_KEY 11/23/2006 20:59:18 PAGE 4
180 1 delay(5);
181 1 }
182
183 /********************************************************/
184 /*
185 /* 设定显示位置
186 /*
187 /********************************************************/
188
189 void lcd_pos(uchar pos)
190 {
191 1 lcd_wcmd(pos | 0x80); //数据指针=80+地址变量
192 1 }
193
194 /********************************************************/
195 /*
196 /* LCD1602初始显示子程序
197 /*
198 /********************************************************/
199 void LCD_init_DIS()
200 {
201 1 delay(10); //延时
202 1 lcd_init(); //初始化LCD
203 1
204 1 lcd_pos(0); //设置显示位置为第一行的第1个字符
205 1 m = 0;
206 1 while(cdis1[m] != '\0')
207 1 { //显示字符
208 2 lcd_wdat(cdis1[m]);
209 2 m++;
210 2 }
211 1
212 1 lcd_pos(0x40); //设置显示位置为第二行第1个字符
213 1 m = 0;
214 1 while(cdis2[m] != '\0')
215 1 {
216 2 lcd_wdat(cdis2[m]); //显示字符
217 2 m++;
218 2 }
219 1
220 1 delay(3000); //延时
221 1
222 1 lcd_pos(0); //设置显示位置为第一行的第1个字符
223 1 m = 0;
224 1 while(cdis3[m] != '\0')
225 1 { //显示字符
226 2 lcd_wdat(cdis3[m]);
227 2 m++;
228 2 }
229 1
230 1 lcd_pos(0x40); //设置显示位置为第二行第1个字符
231 1 m = 0;
232 1 while(cdis4[m] != '\0')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -