📄 2144.c
字号:
#include <iom128v.h>
#include <control.h>
#include <lcd.h>
#include <macros.h>
#include <qam.h>
#include <sensor.h>
//define interrupt vector
#pragma interrupt_handler timer1:15
#pragma interrupt_handler tx_interrupt:33
#pragma interrupt_handler rx_interrupt:31
const unsigned char net_password[6]={0x55,0x33,0xaa,0x66,0x88,0x99};
unsigned char menu_password[6];
unsigned char power_password[6]={3,3,3,2,2,2};
unsigned char sound_swtich[4]={1,1,1,1};
unsigned char w3100_shar[6]={0x01,0x09,0x09,0x06,0x06,0x06};
unsigned char net_gatway[4];
unsigned char net_sub[4];
unsigned char net_lip[4];
unsigned char net_dip[4];
unsigned char qam_num[8];
//I2c read and write address
unsigned char rd_device_add;
unsigned char wr_device_add;
unsigned char key_status,key_time_start,key_time_value;
unsigned char time_1val,key_50ms,time_50ms,time_5s,T_5s,time_3mval,time_2val;
unsigned char T_20s,T_2s,time_20sval;
unsigned char T_30s,time_30s;
unsigned char T_1s=1;
unsigned char time_1s=0;
unsigned char T_15s=0;
unsigned char time_15s=0;
unsigned char time_20ms=0;
unsigned char over_time=0;
unsigned char disp_status=0;
unsigned char memu_operation=0;
unsigned char password_ok;
unsigned char net_password_ok=0;
unsigned char password_check_count=0;
unsigned char have_connect=0;
unsigned char bCurserOn;
unsigned char power_on,power_off; ///power off used
unsigned char power_on_flg=0;
unsigned char powre_off_flg=0;
unsigned char rst_power_off=0;
unsigned char to_power_off=0;
unsigned char restart,rst_flg;
unsigned char time[7];
unsigned char ucMenuLayer=0; //菜单级别
unsigned char ucMenuPosition=1; //主菜单纵向位置
unsigned char ucCurserPosition=1; //光标当前位置
unsigned char ucMenuCurrentPosition=1; //二级子菜单横向位置
unsigned char ucsubMenuCurrentPosition=1; //子菜单当前位置
unsigned char soundMenuPosition=1;
unsigned char qam_ch_position=0;
unsigned char sens_ch_position=0;
unsigned char vol_ch_position=0;
unsigned int com_set;
unsigned char qam_set=0;
unsigned char net_show=0;
unsigned char password_check=0;
unsigned char led_status=0;
unsigned char led_count=0;
unsigned char ask_server_timer,self_check_flag,time_ack,sever_restore,serv_trl;
unsigned char server_start=0;
unsigned char temperature_alarm=0;
unsigned char vol1_high;
unsigned char vol1_low;
unsigned char vol2_high;
unsigned char vol2_low;
unsigned char vol3_high;
unsigned char vol3_low;
unsigned char vcc_high;
unsigned char vcc_low;
unsigned char temp_alarm[3],temp_alarm1[3];
unsigned char temperature_h[2],temperature_l[2];
unsigned char qam_ch,center_frequency,qammode;
unsigned int iSmbRat;
unsigned int iSmbRatSaved[8];
unsigned char ucMenuQModSubPosition[8],ucMenuIFSubPosition[8];
unsigned char tem_ch,vol_ch,spk_on;
unsigned char sound_type_saved,baud_saved;
unsigned char sound_swtich_saved[4];
unsigned char hour_saved,mint_saved;
unsigned char key_temp;
unsigned char power_to_off;
unsigned char reset=0;
unsigned char sys_init=0;
unsigned int rst_time=0;
unsigned char restart=0;
unsigned char power_up=0x5a;
unsigned int VOL_H_valsaved[4],TEMP_H_valsaved[2];
unsigned int VOL_L_valsaved[4],TEMP_L_valsaved[2];
unsigned char check_status[];
unsigned char send_data[100],net_send_data[256];
unsigned char com_rx_buf[256],com_tx_buf[256];
unsigned char net_rx_buf[256],net_tx_buf[256];
unsigned char net_Rxout,net_Txout,net_Txin,net_Rxin;
unsigned char com_data,rece_ack;
unsigned char net_serv_conv_len,net_serv_conv;
unsigned char com_Rxin,com_Rxout,com_Txin,com_Txout;
unsigned char com_tx_empty,net_tx_empty;
unsigned char net_serv_conv=0;
unsigned char net_serv_conv_len=0;
unsigned char have_check=0;
//---------------------------------------------------------
// NAME: port_init()
// ENTRY: void
// RETURN: void
// FUNCTION:单片机端口初始化
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void port_init(void)
{
DDRA = 0xff;
PORTA = 0xff;
DDRB = 0xff;
PORTB = 0xff;
DDRD = 0xff;
PORTD = 0xff;
DDRE = 0x8c;
PORTE = 0x00;
DDRF = 0x0f;
PORTF = 0x0f;
DDRG = 0x1f;
PORTG = 0x1f;
}
//---------------------------------------------------------
// NAME: init_config()
// ENTRY: void
// RETURN: void
// FUNCTION:初始化参数
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void init_config(void)
{
unsigned char i;
if(read_eeprom(0x0010)==0x5a)
{
//read the sound the type
sound_type_saved=read_eeprom(0x0052);
for(i=0;i<4;i++)
{
sound_swtich[i]=read_eeprom(0x005A+i );
}
//read the menupassword
//init the password
for(i=0;i<6;i++)
{
menu_password[i]=read_eeprom(0x0060+i);
}
}
else
{
//init the password
menu_password[0]=3;
menu_password[1]=2;
menu_password[2]=3;
menu_password[3]=2;
menu_password[4]=3;
menu_password[5]=2;
for(i=0;i<6;i++)
{
write_eeprom(0x0060+i,menu_password[i]);
}
}
}
//---------------------------------------------------------
// NAME: fresh_config()
// ENTRY: void
// RETURN: void
// FUNCTION:初始化参数
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void fresh_config(void)
{
//init the uart1
if(com_set==9600)
{
UBRR1L=0x47; /*set baud rate,11.0592MHZ ,9600B/S*/
UBRR1H=0x00;
UCSR1B=0xd8; /*Enable receiver and transmiter*/
UCSR1C=0x06; /*8 data bit,1 stop bit*/
}
else
{
UBRR1L=0x8f; /*set baud rate,11.0592MHZ ,4800B/S*/
UBRR1H=0x00;
UCSR1B=0xd8; /*Enable receiver and transmiter*/
UCSR1C=0x06; /*8 data bit,1 stop bit*/
}
}
//---------------------------------------------------------
// NAME: ENABLE_XM()
// ENTRY: void
// RETURN: void
// FUNCTION:使能外部寻址操作
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void ENABLE_XM(void)
{
MCUCR|=0X80;
XMCRA=0X0e;
XMCRB=0X87;
}
//---------------------------------------------------------
// NAME: DISABLE_XM()
// ENTRY: void
// RETURN: void
// FUNCTION:禁止使能外部寻址操作
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void DISABLE_XM(void) //disable the extern sram
{
MCUCR=0X00;
XMCRA=0X0e;
XMCRB=0X87;
}
//---------------------------------------------------------
// NAME: power_on_check()
// ENTRY: void
// RETURN: void
// FUNCTION:上电检测
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void power_on_check(void)
{
unsigned char temp;
power_on_flg=PINC&0X02;
if(power_on_flg)
{
power_on=1;
PORTE|=0X80; //LED_PORT=1;
return;
}
SHOW_LOGO(17);
SREG|=0x80;
ENABLE_XM( );
temp= key_scan( );
while(temp!= KEY_POWER )
{
temp= key_scan( );
W3100A_connect();
if(have_connect)
{
write_eeprom(0x0200,0);
net_client_receive();
}
if(power_on) break;
}
DISABLE_XM( );
WDR();
delayms(200);
if(temp==KEY_POWER)
OnKeyPower( );
PORTE|=0X80; //LED_PORT=1;
}
//---------------------------------------------------------
// NAME: init()
// ENTRY: void
// RETURN: void
// FUNCTION:初始化单片机及变量
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void init(void)
{
unsigned char i;
//init I2c
TWBR=32;
TWSR=00;
//init the port
port_init();
//init and clear Lcd
LCD_INIT();
LCD_CLR();
//init the midi
midi_RST();
midi_init();
//init the ds1302
if(read_eeprom(0x0010)!=0x5a)
{
DS1302_init( );
}
//read the sound and menupassword
init_config();
Eeprom_Init();
//fresh the device configration
fresh_config();
//INIT nET
DDRE |= 0x0c;
PORTE|=0X04;
delayms(14);
PORTE&=~0X04;
ENABLE_XM();
w3100a_open();
write_eeprom(0x0200,0x55);
DISABLE_XM( );
//init the timer1
TCCR1B=0X00; // Stop Timer1
TCNT1H = 0x00; // Clear Timer1
TCNT1L = 0x00;
TCNT1L=0x9a;
TCNT1H=0xfa;
TIMSK=0x04; //开放T1溢出中断
TCCR1B=0x02;
//init the wdog
WDTCR=0X18; /*open the wdog gate*/
WDTCR=0X1e; /*set the wdog 1s*/
WDR(); /*clear the wdog*/
//init the varible
key_status=0;
power_on=0;
power_off=0;
rece_ack=0;
restart=0;
baud_saved=1;
qam_ch_position=0;
VOL_H_valsaved[0]=350;
VOL_H_valsaved[1]=530;
VOL_H_valsaved[2]=180;
VOL_H_valsaved[3]=1205;
VOL_L_valsaved[0]=300;
VOL_L_valsaved[1]=500;
VOL_L_valsaved[2]=130;
VOL_L_valsaved[3]=1180;
//timer varible
rst_flg=0;
serv_trl=0;
ask_server_timer=0;
sever_restore=0;
time_1val=0;
time_3mval=0;
//uart
com_Rxin=0;
com_Rxout=0;
com_Txin=0;
com_Txout=0;
com_tx_empty = 1;
//net
net_Rxin=0;
net_Rxout=0;
net_Txin=0;
net_Txout=0;
net_tx_empty = 1;
//sensor
for(i=0;i<3;i++)
{
temp_alarm[i]=0;
temp_alarm1[i]=0;
}
//qam online flag
for(i=0;i<8;i++)
qam_num[i]=0;
//init the display
SHOW_LOGO(0);
delayms(5000);
WDR();
sys_init=1;
SREG|=0x80;
}
//---------------------------------------------------------
// NAME: main()
// ENTRY: void
// RETURN: void
// FUNCTION:系统主程序
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void main(void)
{
/*
DDRC |= 0x3C;
//turn on power of the scsi hard disk
PORTC &= ~0x10;
PORTC &= ~0x04;
PORTC |= 0x10;
PORTC &= ~0x10;
PORTC |= 0X10;
*/
init( );
power_on_check();
SHOW_LOGO(41); //BVCOM 反黑
delayms(3000); //wait for the power on
spk_power_on();
SHOW_LOGO(54);
delayms(3000);
SHOW_LOGO(55);
delayms(3);
SHOW_LOGO(56);
sys_check();
delayms(3);
SHOW_LOGO(28);
while(1)
{
//polling the key and the display
if(restart&&power_on)
{
init( );
power_on_check();
SHOW_LOGO(41); //BVCOM 反黑
delayms(3000); //wait for the power on
spk_power_on();
SHOW_LOGO(54);
delayms(3000);
SHOW_LOGO(55);
delayms(3000);
SHOW_LOGO(56);
sys_check();
delayms(3000);
SHOW_LOGO(28);
}
WDR();
set_show();
polling( );
WDR();
//fresh the display (time/temperature/voltage )
if(T_1s&&(!password_ok )&&(!ucMenuLayer)&&power_on)
{
if(!rst_flg)
{
disp_on_time();
T_1s=0;
}
}
}
}
//---------------------------------------------------------
// NAME: timer1()
// ENTRY: void
// RETURN: void
// FUNCTION:定时器程序,定时1ms
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void timer1(void) //1ms soft interrupt
{
unsigned char key_temp1;
//重装定时常数
TCNT1=0xfa9a;
//键盘扫描
DDRC|=0X80;
PORTC&=~0X80;
DDRA=0X00;
delayus(10);
key_status = PINA;
PORTC|=0X80;
DDRA=0XFF;
if((key_status!=0xff)&&(time_20ms==0)) key_temp=key_status;
if((key_status!=0xff)&&(time_20ms<80))
{
key_temp1=key_status;
time_20ms++;
if(key_temp1!=key_temp)
{
key_status=0xff;
time_20ms=0;
}
}
//定时时间参数
if( time_50ms>0 ) time_50ms--;
else
{
time_50ms = 65;
key_50ms = 1;
if( time_1s>0 ) time_1s--;
else
{
T_1s=1;
time_1s = 10;
if( time_5s>=5)
{
T_5s=1;
time_5s=0;
}
else
time_5s ++;
if( time_15s>=20)
{
T_15s=1;
time_15s=0;
}
else
{
if(memu_operation&&power_on)
time_15s ++;
}
if( time_30s>=40)
{
T_30s=1;
time_30s=0;
}
else
time_30s ++;
if(server_start&&power_on)
ask_server_timer++;
else
ask_server_timer=0;
if(ask_server_timer>40)
{
reset=0;
rst_flg=0;
ask_server_timer=0;
server_start=0;
serv_trl=0;
}
else
{
if(ask_server_timer>=35)
{
reset=1;
}
else
if(ask_server_timer>30)
{
serv_trl=1;
}
}
if( key_time_start )
key_time_value++;
}
}
}
//---------------------------------------------------------
// NAME: rx_interrupt()
// ENTRY: void
// RETURN: void
// FUNCTION:串口接收中断子程序
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void rx_interrupt(void)
{
WDR();
SREG&=~0X80;
com_rx_buf[com_Rxin] = UDR1;
com_Rxin++;
com_Rxin &= DATA_LEN;
SREG|=0X80;
}
//---------------------------------------------------------
// NAME: tx_interrupt()
// ENTRY: void
// RETURN: void
// FUNCTION:串口发送中断子程序
// MODIFY DATE : 2004.1.28
//--------------------------------------------------------
void tx_interrupt(void)
{
if( com_Txout!=com_Txin )
{
com_tx_empty = 0; //send char exist,set the busy flag
UDR1 = com_tx_buf[com_Txout];
com_Txout++;
}
else
com_tx_empty = 1; //send char have send,set the empty flag
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -