📄 bh1415.lst
字号:
C51 COMPILER V7.00 BH1415 08/17/2007 21:01:05 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE BH1415
OBJECT MODULE PLACED IN BH1415.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE BH1415.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #define uchar unsigned char
2 #define uint unsigned int
3 #include "REG52.H"
4 #include "BH1415.H"
5
6 //按键定义
7 sbit key_select=P1^0;//频率位数选择
8 sbit key_add =P1^1;//频率值加一
9 sbit key_del =P1^2;//频率值减一
10
11 uchar code num[]={ 0x3F,0x06,0x5B,0x4F,
12 0x66,0x6D,0x7D,0x07,
13 0x7F,0x6F,0x77,0x7C,
14 0x39,0x5E,0x79,0x71};
15 uchar fre[4]; //要设定的四位发射频率,如99.90MHz
16 uchar key; //频率的第几位数的选择
17 bit flag; //频率是否已更改
18 uchar count,count2; //count2 用于brind()闪烁函数作延时是否到了的标志
19 //count 用于标志当前状态,为1则进入了频率设置
20
21 void display(uchar *p);
22 void delayms(uchar i);
23 void scankey(void);
24 void brind();
25
26 //功能: 主程序
27 void main(void)
28 {
29 1 fre[0]=1;
30 1 fre[1]=0;
31 1 fre[2]=1;
32 1 fre[3]=8;
33 1 /////////////////////////////////////////////////////
34 1 while(1)
35 1 {
36 2 display(fre); //显示四位频率值
37 2 scankey();
38 2 //-----------------
39 2 if(flag==1)
40 2 {
41 3 writefrequency(fre);
42 3 flag=0;
43 3 }
44 2 //-----------------
45 2 if(count==1)//如果处于设置状态则设置位正在闪烁
46 2 brind();
47 2 }
48 1 /////////////////////////////////////////////////////
49 1
50 1 }
51
52 //功能: 显示四位频率值
53 void display(uchar *p)
54 {
55 1 if( ((count==1)&&(key!=0)) || (count!=1) ){
C51 COMPILER V7.00 BH1415 08/17/2007 21:01:05 PAGE 2
56 2 P2=0x0fe;//数码管位选1
57 2 P3=num[*(p+0)];
58 2 delayms(2);
59 2 P2=0x0ff;
60 2 }
61 1
62 1 if( ((count==1)&&(key!=1)) || (count!=1) ){
63 2 P2=0xffd;//数码管位选2
64 2 P3=num[*(p+1)];
65 2 delayms(2);
66 2 P2=0x0ff;
67 2 }
68 1
69 1 if( ((count==1)&&(key!=2)) || (count!=1) ){
70 2 P2=0xfb;//数码管位选3
71 2 P3=num[*(p+2)]|0x80;//显示小数点
72 2 delayms(2);
73 2 P2=0xff;
74 2 }
75 1
76 1 if( ((count==1)&&(key!=3)) || (count!=1) ){
77 2 P2=0xf7;//数码管位选4
78 2 P3=num[*(p+3)];
79 2 delayms(2);
80 2 P2=0xff;
81 2 }
82 1 }
83
84 //功能: 选择中的频率位闪烁
85 void brind()
86 {
87 1 uchar i,temp;
88 1 switch(key)
89 1 {
90 2 case 0:temp=0xfe;break;
91 2 case 1:temp=0xfd;break;
92 2 case 2:temp=0xfb;break;
93 2 case 3:temp=0xf7;break;
94 2 default:break;
95 2 }
96 1 count2++;
97 1 if(count2>40)
98 1 {
99 2 count2=0;
100 2 ///////////
101 2 for(i=20;i>0;i--)
102 2 {
103 3 P2=temp;//数码管位选
104 3 P3=num[*(fre+key)];//当前正在操作的数据位闪烁
105 3 delayms(2);
106 3 P2=0xff;
107 3 display(fre);
108 3 }
109 2 //////////
110 2 }
111 1 }
112
113 //功能: 通用延时程序
114 void delayms(uchar i)
115 {
116 1 uchar n=10;
117 1 while(i--)
C51 COMPILER V7.00 BH1415 08/17/2007 21:01:05 PAGE 3
118 1 while(n--);
119 1 }
120
121 //功能: 按键扫描,执行后可能改变的值:flag,key,fre[key]
122 void scankey(void)
123 {
124 1 //数码管位选择按键 key_select
125 1 if(key_select==0) //频率位选择
126 1 {
127 2 delayms(5);
128 2 if(key_select==0)
129 2 {
130 3 while(key_select==0)
131 3 display(fre); //在按键未松开时进行显示,避免按下不放时没有显示数值
132 3
133 3 if(count==0) count=1; //这样可以识别key_select这个按键是否是第一次按下
134 3 //也提供了一个count==1的标志给其它函数指示
135 3 else
136 3 {
137 4 key++;
138 4 if(key>3)
139 4 {
140 5 key=0;
141 5 flag=1;
142 5 count=0;//当最后一位频率值设定后再按此键就标志完成一次频率修改
143 5 //这样就可以减少一个确定按键的使用
144 5 }
145 4 else
146 4 switch(key)
147 4 {
148 5 case 2:if((fre[0]==1)&&(fre[1]>=2)) {fre[2]=0;fre[1]=2;}
149 5 else if((fre[0]==0)&&(fre[1]<7)) fre[1]=7;break;
150 5 case 3:if((fre[0]==1)&&(fre[1]==2)) fre[2]=fre[3]=0;break;
151 5 default:break;
152 5 }
153 4 }
154 3 }
155 2 }
156 1
157 1 //频率值加一按键 key_add
158 1 if(key_add==0) //频率值增加
159 1 {
160 2 delayms(5);
161 2 if(key_add==0)
162 2 {
163 3 while(key_add==0) display(fre);
164 3 fre[key]++;
165 3 switch(key)
166 3 {
167 4 case 0:if(fre[key]>1) fre[key]=0;break;
168 4 case 1:if((fre[0]==1)&&(fre[1]>2)) fre[key]=0;
169 4 else if((fre[0]==0)&&(fre[key]>9)) fre[key]=7;
170 4 else if((fre[0]==0)&&(fre[key]<7)) fre[key]=9;
171 4 else if(fre[key]>9) fre[key]=0;break;
172 4
173 4 case 2:if((fre[0]==1)&&(fre[1]>=2)) {fre[2]=0;fre[1]=2;}
174 4 else if(fre[key]>9) fre[key]=0;
175 4 if((fre[0]==0)&&(fre[1]<7)) fre[1]=7;
176 4 break;
177 4
178 4 case 3:if((fre[0]==1)&&(fre[1]==2)) fre[2]=fre[3]=0;
179 4 else if(fre[key]>9) fre[key]=0;break;
C51 COMPILER V7.00 BH1415 08/17/2007 21:01:05 PAGE 4
180 4 default:break;
181 4 }
182 3 }
183 2 }
184 1
185 1 //频率值减一按键 key_del
186 1 if(key_del==0) //频率值减小
187 1 {
188 2 delayms(5);
189 2 if(key_del==0)
190 2 {
191 3 while(key_del==0) display(fre);
192 3 if(fre[key]==0)
193 3 fre[key]=9;
194 3 else
195 3 fre[key]--;
196 3 }
197 2 }
198 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 743 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 5
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -