📄 bh1415.lst
字号:
C51 COMPILER V7.00 BH1415 03/25/2005 11:07:34 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 /*********************************************************************/
2 // BH1415F调频台控制C程序
3 // 使用keil C51
4 // 2005.3.16通过调试
5 /*********************************************************************/
6 //使用AT89C52单片机,12MHZ晶振,用共阳四位LED数码管
7 //P0口输出段码,P2口扫描
8 //#pragma src(d:\aa.asm)
9 #include "reg52.h"
10 #include "intrins.h" //_nop_();延时函数用
11 #define Disdata P0 //段码输出口
12 #define discan P2 //扫描口
13 #define keyio P1 //键盘接口
14 #define uchar unsigned char
15 #define uint unsigned int
16 sbit DA=P3^0; //数据输出
17 sbit CK=P3^1; //时钟
18 sbit CE=P3^2; //片选
19 sbit DIN=P0^7; //LED小数点控制
20 sbit monolamp=P3^3; //立体声指示灯
21 uint h; //延时参量
22 //
23 //扫描段码表
24 uchar code dis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
25 /* 共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */
26 uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; // 列扫描控制字
27 uint data f_data={0x00},f_data1; // 频率数据,数据运算时暂存用
28 uchar data display[4]={0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据
29 uchar bdata condata=0x08; //1415控制字高5位,开机为立体声状态
30 sbit mono=condata^3; //单声道/立体声控制位
31 uchar data concommand[2],keytemp; //合成后的2个控制字,键值存放
32 //
33 /**********************************************************************/
34 //
35 //
36 /***********11微秒延时函数**********/
37 //
38 void delay(uint t)
39 {
40 1 for(;t>0;t--);
41 1 }
42 //
43 /***********LED显示动态扫描函数**********/
44 scan()
45 {
46 1 char k;
47 1 for(k=0;k<4;k++) //四位LED扫描控制
48 1 {
49 2 Disdata=dis_7[display[k]];
50 2 if(k==1){DIN=0;}
51 2 discan=scan_con[k];delay(90);discan=0xff;
52 2 }
53 1 }
54 //
55 //
C51 COMPILER V7.00 BH1415 03/25/2005 11:07:34 PAGE 2
56 /***********频率数据转换为显示用BCD码函数**********/
57 turn_bcd()
58 {
59 1 display[3]=f_data/1000;if(display[3]==0){display[3]=10;}//最高位为0时不显示
60 1 f_data1=f_data%1000;
61 1 display[2]=f_data1/100;//求显示十位数
62 1 f_data1=f_data1%100;
63 1 display[1]=f_data1/10; //求显示个位数
64 1 display[0]=f_data1%10; //求显示小数位
65 1 }
66 /***********控制字合成函数**********/
67 command()
68 {
69 1 concommand[1]=f_data/256;
70 1 concommand[0]=f_data%256;
71 1 concommand[1]=concommand[1]+condata;
72 1 }
73 /***********写入1个字节函数**********/
74 write(uchar val)
75 {
76 1 uchar i;
77 1 CE=1;
78 1 for(i=8;i>0;i--)
79 1 {
80 2 DA=val&0x01;//
81 2 _nop_();_nop_();_nop_();_nop_();
82 2 CK=1;
83 2 _nop_();_nop_();_nop_();_nop_();
84 2 CK=0;
85 2 val=val/2;
86 2 }
87 1 CE=0;
88 1 }
89 /***********控制字写入1415函数**********/
90 w_1415()
91 {
92 1 write(concommand[0]);
93 1 write(concommand[1]);
94 1 }
95 //
96 //*************频率涮新*****************//
97 fup()
98 {
99 1 turn_bcd(); //显示BCD码转换
100 1 command(); //合成控制字
101 1 w_1415(); //写入1415
102 1 }
103 //
104 /***********查键函数**********/
105 read_key()
106 {
107 1 keyio=0xf0;
108 1 keytemp=(~keyio)&0xf0;
109 1 if(keytemp!=0)
110 1 {
111 2 keytemp=keyio;
112 2 keyio=0x0f;
113 2 keytemp=keytemp|keyio;
114 2 while(((~keyio)&0x0f)!=0); //
115 2 switch(keytemp)
116 2 {
117 3 case 238:{f_data++;if(f_data>1099){f_data=1099;}fup();break;}//加0.1MHZ
C51 COMPILER V7.00 BH1415 03/25/2005 11:07:34 PAGE 3
118 3 case 222:{f_data--;if(f_data<800){f_data=800;}fup();break;} //减0.1MHZ
119 3 case 190:{mono=~mono;if(mono){monolamp=0;}else monolamp=1;fup();break;}//立体声/单声道转换
120 3 case 126:{f_data=1090;fup();break;}//预置109.0MHZ
121 3 case 237:{f_data=1070;fup();break;}//预置107.0MHZ
122 3 case 221:{f_data=1050;fup();break;}//预置105.0MHZ
123 3 case 189:{f_data=1030;fup();break;}//预置103.0MHZ
124 3 case 125:{f_data=1000;fup();break;}//预置100.0MHZ
125 3 case 235:{f_data=970;fup();break;}//预置97.0MHZ
126 3 case 219:{f_data=950;fup();break;}//预置95.0MHZ
127 3 case 187:{f_data=930;fup();break;}//预置93.0MHZ
128 3 case 123:{f_data=900;fup();break;}//预置90.0MHZ
129 3 case 231:{f_data=870;fup();break;}//预置87.0MHZ
130 3 case 215:{f_data=850;fup();break;}//预置85.0MHZ
131 3 case 183:{f_data=830;fup();break;}//预置83.0MHZ
132 3 case 119:{f_data=800;fup();break;}//预置80.0MHZ
133 3 default:{break;}//
134 3 }
135 2 }
136 1 keyio=0xff;
137 1 }
138 //
139 //
140 //
141 /**************主函数****************/
142 main()
143 {
144 1 Disdata=0xff; //初始化端口
145 1 discan=0xff;
146 1 keyio=0xff;
147 1 DA=0; //bh1415禁止
148 1 CK=0; //
149 1 CE=0; //
150 1 for(h=0;h<4;h++){display[h]=8;}//开机显示"8888"
151 1 for(h=0;h<500;h++)
152 1 {scan();} //开机显示"8888"2秒
153 1 f_data=1000; //预置1000MHZ
154 1 monolamp=0; //开机立体声灯点亮
155 1 fup(); //频率送入BH1415
156 1 while(1)
157 1 {
158 2 read_key(); //查键按纽
159 2 scan(); //显示4ms
160 2 }
161 1 }
162 //
163 //*********************结束**************************//
164
165
166
167
168
169
170
171
172
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 571 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.00 BH1415 03/25/2005 11:07:34 PAGE 4
DATA SIZE = 14 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -