📄 dc_current_souce.lst
字号:
C51 COMPILER V7.07 DC_CURRENT_SOUCE 09/10/2005 19:28:46 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE DC_CURRENT_SOUCE
OBJECT MODULE PLACED IN dc_current_souce.OBJ
COMPILER INVOKED BY: D:\专业学习软件\keil\C51\BIN\C51.EXE dc_current_souce.c OPTIMIZE(2,SPEED) BROWSE INTVECTOR(0X8000)
-DEFINE(monitor51) DEBUG OBJECTEXTEND
stmt level source
1 #include<reg52.H>
2 #include<absacc.h>
3 #include<intrins.h>
4
5 #define uchar unsigned char
6
7 sbit CS=P1^0;
8 sbit CLK=P1^1;
9 sbit DIO=P1^2;
10 unsigned char KeyCode; //键盘值
11 char dispbuff[8]; //显示缓存
12 unsigned int volatile keybuf[4]; //键盘读数频率值
13 char volatile i; //位标志
14 bit volatile set,up_down; //设置键标志
15 unsigned char num;
16 int volatile control; //频率字
17 unsigned char keycontrol; //频率缓存
18 unsigned int cc;
19 char xdata *max530_ad;
20 char ReadKB(); //读键盘
21 void sent(unsigned char sent_buf); //向7289发数据
22 void delay(unsigned char time); //延时
23 void display(unsigned char k)reentrant; //显示
24 void transkey1(void); //将所设定的数值转化为控制字(10进制转16进制)
25 void dis_control(unsigned char keycontrol)reentrant; //显示控制如:左移,右移,显示setting
26 void dacconvent(void)reentrant; //da转换
27 void xiuzheng(void); //对电流的误差进行分段修正,让电流更加准确
28
29 void KeyBoard() interrupt 2 //键盘辨别
30 { EX1=0;
31 1 KeyCode=ReadKB(); //读键盘
32 1 if(KeyCode==0x0f) //======判断是否是设置键按下
33 1 { i=0;
34 2 set=1;
35 2 keycontrol=0xa4; //复位
36 2 dis_control(keycontrol);
37 2 dispbuff[6]=0x0d;
38 2 display(6);
39 2 goto loop1;
40 2
41 2 }
42 1 else if(set) //======只有当设置键按下才判断
43 1 {
44 2 if(KeyCode==0x0e) //确定键
45 2 { set=0;
46 3 if(i) //只有当I不为0时才发送
47 3 {
48 4 transkey1(); //将所设定的数值转化为控制字(10进制转16进制)
49 4 dacconvent();
50 4 keycontrol=0xa4; //复位
51 4 dis_control(keycontrol);
52 4 goto loop1;
53 4 }
54 3 goto loop1;
C51 COMPILER V7.07 DC_CURRENT_SOUCE 09/10/2005 19:28:46 PAGE 2
55 3 }
56 2 if((KeyCode<=9)&&(KeyCode>=0)&&(i<4))
57 2 {
58 3 keycontrol=0xa0;
59 3 dis_control(keycontrol); //显示左移一位
60 3 keybuf[i]=KeyCode;
61 3 dispbuff[7]=keybuf[i];
62 3 display(7);
63 3 i++;
64 3 goto loop1;
65 3 }
66 2 if((KeyCode==0x0d)&&(i>0)) //删除一位,
67 2 {
68 3 keycontrol=0xa1; //第一个显示变黑,右移一位
69 3 dis_control(keycontrol);
70 3 i--;
71 3 goto loop1;
72 3 }
73 2 goto loop1;
74 2 }
75 1 if(KeyCode==0x0c) // 步进选择(up_down=1为1ma步进,=0时为10ma步进)
76 1 {
77 2 up_down=!up_down;
78 2 goto loop1;
79 2 }
80 1 if((KeyCode<=9)&&(KeyCode>=1)) //选择步进系数即:数字*1ma,数字*10ma
81 1 {
82 2 num=KeyCode;
83 2 goto loop1;
84 2 }
85 1 if(KeyCode==0x0b) //加
86 1 {
87 2 if(up_down)
88 2 control=control+num;
89 2 else control=control+10*num;
90 2 goto loop1;
91 2 }
92 1 if(KeyCode==0x0a) // 减
93 1 {
94 2 if(up_down)
95 2 control=control-num;
96 2 else control=control-10*num;
97 2 goto loop1;
98 2 }
99 1 loop1: EX1=1;
100 1 if(control<=0)
101 1 control=0;
102 1 if(control>2000)
103 1 control=2000;
104 1 dacconvent();
105 1 }
106
107
108 main()
109 {
110 1 unsigned int time;
111 1 char m;
112 1 EX1=1;
113 1 EA=1;
114 1 IT1=1;
115 1 set=0;
116 1 i=0;
C51 COMPILER V7.07 DC_CURRENT_SOUCE 09/10/2005 19:28:46 PAGE 3
117 1 control=500; //初始化电流500ma
118 1 up_down=0; //初始化步进10ma档
119 1 num=1; //初始化步进系数1
120 1 keycontrol=0xa4; //复位
121 1 dis_control(keycontrol);
122 1
123 1 dispbuff[2]=0x09;
124 1 display(2);
125 1 dispbuff[3]=0x00;
126 1 display(3);
127 1 dispbuff[4]=0x00;
128 1 display(4);
129 1 dispbuff[5]=0x0D;
130 1 display(5);
131 1 for(time=0;time<800;time++)
132 1 delay(100);
133 1 dacconvent();
134 1 while(1)
135 1 {
136 2
137 2 if(!set)
138 2 { keycontrol=0xa4; //复位
139 3 dis_control(keycontrol);
140 3 dispbuff[1]=num;
141 3 display(1);
142 3 if(up_down==0)
143 3 {
144 4 dispbuff[2]=0;
145 4 display(2);
146 4 }
147 3
148 3 if(control<2000)
149 3 {
150 4 if((control/1000))
151 4 {
152 5 cc=control;
153 5 dispbuff[4]=cc/1000;
154 5 display(4);
155 5 m=dispbuff[4];
156 5 cc=cc-1000*m;
157 5 dispbuff[5]=cc/100;
158 5 display(5);
159 5 m=dispbuff[5];
160 5 cc=cc-100*m;
161 5 dispbuff[6]=cc/10;
162 5 display(6);
163 5 m=dispbuff[6];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -