?? radio.lst
字號:
C51 COMPILER V7.10 RADIO 03/27/2005 22:39:52 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE RADIO
OBJECT MODULE PLACED IN radio.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE radio.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #define uchar unsigned char
2 #define uint unsigned int
3 #define ulong unsigned long
4 #include <reg52.h>
5 #include <absacc.h>
6 #include "mylib.h"
7 #define fm 0
8 #define am 1
9 #define inc 1
10 #define dec 0
11 extern uchar remkey; //定義功能數據,改變它的有遙控程序和按鍵程序
12 uchar tai; //顯示的臺號
13 bit band; uchar ab=0; //目前波段標志
14 ulong e=4;
15 uchar i=4;
16 uchar b[2]; //I2C發送緩沖
17 uchar a[2]; //I2C接收緩沖
18 main()
19 {
20 1 delay(100);
21 1 in0.in0.frq=0x6410;//初始華調頻頻率為南陽人民廣播電臺
22 1 band=fm; //初始化波段為調頻
23 1 inivfd(); //初始化VFD顯示
24 1 remkey=0xc7;
25 1 while(1)
26 1 {
27 2 while(rdkey()); //將鍵盤檢測放到主循環中,得到的結果放在remkey,
28 2 if(remkey==0xc7)
29 2 band_step(inc); //向前步進一個電臺頻率
30 2 else if(remkey==0x47)
31 2 band_step(dec); //退后一個電臺頻率
32 2 else if(remkey==0x87)
33 2 band_change(); //調頻調幅轉換
34 2 else if(remkey==0x57)
35 2 station_search(); //自動搜索所有頻道電臺,并存儲到24C02。
36 2 else if(remkey==0xf7)
37 2 station_change(inc);//調出搜到的電臺,并使電臺號加1指向下一個存儲的電臺
38 2 else if(remkey==0x77)
39 2 station_change(dec);//調出搜到的電臺,并使電臺號減1指向上一個存儲的電臺
40 2 }
41 1 }
42 void display(void) //在VFD上顯示目前頻率和當前的臺號
43 {
44 1 if(in1.in1.band==am)
45 1 vfddigit(swdata(in0.in0.frq<<4)*5-450);//調頻波段電臺實際頻率和寫入鎖相環的算法
46 1 else
47 1 vfddigit(swdata(in0.in0.frq)/2-107); //調幅波段電臺實際頻率和寫入鎖相環的算法
48 1 }
49 void band_step(bit direction) //頻率步進調幅5KHZ/STEP 調頻50HZ/STEP
50 {
51 1 iniband();
52 1 iniband1(band);
53 1 e=stepserch(direction,in0.in0.frq); //根據形參 direction 決定步進方向
54 1 display();
55 1 remkey=0x00;
C51 COMPILER V7.10 RADIO 03/27/2005 22:39:52 PAGE 2
56 1 }
57 void band_change(void) //波段換函數
58 {
59 1 band=~band; //初始化波段公共部分
60 1 iniband();
61 1 if(band==fm)
62 1 in0.in0.frq=0x6410; //如果是調頻調出最低端電臺87MHZ
63 1 else
64 1 in0.in0.frq=0x0330; //如果是調幅調出最低端電臺575KHZ
65 1 iniband1(band); //初始化具體波段的私有部分
66 1 e=stepserch(1,in0.in0.frq); //加載頻率
67 1 display(); //更新顯示
68 1 remkey=0x00;
69 1 }
70
71 void station_change(bit direction) //調出已經存儲的電臺并設置為當前電臺
72 {
73 1 if(direction)
74 1 tai++;
75 1 else
76 1 tai--;
77 1 rdnbyt(0xa0,tai*2,2,a); //經過IIC總線調出硬件地址為0XA0,子地址為tai*2的24C02中的數據高第一字節放
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -