📄 newlcdtest_1127.c
字号:
#include "stdio.h"
#include "c8051F020.h"
#include "string.h"
///////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////宏定义////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
#define LCMDATA P4 //液晶并行数据
#define SDATA P5 //与信号板交换的并行数据
#define KEY P6 //按键
#define LEDSTATE P7 /*LED:P7.7__________________________________P7.0
|保护|失锁|射频|外环|内环|10MHz|秒脉冲|音频|
|____|____|____|____|____|_____|______|____|*/
#define PARADEFAULT 0x00 //恢复默认值
#define LAUDIO 0x01 //左声道电平
#define RAUDIO 0x02 //右声道电平
#define PILOT 0x03 //导频频偏
#define CONT 0x04 //调制度
#define EN_RF 0x05 //射频开关(1bit表示开关,0bit表示内部还是外部10M,2bit表示削波设置)
#define FREQ_M 0x06 //载波频率高16位
#define FREQ_L 0x07 //载波频率低16位
#define TUNNEL 0x08 //音频输入
#define MODE 0x09 //工作模式
#define TIME 0x0a //预加重时间
#define DELAY 0x0b //音频延时整数位
#define DELAY1 0x0c //音频延时小数位
#define DELAY_19K 0x0d //导频延时
#define SYSCLK 11059200 //系统时钟频率(Hz)
#define BAUDRATE4800 4800 //UART波特率 (bps)
#define BAUDRATE9600 9600 //UART波特率 (bps)
#define BAUDRATE19200 19200 //UART波特率 (bps)
/////远控错误信息/////////////
#define ERR_ADDR 0x80 //工作参数地址号非法
#define ERR_LEN 0x40 //工作参数字节长度非法
#define ERR_DATA 0x20 //工作参数数值非法
#define ERR_COM 0x10 //命令非法
#define ERR_AUD 0x08 //静音,音量不能更改
#define ERR_CTR 0x24 //控制电压增加过快
#define ERR_POW 0x04 //功率已达到30瓦,控制电压不能再增加
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
/////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////端口定义/////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
sbit TXD0 =P0^0;//串口0
sbit RXD0 =P0^1;
sbit TXD1 =P0^2;//串口1
sbit RXD1 =P0^3;
sbit INT0 =P0^4;//外部中断0
sbit INT1 =P0^5;//外部中断1(未用)
sbit DS_CLK =P0^6;//实时时钟时钟端口
sbit DS_IO =P0^7;//实时时钟输入输出端口
sbit OVER =P1^1;//LED:过载
sbit MULOCK =P1^2;//LED:互锁
sbit CHECK1 =P1^3;//剩余端口
sbit CHECK2 =P1^4;
sbit CTR_IN =P1^5;//外环控制
sbit CIR_OUT =P1^6;
sbit DS_RST =P1^7;//实时时钟复位端
sbit LCM_E =P2^0;//液晶端口
sbit LCM_WR =P2^1;
sbit LCM_RS =P2^2;
sbit LCM_CSB =P2^3;
sbit LCM_CSA =P2^4;
sbit LCM_RST =P2^5;
sbit LCM_LED =P2^6;
sbit ADD0 =P3^0;//信号传送标志
sbit ADD1 =P3^1;
sbit ADD2 =P3^2;
sbit FPGA =P3^3;//信号板返回信号
sbit SHUZI =P3^4;
sbit MONI =P3^5;
sbit LOCK =P3^6;
sbit IE7 =P3^7;//剩余端口
/////////////////////////////////////////////////////////////////////////////////
//////////////////////////////寄存器定义////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
sfr16 ADC0 = 0xbe;//ADC0数据
sfr16 DAC0 = 0xd2;//DAC0数据
sfr16 DAC1 = 0xd5;//DAC1数据
////////////////////////////////////////////////////////////////////////////////
//////////////////////////////标志///////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
uchar xdata menu_value=0;//菜单项数
uchar xdata flag_adjust=0;//在菜单内还是外
uchar xdata menu_grade=1;//菜单级数标志
uchar xdata main_value=1;//主菜单项
uchar xdata sub_value=1;//子菜单项
uchar xdata en_vfd=1;//液晶显示标志:1:显示;0:关闭
uchar xdata flag_store=1;//保存标志
uchar xdata flag_affirm=0;//确认键选择
uchar xdata en_ds=0;//实时时钟开启标志:0为未开启,1为已开启
uchar xdata flag_freq=0;//频率改变位选择
uchar xdata flag_rf=1;//自动电平控制方式:1:内环控制;2:远程控制;0:关闭
//uchar xdata flag_vol=2;//控制电压改变位选择
uchar xdata flag_volume=0;//左右声道改变位选择:0:在菜单项外;1或2:调整左声道音量;3或4:调整右声道音量
uchar xdata flag_symbol=0;//音量正负标志:0为正,1为副;0bit为左声道,1bit为右声道
uchar xdata flag_mode=0;//音频方式标志:0:在菜单项外;1:调整音频输入;2:调整音频声道
uchar xdata flag_modu=0;//调制设置标志:0:在菜单项外;1或2:调整调制度;3:调整预加重;4:调整导频幅度
uchar xdata flag_syn=0;//同步设置标志:0:在菜单外;1-6:音频延时调整;7:导频延时调整;8:同步模式调整
uchar xdata flag_time=0;//日期时间调整改变位选择:0:在菜单项外;1.2.3:调整日期;4:调整星期;5.6.7:调整时间
uchar xdata flag_ser=0;//远控设置标志:0:在菜单项外;1:调整设备号;2:调整波特率
uchar xdata flag_backup=0;//备份标志:0:备份禁止;1:备份主机;2:备份从机
////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////参数/////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//////////////////////数组//////////////////////////
uchar xdata buf[10];//接收数据存储数组
ulong xdata para[17]={0};//参数保存数组
///////////////////////按键值//////////////////////
uchar xdata keytemp=0;
/////////////////////射频设置/////////////////////
uint xdata freq_carry=800;//载波频率
int xdata power_set=0;//设置功率
ulong xdata power_out=0;//输出功率
//输出功率表
//float xdata power[16]={0,50.59,86.13,925,1754,2091,2263,2373,2523,2658,2891,3060,3187,3283,3318,3350};
ulong xdata power[36]={0,50,97,130,195,205,391,669,1050,1550,2200,2950,3800,4840,5920,7110,8320,9620,10900,13900,14650,15200,15700,17500,18600,19800,20700,21500,23500,25100,26400,27800,28500,29100,29500,30700};
ulong xdata power_out_1=0;//输出功率保存
int xdata ctr_vol=140;//控制电压
ulong xdata voltemp;//控制电压数字值(DAC0的输出值)
ulong xdata vol_in=0;//入射电压
//入射电压表
//float xdata voltage[16]={0,25,415,970,1408,1557,1630,1675,1735,1787,1875,1936,1988,2021,2037,2045};
ulong xdata voltage[36]={0,1,10,17,39,42,96,161,235,316,403,491,578,673,762,849,933,1016,1089,1258,1294,1322,1345,1430,1482,1536,1571,1602,1689,1756,1807,1864,1891,1914,1925,1958};
uchar xdata en_power=2;//输出禁止
//////////////////////////音频设置//////////////////////
uchar xdata laudio_signal =100;//左通道电平
uchar xdata raudio_signal =100;//右通道电平
ulong xdata laudio_signal_1;//左声道电平保存
ulong xdata raudio_signal_1;//右声道电平保存
//左声道系数表
ulong xdata lsignal[21]={0x45B000,0x3E1BEB,0x375AD1,0x3155C1,0x2BF847,0x27302B,0x22ED2E,0x1F20D6,0x1BBE3B,0x18B9DF,0x160981,
0x13A3FF,0x118135,0x0F99E1,0x0DE78C,0x0C6473,0x0B0B73,0x09D7F8,0x08C5EC,0x07D1AE,0x06F800};
//右声道系数表
ulong xdata rsignal[21]={0x457E00,0x3DEF5B,0x373319,0x31325B,0x2BD8BB,0x27140D,0x22D41F,0x1F0A80,0x1BAA54,0x18A821,0x15F9B1,
0x1395E7,0x1174A5,0x0F8EAF,0x0DDD92,0x0C5B8F,0x0B0386,0x09D0E7,0x08BFA1,0x07CC12,0x06F300};
ulong xdata lweight=0x6f800;//左声道系数
ulong xdata rweight=0x6f300;//右声道系数
uchar xdata tunnel_choice=0;//音频输入:0:模拟;1:数字;其他:内部测试信号
uchar xdata mode_operate=1;//工作模式:0:单声道;1:立体声
uchar xdata en_audio=0;//静音设置标志(0关静音,1开静音)
////////////////////////////调制设置/////////////////////
ulong xdata cont_fm=0x058ABC;//调制度传送参数
uchar xdata fm_centi=100;//调制度显示参数
ulong xdata pilot_vol=0x0a6aff;//导频频偏传送参数
uchar xdata pilot_range=10;//导频频偏显示参数
uchar xdata time_choice = 0;//预加重时间:0:不加重;2:50us;3:75us.
///////////////////////////同步设置///////////////////////
ulong xdata delay_audio = 0;//音频延时
uint xdata delay_19k = 0;//导频延时传送参数
uint xdata delay_pilot=0;//导频延时显示参数
uchar xdata freq_clk=1;//频标:0:外部;1:内部
//////////////////////////系统维护//////////////////////////
uchar xdata hour=0;//时间设置:小时
uchar xdata minute=0;//时间设置:分
uchar xdata second=0;//时间设置:秒
uchar xdata week=1;//星期设置
uint xdata year=07;//日期设置:年
uchar xdata month=1;//日期设置:月
uchar xdata day=1;//日期设置:日
uchar xdata num=1;//设备号
uchar xdata baudrate=3;//波特率
uchar xdata control_choice=1;//控制方式:0:键盘允许,远控禁止;1:键盘和远控均可
int xdata vol_out=0;//反射电压
uchar xdata ratio=0;//驻波比
int xdata vol_tem=0;//温度电压
char xdata temper=0;//温度
int xdata temperature[11]={0,25,35,40,45,50,55,60,65,70,71};//温度表
int xdata voltage_temper[11]={0,248,335,378,423,465,510,555,600,655,668};//温度电压表
//////////////////////////////传送参数////////////////////////////
uchar xdata msb = 0x00;//传送数据高位
uchar xdata lsb = 0x00;//传送数据低位
uchar xdata isb = 0x00;//传送数据中间八位
uint xdata ml_data=0x00;//传送高低位合并后的数据
ulong xdata mil_data=0;//传送二四位合并后的数据
uint xdata delay_quo=0x00;//音频延时商
uint xdata delay_res=0x00;//音频延时余数
uint xdata freq_msb=0x1851;//载波频率高16位
uint xdata freq_lsb=0xeb85;//载波频率低16位
uint xdata count_TF2=0;//定时器2中断计数
/////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////函数声明/////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////单片机控制部分/////////////////////////////////////
void c8051_initial(void);//单片机初始化
void control_initial(void);//初始化控制字
void exint0(void);//单片机外部中断服务程序
void interrupt_UART(void);//UART中断服务程序
void interrupt_T2(void);//定时器2中断服务程序
void sre(void);//串口接收数据块
void str_right(void);//串口传送成功
void store_para(void);//保存参数
void para_default(void);//恢复默认值
void para_stored(void);//调用保存参数
//void FlashWrite(ulong xdata *,ulong *,uchar);//FLASH写数据
//void FlashRead(ulong code *,ulong *,uchar);//FLASH读数据
void FlashWrite(ulong *,uchar);//FLASH写数据
void FlashRead(ulong *,uchar);//FLASH读数据
/////////////////////////////////显示模块部分///////////////////////////////////////
void vfd_com(uchar *,char);//串口发送命令
void clear_screen(void);//清屏
void screen_off(void);//液晶显示关
void lcd_face(void);//显示初始化界面
void main_menu1(void);//主菜单第一屏
void main_menu2(void);//主菜单第二屏
void sub_menu1_1(void);//射频设置子菜单第一屏
void sub_menu1_2(void);//射频设置子菜单第二屏
void sub_menu2_1(void);//音频设置子菜单第一屏
void sub_menu2_2(void);//音频设置子菜单第二屏
void sub_menu3(void);//调制设置子菜单
void sub_menu4_1(void);//同步设置子菜单第一屏
void sub_menu4_2(void);//同步设置子菜单第二屏
void sub_menu5_1(void);//系统维护子菜单第一屏
void sub_menu5_2(void);//系统维护子菜单第二屏
void sub_menu12(void);//输出功率设置子菜单
void sub_menu13_1(void);//自动电平控制子菜单第一屏
void sub_menu13_2(void);//自动电平控制子菜单第二屏
void sub_menu15(void);//外环电压设置子菜单
void sub_menu21(void);//音量设置子菜单
void sub_menu51_1(void);//状态检测子菜单第一屏
void sub_menu51_2(void);//状态检测子菜单第二屏
void sub_menu52(void);//日期、时间设置子菜单
void sub_menu53(void);//参数存储子菜单
void sub_menu54(void);//远程控制子菜单
void sub_menu55(void);//备份设置子菜单
void sub_menu51_51(void);//功率放大器子菜单
void display_freq(uint);//载波频率显示
void display_setpower(int);//设置功率显示
void display_power(ulong);//输出功率显示
void display_vol(uint);//控制电压显示
void display_lsignal(uchar);//左声道电平显示
void display_rsignal(uchar);//右声道电平显示
void display_audioin(void);//音频输入显示
void display_mode(void);//音频声道显示
void display_pre(void);//预加重显示
void display_fm(uchar);//调制度显示
void display_pilot(uchar);//导频频偏显示
void display_delay(ulong);//音频延时显示
void display_19k(uint);//导频延时显示
void display_syn(void);//同步模式显示
void display_date(uchar,uchar,uchar);//日期显示
void display_week(uchar);//星期显示
void display_time(uchar,uchar,uchar);//时间显示
void display_num(uchar);//设备号显示
void display_baud();//波特率显示
void display_in(uint);//入射电压显示
void display_out(uint);//反射电压显示
void display_ratio(uchar);//驻波比显示
void display_temper(char);//温度显示
////////////////////////////////按键控制部分///////////////////////////////////////
void turn_up(void);//向上按键
void turn_down(void);//向下按键
void turn_left(void);//向左按键
void turn_right(void);//向右按键
void turn_affirm(void);//确定键
void turn_cancle(void);//取消键
void key_judge(void);//按键是否弹起判断
///////////////////////////////运算部分///////////////////////////////////////////
void delay_div(ulong);//延时时间换算
void delay19k_div(uint);//导频延时换算
void freq_div(uint);//载波频率换算
void fm_trans(uchar);//调制度换算
void dispart(uint);//数据高低位分离
void dispart24(ulong);//24位数据分离
void unite(uchar,uchar);//数据高低位合并
void unite24(uchar,uchar,uchar);//24位数据合并
void sent(uchar,uchar,uchar,uchar);//传送数据
//////////////////////////////实时时钟模块////////////////////////////////////////
void reset_3w(void);//实时时钟复位函数
void wbyte_3w(uchar);//字节写入函数
uchar rbyte_3w(void);//字节读取函数
void clkwritebyte(uchar,uchar);//时钟字节写入函数
void disp_clk_regs(void);//显示时钟寄存器内容函数
void initial_DS1302(uchar,uchar,uchar,uchar,uchar,uchar,uchar);//DS1302初始化函数
///////////////////////////////其他//////////////////////////////////////////////
void delay(uint);//延时
/////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////显示模块命令数组//////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
////////////////////1.模块基本命令//////////////////////
///////////////////////////////////////////////////////
//指示VFD显示开启
uchar code vfd_on[]="VFD,ON";//sizeof(vfd_on)=6
//指示VFD显示关闭
uchar code vfd_off[]="VFD,OFF";//sizeof(vfd_off)=7
//清除整个VFD屏幕显示区
uchar code clear_all[]="SCREEN,0";//sizeof(clear_all)=8
//屏幕刷新命令,使得新的屏幕显示操作生效
uchar code update_screen[]="SCREEN,100";//sizeof(update_screen)=10
///////////////////////////////////////////////////////
////////////////2.模块显示内容////////////////////////
/////////////////////////////////////////////////////
//初始化界面:调频发射机数字激励器,北京北广电子集团 初始化中,请稍候
uchar code face_1[]="HZS,5,2,7,调频发射机数字激励器";
uchar code face_2[]="HZS,24,16,7,北京北广电子集团";
uchar code face_3[]="HZS,15,22,7,初始化中,";
uchar code face_4[]="HZS,15,84,7,请稍候";
///////////////////////////主菜单///////////////////////////////
//射频设置
uchar code main_1[]="HZS,0,14,7,射频设置";
//音频设置
uchar code main_2[]="HZS,14,14,7,音频设置";
//调制设置
uchar code main_3[]="HZS,28,14,7,调制设置";
//同步设置
uchar code main_4[]="HZS,0,14,7,同步设置";
//系统维护
uchar code main_5[]="HZS,14,14,7,系统维护";
//恢复默认值
uchar code main_6[]="HZS,28,14,7,恢复默认值";
////////////////////////////一级子菜单////////////////////////////
//////////射频设置子菜单/////////////////
//中心频率设置
uchar code sub1_11[]="HZS,0,14,7,中心频率设置";
//输出功率设置
uchar code sub1_12[]="HZS,14,14,7,输出功率设置";
//自动电平控制
uchar code sub1_13[]="HZS,28,14,7,自动电平控制";
//射频开关控制
uchar code sub1_14[]="HZS,0,14,7,射频开关控制";
//外环电压设置
uchar code sub1_15[]="HZS,14,14,135,外环电压设置";
//////////音频设置子菜单/////////////////
//音量设置
uchar code sub1_21[]="HZS,0,14,7,音量设置";
//音频输入设置
uchar code sub1_22[]="HZS,14,14,7,音频输入";
//音频声道设置
uchar code sub1_23[]="HZS,28,14,7,音频声道";
//静音设置
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -