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