📄 zhuansukongzhi.lst
字号:
C51 COMPILER V8.02 ZHUANSUKONGZHI 03/04/2009 17:29:09 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ZHUANSUKONGZHI
OBJECT MODULE PLACED IN zhuansukongzhi.OBJ
COMPILER INVOKED BY: D:\Program Files\C51\BIN\C51.EXE zhuansukongzhi.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <intrins.h>
3 #include <string.h>
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define LCD P1
7 void delayms(void); /*延迟函数*/
8 uchar key_scan();
9 static Count=0;
10 static cnt=0;
11 static truev=0;
12 static v=30; /*v为电机设定速度,n为pwm占空比 */
13 static n;
14 sbit L298_EN=P2^0;
15 sbit L298_IN1=P2^1;
16 sbit L298_IN2=P2^2;
17 sbit LCD_RS=P3^7; /*定义1602液晶模块接口*/
18 sbit LCD_RW=P3^6;
19 sbit LCD_E=P3^5; /*LCD使能端*/
20 bit flag;
21
22
23 void delay(uint ms) /*延时1ms*/
24 {
25 1 uchar i;
26 1 while(ms--)
27 1 for(i=0;i<250;i++)
28 1 {
29 2 _nop_();
30 2 _nop_();
31 2
32 2 }
33 1 }
34
35
36
37 void SELECT_LCD(void) /*选中LCD*/
38 {
39 1 LCD_E=1;
40 1 _nop_();
41 1 _nop_();
42 1 _nop_();
43 1 }
44
45
46 void NOSELECT_LCD(void) /*释放LCD*/
47 {
48 1 LCD_E=0;
49 1 _nop_();
50 1 _nop_();
51 1 _nop_();
52 1 }
53
54
55 bit LCD_Busy() /*检测LCD的忙碌状态,在对LCD操作的时候必须检测忙碌状态,忙时对其操作无效*/
C51 COMPILER V8.02 ZHUANSUKONGZHI 03/04/2009 17:29:09 PAGE 2
56 {
57 1 bit result;
58 1 LCD_RS = 1; /*设置LCD为忙碌状态的检测*/
59 1 LCD_RW = 1;
60 1 SELECT_LCD(); /*选中LCD*/
61 1 _nop_(); /*待稳定*/
62 1 _nop_();
63 1 _nop_();
64 1 _nop_();
65 1 result = (bit)(LCD & 0x80); /*读LCD的DB7的值 1为忙 0为空闲,可写入指令和数据*/
66 1 NOSELECT_LCD();
67 1 return result; /*返回result,1为忙 0为空闲*/
68 1 }
69
70
71 LCD_WriteCommand(uchar com) /*写指令数据到LCD*/
72 {
73 1 while(LCD_Busy()); /*当LCD不忙时,写指令数据*/
74 1 NOSELECT_LCD();
75 1 LCD_RS = 0; /*设置LCD为写指令数据*/
76 1 LCD_RW = 0;
77 1
78 1 _nop_();
79 1 _nop_();
80 1 LCD = com; /*把指令数据送到P1口*/
81 1 _nop_();
82 1 _nop_();
83 1 _nop_();
84 1 _nop_();
85 1 SELECT_LCD(); /*选中LCD*/
86 1 _nop_();
87 1 _nop_();
88 1 _nop_();
89 1 _nop_();
90 1 NOSELECT_LCD(); /*释放LCD*/
91 1 }
92
93
94 LCD_DisplayPosit(uchar pos) /*设定字符在LCD上显示的位置*/
95 {
96 1 LCD_WriteCommand(pos|0x80);
97 1 delay(1);
98 1 }
99
100
101 LCD_WriteData(uchar dat) /*写字符显示数据到LCD*/
102 {
103 1 while(LCD_Busy()); /*当LCD不忙时,写显示数据*/
104 1 LCD_RS = 1; /*设置LCD为写显示数据*/
105 1 LCD_RW = 0;
106 1 NOSELECT_LCD();
107 1 LCD = dat; /*把显示数据送到P1口*/
108 1 _nop_();
109 1 _nop_();
110 1 _nop_();
111 1 _nop_();
112 1 SELECT_LCD(); /*选中LCD*/
113 1 _nop_();
114 1 _nop_();
115 1 _nop_();
116 1 _nop_();
117 1 NOSELECT_LCD(); /*释放LCD*/
C51 COMPILER V8.02 ZHUANSUKONGZHI 03/04/2009 17:29:09 PAGE 3
118 1 }
119
120
121 LCD_Init() /*LCD初始化*/
122 {
123 1 LCD_WriteCommand(0x38); /*16*2显示,5*7点阵,8位数据*/
124 1 delay(1);
125 1 LCD_WriteCommand(0x0c); /*显示开,关光标*/
126 1 delay(1);
127 1 LCD_WriteCommand(0x06); /*移动光标*/
128 1 delay(1);
129 1 LCD_WriteCommand(0x01); /*清除LCD的显示内容*/
130 1 delay(1);
131 1 }
132
133
134 /*显示单个字符*/
135 void show(uchar n,uchar a) /*n表示显示位置,a为要显示的字符*/
136 {
137 1 LCD_DisplayPosit(n);
138 1 LCD_WriteData(a);
139 1 }
140 uchar key_scan()
141 { uchar Counter=0;
142 1 uchar Counte=0;
143 1 uchar key=20;
144 1 while(key==20)
145 1 {
146 2 P0=0xf0;
147 2 Counte=P0;
148 2 if(Counte==0xe0)
149 2 {delay(2);
150 3 if(Counte==0xe0) Counter=1;
151 3 }
152 2 if(Counte==0xd0)
153 2 {delay(2);
154 3 if(Counte==0xd0) Counter=2;
155 3 }
156 2 if(Counte==0xb0)
157 2 {delay(2);
158 3 if(Counte==0xb0) Counter=3;
159 3 }
160 2 if(Counte==0x70)
161 2 {delay(2);
162 3 if(Counte==0x70) Counter=4;
163 3 }
164 2 P0=0x0f;
165 2 Counte=P0;
166 2 if(Counte==0x0e)
167 2 {delay(2);
168 3 if(Counte==0x0e) Counte=1;
169 3 }
170 2 if(Counte==0x0d)
171 2 {delay(2);
172 3 if(Counte==0x0d) Counte=2;
173 3 }
174 2 if(Counte==0x0b)
175 2 {delay(2);
176 3 if(Counte==0x0b) Counte=3;
177 3 }
178 2 if(Counte==0x07)
179 2 {delay(2);
C51 COMPILER V8.02 ZHUANSUKONGZHI 03/04/2009 17:29:09 PAGE 4
180 3 if(Counte==0x07) Counte=4;
181 3 }
182 2 if(Counter==1&&Counte==1) key=0;
183 2 if(Counter==2&&Counte==1) key=1;
184 2 if(Counter==3&&Counte==1) key=2;
185 2 if(Counter==4&&Counte==1) key=3;
186 2 if(Counter==1&&Counte==2) key=4;
187 2 if(Counter==2&&Counte==2) key=5;
188 2 if(Counter==3&&Counte==2) key=6;
189 2 if(Counter==4&&Counte==2) key=7;
190 2 if(Counter==1&&Counte==3) key=8;
191 2 if(Counter==2&&Counte==3) key=9;
192 2 if(Counter==3&&Counte==3) key=10;
193 2 if(Counter==4&&Counte==3) key=11;
194 2 if(Counter==1&&Counte==4) key=12;
195 2 if(Counter==2&&Counte==4) key=13;
196 2 if(Counter==3&&Counte==4) key=14;
197 2 if(Counter==4&&Counte==4) key=15;
198 2 }
199 1 P0=0x0f;
200 1 Counte=P0;
201 1 while(Counte!=0x0f)
202 1 { P0=0x0f;
203 2 Counte=P0;
204 2 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -