📄 no1.lst
字号:
C51 COMPILER V8.05a NO1 03/12/2009 19:05:03 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE NO1
OBJECT MODULE PLACED IN NO1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE NO1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #include <stdio.h>
4
5 #define uchar unsigned char
6 #define uint unsigned int
7
8 uchar code FFW[8]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
9 uchar code REV[8]={0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10};
10
11 #define LCD_data P0; //数据口
12 sbit LCD_RS = P2^0; //寄存器选择输入
13 sbit LCD_RW = P2^1; //液晶读/写控制
14 sbit LCD_EN = P2^2; //液晶使能控制
15 sbit LCD_PSB = P2^3; //串/并方式控制
16 sbit LCD_RST = P2^5; //液晶复位端口
17
18 sbit ON = P3^0;
19 sbit OP = P3^1;
20 sbit RUN = P2^7;
21 sbit B0 = P3^7;
22 sbit B1 = P3^6;
23 sbit B2 = P3^5;
24 sbit B3 = P3^4;
25 sbit B4 = P3^3;
26
27 uchar code dis1[] = {"32级步进速度控制 "};
28 uchar code dis2[] = {"当前状态 OFF "};
29 uchar code dis3[] = {"当前状态 FFW "};
30 uchar code dis4[] = {"当前状态 REV "};
31 uchar code dis5[] = {"转速 0 X "};
32 uchar code dis6[] = {" ROUND 00000 "};
33 uchar S;
34 uchar R;
35 uchar IRDIS[2];
36 uchar IRCOM[4];
37
38 void ffwr();
39 void revr();
40 void showspd();
41 void showr();
42
43 /*******************************************************************/
44 /* */
45 /*延迟类程序 */
46 /* */
47 /* */
48 /*******************************************************************/
49
50 void delayNOP()
51 {
52 1 _nop_();
53 1 _nop_();
54 1 _nop_();
55 1 _nop_();
C51 COMPILER V8.05a NO1 03/12/2009 19:05:03 PAGE 2
56 1 }
57
58 void delay(int ms)
59 {
60 1 while(ms--)
61 1 {
62 2 uchar i;
63 2 for(i=0;i<250;i++)
64 2 {
65 3 _nop_();
66 3 _nop_();
67 3 _nop_();
68 3 _nop_();
69 3 }
70 2 }
71 1 }
72
73 void delay1(int n)
74 {
75 1 while(n--)
76 1 {
77 2 int i;
78 2 for(i=0;i<250;i++)
79 2 {
80 3 _nop_();
81 3 _nop_();
82 3 _nop_();
83 3 _nop_();
84 3 }
85 2 }
86 1 }
87
88
89 /*******************************************************************/
90 /* */
91 /*检查LCD忙状态 */
92 /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
93 /* */
94 /*******************************************************************/
95 bit lcd_busy()
96 {
97 1 bit result;
98 1 LCD_RS = 0;
99 1 LCD_RW = 1;
100 1 LCD_EN = 1;
101 1 delayNOP();
102 1 result = (bit)(P0&0x80);
103 1 LCD_EN = 0;
104 1 return(result);
105 1 }
106 /*******************************************************************/
107 /* */
108 /*写指令数据到LCD */
109 /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
110 /* */
111 /*******************************************************************/
112 void lcd_wcmd(uchar cmd)
113 {
114 1 while(lcd_busy());
115 1 LCD_RS = 0;
116 1 LCD_RW = 0;
117 1 LCD_EN = 0;
C51 COMPILER V8.05a NO1 03/12/2009 19:05:03 PAGE 3
118 1 _nop_();
119 1 _nop_();
120 1 P0 = cmd;
121 1 delayNOP();
122 1 LCD_EN = 1;
123 1 delayNOP();
124 1 LCD_EN = 0;
125 1 }
126 /*******************************************************************/
127 /* */
128 /*写显示数据到LCD */
129 /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
130 /* */
131 /*******************************************************************/
132 void lcd_wdat(uchar dat)
133 {
134 1 while(lcd_busy());
135 1 LCD_RS = 1;
136 1 LCD_RW = 0;
137 1 LCD_EN = 0;
138 1 P0 = dat;
139 1 delayNOP();
140 1 LCD_EN = 1;
141 1 delayNOP();
142 1 LCD_EN = 0;
143 1 }
144 /*******************************************************************/
145 /* */
146 /* LCD初始化设定 */
147 /* */
148 /*******************************************************************/
149 void lcd_init()
150 {
151 1 LCD_RST = 0; //液晶复位
152 1 delay(30);
153 1 LCD_RST = 1;
154 1 delay(5);
155 1 LCD_PSB = 1; //并口方式
156 1
157 1 lcd_wcmd(0x34); //扩充指令操作
158 1 delay(5);
159 1 lcd_wcmd(0x30); //基本指令操作
160 1 delay(5);
161 1 lcd_wcmd(0x0C); //显示开,关光标
162 1 delay(5);
163 1 lcd_wcmd(0x01); //清除LCD的显示内容
164 1 delay(5);
165 1 }
166 /*********************************************************/
167 /* */
168 /* 设定显示位置 */
169 /* */
170 /*********************************************************/
171 void lcd_pos(uchar X,uchar Y)
172 {
173 1 uchar pos;
174 1 if (X==0)
175 1 {X=0x80;}
176 1 else if (X==1)
177 1 {X=0x90;}
178 1 else if (X==2)
179 1 {X=0x88;}
C51 COMPILER V8.05a NO1 03/12/2009 19:05:03 PAGE 4
180 1 else if (X==3)
181 1 {X=0x98;}
182 1 pos = X+Y ;
183 1 lcd_wcmd(pos);
184 1 }
185 /*********************************************************/
186 /* */
187 /* 转换为ASCII */
188 /* */
189 /*********************************************************/
190 void dataconv()
191 {
192 1 uchar t;
193 1 for (t=0;t<2;t++)
194 1 if(IRDIS[t]>9)
195 1 IRDIS[t]=IRDIS[t]+0x37;
196 1 else
197 1 IRDIS[t]=IRDIS[t]+0x30;
198 1 }
199
200 /*********************************************************/
201 /* */
202 /* 主程序 */
203 /* */
204 /*********************************************************/
205
206 void main()
207 {uchar i,s=1;
208 1 int r=0;
209 1 IE = 0x81;
210 1 TCON = 0x01;
211 1 EX0 = 0;
212 1 R=0;
213 1
214 1 delay(10);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -