📄 demo.lst
字号:
C51 COMPILER V7.01 DEMO 06/24/2005 22:51:56 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE DEMO
OBJECT MODULE PLACED IN demo.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE demo.c OPTIMIZE(2,SPEED) BROWSE ORDER INTVECTOR(0X8000) DEFINE(monitor51) D
-EBUG OBJECTEXTEND
stmt level source
1 /**************************************************************************************************
2
3 项目名称: 简易数控直流电源
4
5 设计任务:设计出有一定输出电压范围和功能的数控电源.
6
7 设计要求:
8 1.基本要求
9 (1)输出电压:范围0~+10V,步进1V,纹波不大于10mV;
10 (2)输出电流:500mA;
11 (3)由"+","-"两键分别控制输出电压步进增减;
12
13 2.发挥部分
14 (1)输出电压步进可达到0.1V并可预置在0~9.9V之间的任意一个值;
15 (2)输出电压值由数码管显示;
16 (3)采用单片机控制,用自动扫描代替人工按键,实现输出电压变化.
17
18
19 键盘按键盘说明:16号键-------------设定初值键;
20 0~9号键------------数字键;
21 11号键-------------复位键;
22 13号键-------------加法键,步进0.1V,长按时自动增加0.1V到松开为止;
23 12号键-------------减法键,步进0.1V,长按时自动减少0.1V到松开为止.
24
25
26
27 项目开发者: 张运福 , 蔡龙 ,王珂
28
29 项目开发时间 2005 年 05 月 20 日 到 2005 年 05 月 21日
30
31 ***************************************************************************************************/
32
33 #include <reg51.H>
34 sbit CS=P1^0;
35 sbit CLK=P1^1;
36 sbit DIO=P1^2;
37 sbit AD_OK=P3^2;
38 char KeyCode;
39 char dispbuff[8];
40 unsigned char adconvert(char channel);
41 char ReadKeyCode();
42 char ReadKB();
43 void sent(unsigned char sent_buf);
44 void delay(unsigned int time);
45 void display();
46 char TICK;
47 unsigned char ADresult;
48 char xdata *DAResult=0x6000;
49 char ResetBuff[2]={0x00,0x00};
50 char flag=0x00;
51 char MidKeyCode=0x00;
52
53 /******************************************************************
54 函数名称:unsigned char DASource()
C51 COMPILER V7.01 DEMO 06/24/2005 22:51:56 PAGE 2
55 函数功能:将数字量转换成模拟量
56 入口参数:无
57 出口参数:MidDAresult DA转换所需的中间数据
58 全局变量:ResetBuff
59 调用模块:main
60 ******************************************************************/
61
62 unsigned char DASource()
63 {
64 1 unsigned char MidDAresult;
65 1 MidDAresult=(ResetBuff[0]*10+ResetBuff[1])*5.12;
66 1 return MidDAresult;
67 1 }
68
69 /******************************************************************
70 函数名称:char adconvert(char channel)
71 函数功能:将模拟量转换为数字量
72 入口参数:char channel AD转换的通道
73 出口参数:char result 转换结果
74 全局变量:sbit AD_OK=p3^2;
75 调用模块:void Timer0() interrupt 1
76 main()
77 ******************************************************************/
78
79 unsigned char adconvert(char channel)
80 {
81 1 unsigned char result;
82 1 char xdata *adport;
83 1 adport=0x0000+channel; //AD转换通道选择
84 1 *adport=0; //启动转换
85 1 while(AD_OK==1); //等待转换结束
86 1 result=*adport; //读转换结果
87 1 return result;
88 1 }
89
90 /******************************************************************
91 函数名称:void Timer0() interrupt 1
92 函数功能:定时中断
93 入口参数:无
94 出口参数:无
95 全局变量:TICK
96 调用模块:
97 ******************************************************************/
98
99 void Timer0() interrupt 1
100 {
101 1 TMOD=0x01; //定时器初始化
102 1 TH0=0x3c;
103 1 if(TICK==15)
104 1 {
105 2 display();
106 2 TICK=0;
107 2
108 2 }
109 1 TICK++;
110 1 }
111
112 /******************************************************************
113 函数名称:void KeyBoard() interrupt 2
114 函数功能:按键后产生中断,如果按下的是11号键,则复位,否则标志位+1
115 入口参数:无
116 出口参数:无
C51 COMPILER V7.01 DEMO 06/24/2005 22:51:56 PAGE 3
117 全局变量:KeyCode
118 ResetBuff
119 dispbuff
120 flag;
121 调用模块:
122 ******************************************************************/
123
124 void KeyBoard() interrupt 2
125 {
126 1 KeyCode=ReadKB();
127 1 if(KeyCode==0x0b) //判断是否为11号复位键
128 1 {
129 2 ResetBuff[0]=0x00;
130 2 ResetBuff[1]=0x00;
131 2 dispbuff[0]=ResetBuff[0]%16;
132 2 dispbuff[1]=ResetBuff[1]%16;
133 2 flag=0x00;
134 2 }
135 1 else flag++;
136 1 }
137
138 /******************************************************************
139 函数名称:char ReadKB()
140 函数功能:按键的处理
141 入口参数:无
142 出口参数:kb 按下的一个键
143 全局变量:CS
144 CLK
145 调用模块:KeyBoard
146 ******************************************************************/
147
148 char ReadKB()
149 { char kb=0;
150 1 kb=ReadKeyCode();
151 1 ET0=1;
152 1 return(kb);
153 1 }
154
155 /******************************************************************
156 函数名称:char ReadKeyCode()
157 函数功能:加/减的处理
158 入口参数:无
159 出口参数:char RKC 键位代码
160 全局变量: CS
161 CLK
162 DIO
163 调用模块:ReadKeyCode
164 ReadKB
165 ******************************************************************/
166
167 char ReadKeyCode()
168 {
169 1 char RKC=0x00,i;
170 1 CS=1;
171 1 CLK=0;
172 1 delay (50);
173 1 sent(0x15); //发送读键盘指令
174 1 delay(10);
175 1
176 1 DIO=1;
177 1 CLK=1;
178 1 delay(50);
C51 COMPILER V7.01 DEMO 06/24/2005 22:51:56 PAGE 4
179 1 for(i=0;i<8;i++)
180 1 {
181 2 CLK=0;
182 2 RKC=RKC*2+(char)DIO; //读1位数据
183 2 delay(10);
184 2 CLK=1;
185 2 delay(10);
186 2 }
187 1 CS=1;
188 1 if(RKC==0x0c)
189 1 {
190 2 if(ResetBuff[1]==0x00)
191 2 if(ResetBuff[0]==0x00)
192 2 ;
193 2 else
194 2 {ResetBuff[1]=0x09; ResetBuff[0]--;}
195 2 else ResetBuff[1]--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -