?? step.lst
字號(hào):
C51 COMPILER V7.07 STEP 11/10/2007 15:35:10 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE STEP
OBJECT MODULE PLACED IN Step.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Step.c DEFINE(monitor51) DEBUG OBJECTEXTEND
stmt level source
1 #include<reg51.h>
2 #include<stdio.h>
3 //--------------------------------變量定義-------------------------------------------
4 //sbit INT_0=P3^2; //將p3.2外部中斷0
5 unsigned int FLAG=0; //數(shù)碼管閃爍標(biāo)志位
6 unsigned int FLAG1=0; //顯示切換標(biāo)志位 1---速度,0---坐標(biāo)
7 unsigned int FLAG2=0; //電機(jī)正反轉(zhuǎn)切換標(biāo)志位 1---正轉(zhuǎn),0---反轉(zhuǎn)
8 unsigned int KEY=0; //鍵值
9 unsigned int circle=1; //坐標(biāo)單位1的步進(jìn)圈數(shù)
10 int Fm=0; //加工點(diǎn)偏差
11 unsigned int Xe=0; //終點(diǎn)橫坐標(biāo)
12 unsigned int Ye=0; //終點(diǎn)縱坐標(biāo)
13 unsigned int Nxy=0; //總步數(shù)
14 unsigned int Xi=0; //實(shí)時(shí)橫坐標(biāo)
15 unsigned int Yi=0; //實(shí)時(shí)縱坐標(biāo)
16 unsigned int SpeedX=0; //X電機(jī)速度(步/秒)
17 unsigned int SpeedY=0; //Y電機(jī)速度(步/秒)
18 unsigned int time0_tmp=0xe880; //2ms定時(shí)顯示初值
19 unsigned int time1_tmp=0; //速度控制定時(shí)初值
20 //unsigned int fosc=12; //單片機(jī)晶振(MHz)
21 unsigned int Led1[8]={1,1,1,1,1,1,1,1}; //兩個(gè)4位數(shù)碼管數(shù)值(速度)
22 unsigned int Led2[8]={1,1,1,1,1,1,1,1}; //兩個(gè)4位數(shù)碼管數(shù)值(坐標(biāo))
23 unsigned char StepX1[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//X步進(jìn)電機(jī)正轉(zhuǎn)節(jié)拍
24 unsigned char StepY1[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//Y步進(jìn)電機(jī)反轉(zhuǎn)節(jié)拍
25 unsigned char StepX2[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//X步進(jìn)電機(jī)正轉(zhuǎn)節(jié)拍
26 unsigned char StepY2[]={0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10};//Y步進(jìn)電機(jī)反轉(zhuǎn)節(jié)拍
27 unsigned char Led_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89,0x86};//數(shù)碼管0—9,H,E
28 //unsigned char Led_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x79};//數(shù)碼管0—9,A,E
29
30 //--------------------------------函數(shù)聲明-------------------------------------------
31 void System_init(void); //設(shè)定INT0的工作方式,供主程序調(diào)用
32 void delay(unsigned int); //延時(shí)程序
33 void delay10ms(unsigned int);
34 //void INT0_int(void); //外部中斷0處理程序
35 void time0_int(void); //定時(shí)器0中斷
36 //void time1_int(void); //定時(shí)器1定時(shí)
37 void Key_Scaning(void); //掃描鍵盤
38 void dispxy(unsigned int,unsigned int,unsigned int);//數(shù)碼管顯示子程序
39 void display(void); //數(shù)碼管顯示
40 void Key_Control(void); //鍵盤控制
41 void Go_line(void); //直線差補(bǔ)算法---前進(jìn)
42 void Back_line(void); //直線差補(bǔ)算法---回零
43 //-----------------------------------------------------------------------------------
44 main()
45 {
46 1 System_init(); //中斷初始化
47 1 while(1)
48 1 {
49 2 Key_Control(); //鍵盤控制
50 2
51 2 }
52 1 }
53 //-----------------------------------------------------------------------------------
54 // 函數(shù)名稱:System_init()
55 // 函數(shù)功能:初始化設(shè)置
C51 COMPILER V7.07 STEP 11/10/2007 15:35:10 PAGE 2
56 // 設(shè)定INT0的工作方式
57 //-----------------------------------------------------------------------------------
58 void System_init(void)
59 {
60 1 P3=0xfc; //鍵盤端口初值 P3.0 P3.1 置零
61 1 TMOD=0x11; //T0、T1都為工作方式1
62 1 TH0=(time0_tmp/256); //2ms定時(shí)顯示設(shè)置
63 1 TL0=(time0_tmp%256);
64 1 TH1=(time1_tmp/256);
65 1 TL1=(time1_tmp%256);
66 1 TR0=1;
67 1 //TR1=1; //開啟定時(shí)器0(定時(shí)顯示)
68 1 //IT0=0; //選擇INT0為電平觸發(fā)方式
69 1
70 1 IP=0x02; //將T0中斷設(shè)置為高優(yōu)先級(jí)
71 1 IE=0x82; //ET1=1(定時(shí)中斷1允許),ET0=1(定時(shí)中斷0允許),EA=1(系統(tǒng)中斷允許)
72 1 }
73 //-----------------------------------------------------------------------------------
74 void delay(unsigned int i)
75 {
76 1 for(;i>0;i--);
77 1 }
78
79 void delay10ms(unsigned int i) //延時(shí)程序????10ms有問題?????
80 {
81 1 unsigned int j;
82 1 for(;i>0;i--)
83 1 for(j=0;j<1200;j++);
84 1 }
85 //------------------------------------------------------------------------------------
86 // 函數(shù)名稱:INT0_int()
87 // 函數(shù)功能:外部中斷0處理程序
88 //------------------------------------------------------------------------------------
89 /*void INT0_int(void) interrupt 0
90 {
91 // EA=0;
92 Key_Scaning();
93 // display();
94 P3=0xfc;
95 // EA=1;
96 } */
97 //------------------------------------------------------------------------------------
98 // 函數(shù)名稱:time0_int()
99 // 函數(shù)功能:定時(shí)器0中斷服務(wù)子程序,定時(shí)動(dòng)態(tài)掃描顯示
100 //------------------------------------------------------------------------------------
101 void time0_int(void) interrupt 0
102 {
103 1 EA=0; //關(guān)中斷
104 1 TH0=(time0_tmp/256);
105 1 TL0=(time0_tmp%256);
106 1 display();
107 1 EA=1; //開中斷
108 1 }
109 //------------------------------------------------------------------------------------
110 // 函數(shù)名稱:time0_int()
111 // 函數(shù)功能:定時(shí)器1中斷服務(wù)子程序,定時(shí)掃描鍵盤
112 //------------------------------------------------------------------------------------
113 //void time1_int(void) interrupt 1
114 //{
115 //unsigned int j;
116 // EA=0;
117 //j=10000;
C51 COMPILER V7.07 STEP 11/10/2007 15:35:10 PAGE 3
118 //time1_tmp=65536-20000;
119 //TH1=(time1_tmp/256);
120 // TL1=(time1_tmp%256);
121 //TR1=1;
122 // Key_Scaning();
123
124 // display();
125 // EA=1;
126
127 //}
128 //-------------------------------------------------------------------------------------
129 // 函數(shù)名稱:Key_Scaning()
130 // 函數(shù)功能:掃描鍵盤
131 //-------------------------------------------------------------------------------------
132 void Key_Scaning(void)
133 {
134 1 unsigned int keytmp,temp;
135 1
136 1 P3=0x1c; //掃描第一列
137 1 temp=P3; //讀出數(shù)據(jù),看是否在此行上的某列鍵盤被按下
138 1 keytmp=temp&0x03; //P3.0~P3.1
139 1
140 1 if(keytmp!=0x00)
141 1 {
142 2 delay(1); //消抖 ==========================1改為100
143 2 P3=0x1c;
144 2 temp=P3;
145 2 keytmp=temp&0x03;
146 2 if(keytmp!=0x00) //再次判斷是否有鍵按下
147 2 {
148 3 switch(keytmp)
149 3 {
150 4 case 1:
151 4 KEY=1; break; //1列1行()
152 4 case 2:
153 4 KEY=2; break; //1列2行()
154 4 default :
155 4 break;
156 4 }
157 3 }
158 2 }
159 1 P3=0x2c; //掃描第二列
160 1 temp=P3; //讀出數(shù)據(jù),看是否在此行上的某列鍵盤被按下
161 1 keytmp=temp&0x03; //P3.0~P3.1
162 1 if(keytmp!=0x00)
163 1 {
164 2 delay(1);
165 2 P3=0x2c; //消抖
166 2 temp=P3;
167 2 keytmp=temp&0x03;
168 2 if(keytmp!=0x00) //再次判斷是否有鍵按下
169 2 {
170 3 switch(keytmp)
171 3 {
172 4 case 1:
173 4 KEY=3; break; //2列1行()
174 4 case 2:
175 4 KEY=4; break; //2列2行()
176 4 default :
177 4 break;
178 4 }
179 3 }
C51 COMPILER V7.07 STEP 11/10/2007 15:35:10 PAGE 4
180 2 }
181 1 P3=0x4c; //掃描第三列
182 1 temp=P3; //讀出數(shù)據(jù),看是否在此行上的某列鍵盤被按下
183 1 keytmp=temp&0x03; //P3.0~P3.1
184 1 if(keytmp!=0x00)
185 1 {
186 2 delay(1);
187 2 P3=0x4c; //消抖
188 2 temp=P3;
189 2 keytmp=temp&0x03;
190 2 if(keytmp!=0x00) //再次判斷是否有鍵按下
191 2 {
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -