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