📄 main.c
字号:
/* 切换程序主程序文件 */
/* 张亚成 */
/* 2006.4.29 */
/* 版本 V1.0 */
#include <STC12C5410AD.H>
#include <DATA.H>
#include <CODE.H>
#include <absacc.h>
#include <intrins.h>
/**************************************/
/*当有通讯板时由通讯板决定输出状态,1为有通讯板*/
#define HAVECOM 0
extern unsigned char zcrmtime,zcrktime;
bit time_js;
/**************************************/
void init_sys(void);
void check_key( void );
void check_powerm( void );
void time_pro( void );
void code_pro( void );
void mread_data( void );
void kread_data( void );
void mwrite_data( void );
void kwrite_data( void );
extern mread_data1( void );
extern kread_data1( void );
extern mwrite_data1( void );
extern kwrite_data1( void );
extern cmwrite_data( void );
extern cmread_data( void );
extern ckwrite_data( void );
extern ckread_data( void );
void ps2sr_pro( void );
void mk_rw(void);
void mk_time( void );
void main( void )
{
init_sys();
while( 1 )
{
check_powerm();
code_pro();
check_key();
mk_time();
send_aa00_time++;
if( send_aa00_time > 1000 )
{
kcutcode = 0;
}
}
}
void mk_time( void )
{
if( mrtime > 240 )
{
mclkin = 1;
mdatain = 1;
mroption = 0;
msoption = 0;
mrtime = 0;
ms_now = 0;
}
if( krtime > 240 )
{
kclkin = 1;
kdatain = 1;
kroption = 0;
ksoption = 0;
krtime = 0;
ks_now = 0;
}
if( krtime1 > 240 )
{
kclkin1 = 1;
kdatain1 = 1;
ksoption1 = 0;
kroption1 = 0;
krtime1 = 0;
k1s_now = 0;
}
if( mrtime1 > 240 )
{
mclkin1 = 1;
mdatain1 = 1;
msoption1 = 0;
mroption1 = 0;
mrtime1 = 0;
m1s_now = 0;
}
if( cmwcodenum != 0)
{
if( cutime > 220 )
{
if( cmwoption != 100 )
{
cutime = 0;
cmclk = 1;
cmdata = 1;
cmwcodenum --;
cmwoption = 0;
}
}
}
else
{
if( zcrmtime > 230 )
{
if( time_js == 1 )
{
time_js = 0;
zcrmtime = 0;
cmdata = 1;
cmclk = 0;
cmroption = 8;
}
else
{
time_js = 1;
}
}
}
if( ckwcodenum != 0 )
{
if( cuktime > 220 )
{
if( ckwoption != 100 )
{
cuktime = 0;
ckclk = 1;
ckdata = 1;
ckwcodenum --;
ckwoption = 0;
}
}
}
else
{
if( zcrktime > 230 )
{
zcrktime = 0;
ckdata = 1;
ckclk = 1;
ckroption = 8;
}
}
}
void init_sys(void)
{
/* 系统时钟分频 */
CLK_DIV = 0x00;
/* 看门狗 */
//EN_WDT = 0;
/* 定时器分频设置 */
/*定时器0 时钟采用晶振频率*/
/*定时器1 时钟采用12分频后的时钟*/
AUXR = 0x80;
/* 定时器初始化 */
TMOD = 0x12;
/* 定时器初值 */
/*1us定时*/
/*TH0 = 0xDF;
TL0 = 0xDF;*/
TH0 = 0x5B;
TL0 = 0x5B;
/*10ms定时*/
/*TH1 = 0x93;
TL1 = 0x7F;*/
TH1 = 0xFE;
TL1 = 0xB5;
/* 打开中断 */
ET0 = 1;
ET1 = 0;
EA = 1;
/* 初始化端口 */
P2M0 &= 0xf7;
P2M1 |= 0x08;
/* 打开定时器 */
TR0 = 1;
TR1 = 1;
/* 初始化数据 */
job_code = 0;
#if HAVECOM
#else
state = 0;
bxpout = 0;
bxout = state;
/*leda = state;
ledb = ~state;*/
#endif
vi = 1;
avcc = 0;
bvcc = 0;
/*声音计时时间*/
usetime1 = 0;
/*按键滤波次数*/
usetime = 0;
send_aa00_time = 0;
ms_pluse = 0;
}
void state_cutab( INT8U a_b )
{
if( a_b == 0 )
{
state = 0;
leda = state;
ledb = ~state;
bxout = state;
/*****************************************************/
/* 切换后先发送复位命令,让上位机复位设置,保证正常工作 */
msoption = 0;
mroption = 0;
ksoption = 0;
kroption = 0;
mcodenum = 2;
mcode[1] = 0xAA;
mcode[0] = 0x00;
kcodenum = 1;
kcode[0] = 0xAA;
mclkin = 1;
mdatain = 1;
kclkin = 1;
kdatain = 1;
/*****************************************************/
}
else if( a_b == 1 )
{
state = 1;
bxout = state;
/*****************************************************/
/* 切换后先发送复位命令,让上位机复位设置,保证正常工作 */
msoption1 = 0;
mroption1 = 0;
ksoption1 = 0;
kroption1 = 0;
mcodenum1 = 2;
mcode1[1] = 0xAA;
mcode1[0] = 0x00;
kcodenum1 = 1;
kcode1[0] = 0xAA;
mclkin1 = 1;
mdatain1 = 1;
kclkin1 = 1;
kdatain1 = 1;
/********************************************************/
}
}
void check_key( void )
{
/*************************************/
/* 指示灯闪烁切换
/*************************************/
led_time ++;
if( led_time == 0 )
{
if( state == 1 )
{
ledb = !ledb;
leda = 1;
}
else
{
leda = !leda;
ledb = 1;
}
}
if( ctl_cs == 0 )
{
bxout = 1;
_nop_();
if( bxout == 0 )
{
if( state != 0 )
{
state_cutab( 0 );
}
}
else
{
if( state != 1 )
{
state_cutab( 1 );
}
}
viout = 0;
if( cut_p_time >150 )
{
ctl_ou = 1;
}
cut_p_time ++;
}
else
{
if( key1 == 0)
{
usetime ++;
if( key1out == 0 )
{
if( usetime > 100 )
{
if( state == STATE_B )
{
state_cutab( 0 );
}
vi = 1;
key1out = 1;
}
}
}
else
{
key1out = 0;
}
if( key2 == 0)
{
usetime ++;
if( key2out == 0 )
{
if( usetime > 100 )
{
if( state == STATE_A )
{
state_cutab( 1 );
}
vi = 1;
key2out = 1;
}
}
}
else
{
key2out = 0;
}
if( key1 == 1 && key2 == 1 )
{
usetime = 0;
}
if( vi == 1 )
{
if( usetime1 > 250 )
{
vi = 0;
viout = 0;
usetime1 = 0;
}
else
{
viout = 1;
usetime1++;
}
}
}
}
/* 鼠标上电检测程序 */
/* 张亚成 */
/* 2006.4.29 */
void check_powerm( void )
{
if( bvcc == 0 && avcc == 0 )
{
if( amvcc == 1 )
{
state = 0;
bxout = state;
vi = 1;
avcc = 1;
ctl_ou = 0;
cut_p_time = 0;
}
else if( bmvcc == 1 )
{
state = 1;
bxout = state;
vi = 1;
bvcc = 1;
ctl_ou = 0;
cut_p_time = 0;
}
}
if( amvcc == 0)
{
avcc = 0;
}
if( bmvcc == 0 )
{
bvcc = 0;
}
if( state == 0)
{
if( bmvcc == 1 && avcc == 1 && bvcc == 0)
{
msoption1 = 0;
mroption1 = 0;
ksoption1 = 0;
kroption1 = 0;
bvcc = 1;
mcodenum1 = 2;
mcode1[1] = 0xAA;
mcode1[0] = 0x00;
kcodenum1 = 1;
kcode1[0] = 0xAA;
}
}
else if( state == 1 )
{
if( amvcc == 1 && bvcc ==1 && avcc == 0)
{
msoption = 0;
mroption = 0;
ksoption = 0;
kroption = 0;
avcc = 1;
mcodenum = 2;
mcode[1] = 0xAA;
mcode[0] = 0x00;
kcodenum = 1;
kcode[0] = 0xAA;
}
}
}
/* 命令处理程序 */
/* 张亚成 */
/* 2006.5.8 */
void code_pro( void )
{
if( mcoderok )
{
mcoderok = 0;
if( mrcode == 0xFF )
{
mcodenum = 3;
mcode[2] = 0xFA;
mcode[1] = 0xAA;
mcode[0] = 0x00;
}
else if ( mrcode == 0xF2 )
{
mcodenum = 2;
mcode[1] = 0xFA;
mcode[0] = 0x00;
}
else if( mrcode == 0xe9 )
{
mcodenum = 1;
mcode[0] = 0x00;
}
else
{
mcodenum = 1;
mcode[0] = 0xFA;
}
}
if( kcoderok )
{
kcoderok = 0;
if (krcode == 0xFF )
{
kcodenum = 2;
kcode[1] = 0xFA;
kcode[0] = 0xAA;
}
else if( krcode == 0xF2 )
{
kcodenum = 2;
kcode[1] = 0xFA;
kcode[0] = 0xAB;
}
else
{
kcodenum = 1;
kcode[0] = 0xFA;
}
}
if( mcoderok1 )
{
mcoderok1 = 0;
if( mrcode1 == 0xFF )
{
mcodenum1 = 3;
mcode1[2] = 0xFA;
mcode1[1] = 0xAA;
mcode1[0] = 0x00;
}
else if ( mrcode1 == 0xF2 )
{
mcodenum1 = 2;
mcode1[1] = 0xFA;
mcode1[0] = 0x00;
}
else if( mrcode1 == 0xe9 )
{
mcodenum1 = 1;
mcode1[0] = 0x00;
}
else
{
mcodenum1 = 1;
mcode1[0] = 0xFA;
}
}
if( kcoderok1 )
{
kcoderok1 = 0;
if (krcode1 == 0xFF )
{
kcodenum1 = 2;
kcode1[1] = 0xFA;
kcode1[0] = 0xAA;
}
else if( krcode1 == 0xF2 )
{
kcodenum1 = 2;
kcode1[1] = 0xFA;
kcode1[0] = 0xAB;
}
else
{
kcodenum1 = 1;
kcode1[0] = 0xFA;
}
}
}
/* 命令接收发送程序 */
/* 张亚成 */
/* 2005.5.8 */
void ps2sr_pro( void )
{
if( kcodenum != 0 )
{
if( ms_now == 0 )
{
kwrite_data();
}
}
else
{
ks_now = 0;
kread_data();
}
if( mcodenum != 0 )
{
if( ks_now == 0 )
{
mwrite_data();
}
}
else
{
ms_now = 0;
mread_data();
}
if( kcodenum1 != 0 )
{
if( m1s_now == 0 )
{
kwrite_data1();
}
}
else
{
k1s_now = 0;
kread_data1();
}
if( mcodenum1 != 0 )
{
if( k1s_now == 0 )
{
mwrite_data1();
}
}
else
{
m1s_now = 0;
mread_data1();
}
}
void mk_rw(void)
{
if( cmwcodenum != 0)
{
cmwrite_data();
}
else
{
cmread_data();
}
if( ckwcodenum != 0 )
{
ckwrite_data();
}
else
{
ckread_data();
}
}
void mread_data( void )
{
switch( mroption )
{
case 0:
{
if( mclkin == 0 && mdatain == 0)
{
mroption = 1;
}
break;
}
case 1:
{
if( mclkin == 1 )
{
mroption = 2;
}
break;
}
case 2:
{
if( mdatain == 0 )
{
mroption = 3;
mrtime = 0;
mrnum = 8;
}
else
{
mroption = 0;
}
break;
}
case 3:
{
if( mrtime >= Twe_us )
{
mrtime = 0;
mclkin = 0;
mroption = 4;
}
break;
}
case 4:
{
if( mrtime >= Foy_us )
{
mrtime = 0;
mclkin = 1;
mroption = 5;
}
break;
}
case 5:
{
if( mrtime >= Twe_us )
{
mrtime = 0;
mrcode /= 2;
if( mdatain == 1 )
{
mrcode |= 0x80;
}
mrnum --;
if( mrnum == 0 )
{
mroption = 6;
}
else
{
mroption = 3;
}
}
break;
}
case 6:
{
if( mrtime >= Twe_us )
{
mrtime = 0;
mclkin = 0;
mroption = 7;
}
break;
}
case 7:
{
if( mrtime >= Foy_us )
{
mrtime = 0;
mclkin = 1;
mroption = 8;
}
break;
}
case 8:
{
if( mrtime >= Twe_us )
{
mrtime = 0;
mcheckbit = mdatain;
mroption = 9;
}
break;
}
case 9:
{
if( mrtime >= Twe_us )
{
mrtime = 0;
mclkin = 0;
mroption = 10;
}
break;
}
case 10:
{
if( mrtime >= Foy_us )
{
mrtime = 0;
mclkin = 1;
mroption = 11;
}
break;
}
case 11:
{
if( mrtime >= Twe_us )
{
mroption = 12;
}
break;
}
case 12:
{
if( mdatain == 1 )
{
mrtime = 0;
mroption = 13;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -