📄 main.c
字号:
#include <at89x51.h>
#include <absacc.h>
#include "define.h"
#include "Uart.h"
uchar KeyBoard_Int_ID; //键盘中断标志
uchar KeyData; //键值
uchar len;
unsigned char state; // .7=0 无暗盒 .7=1有暗盒状态 ,
unsigned char bdata ab[4]; // .0=1压迫器运动状态 .1=1床体运动状态 .2=1束光器运动状态 .3=1分隔选定状态
unsigned char bdata Led[3]; //
sbit Pmd =ab[0]^0; //压迫器进
sbit Pmu =ab[0]^1; //压迫器退
sbit Sh_on =ab[0]^2; //束光器横向开
sbit Sh_off =ab[0]^3; //束光器横向关
sbit Sv_on =ab[0]^4; //束光器纵向开
sbit Sv_off =ab[0]^5; //束光器纵向关
sbit Trh =ab[0]^6; //床头向旋转
sbit Trf =ab[0]^7; //床足向选装
sbit Imh =ab[1]^0; //球管头向移动
sbit Imf =ab[1]^1; //球管足向移动
sbit Tml =ab[1]^2; //床左移
sbit Tmr =ab[1]^3; //床右移
sbit R_driver =ab[1]^4; // 曝光
sbit En_bed =ab[1]^5; //床旋转使能
sbit N_D_mode =ab[1]^6; //常规、数字模式
sbit DSA =ab[1]^7; //dsa模式
sbit Zoom3 =ab[2]^0; //II zoom3
sbit Zoom2 =ab[2]^1; //II zoom2
sbit Zoom1 =ab[2]^2; //II zoom1
sbit Zoom0 =ab[2]^3; //no zoom
sbit Pol_h =ab[2]^4; //图像水平镜像
sbit Pol_v =ab[2]^5; //图像垂直镜像
sbit Sgq_H_A =ab[2]^6; //束光器手动半自动模式
sbit Out_p =ab[2]^7; //出片
sbit All_p =ab[3]^0; //全片
sbit H_2 =ab[3]^1; //横向2分隔
sbit V_2 =ab[3]^2; //纵向2分隔
sbit Cp_3 =ab[3]^3; //3分隔
sbit Cp_4 =ab[3]^4; //4分隔
sbit Cp_S =ab[3]^5; //分隔选定
//sbit F_g =ab[3]^6; //脚闸
//sbit H_g =ab[3]^7; //手闸
//=============
sbit Zoom3_led =Led[0]^0; //II zoom3
sbit Zoom2_led =Led[0]^1; //II zoom2
sbit Zoom1_led =Led[0]^2; //II zoom1
sbit Zoom0_led =Led[0]^3; //no zoom
sbit Ph_led =Led[0]^4; //图像水平镜像
sbit Pv_led =Led[0]^5; //图像垂直镜像
sbit SHA_led =Led[0]^6; //束光器手动半自动模式
sbit ND_led =Led[0]^7; //常规、数字模式
sbit H2_led1 =Led[1]^0; //横向2分隔led0
sbit H2_led2 =Led[1]^1; //横向2分隔led1
sbit V2_led1 =Led[1]^2; //纵向2分隔led0
sbit V2_led2 =Led[1]^3; //纵向2分隔led1
sbit Cp3_led1 =Led[1]^4; //3分隔led0
sbit Cp3_led2 =Led[1]^5; //3分隔led1
sbit Cp3_led3 =Led[1]^6; //3分隔led2
sbit Cp_S_led =Led[1]^7; //分隔选定
sbit Cp4_led1 =Led[2]^0; //4分隔 led1
sbit Cp4_led2 =Led[2]^1; //4分隔 led1
sbit Cp4_led3 =Led[2]^2; //4分隔 led1
sbit Cp4_led4 =Led[2]^3; //4分隔 led1
sbit All_p_led =Led[2]^4; //全片
sbit DSA_led =Led[2]^7; //dsa模式
/*
sbit F_g_led =Led[3]^6; //脚闸
sbit H_g_led =Led[3]^7; //手闸
sbit Pmd_led =Led[0]^0; //压迫器进
sbit Pmu_led =Led[0]^1; //压迫器退
sbit Sgq_h_on_led =Led[0]^2; //束光器横向开
sbit Sgq_h_off_led =Led[0]^3; //束光器横向关
sbit Sgq_v_on_led =Led[0]^4; //束光器纵向开
sbit Sgq_v_off_led =Led[0]^5; //束光器纵向关
sbit Trh_led =Led[0]^6; //床头向旋转
sbit Trf_led =Led[0]^7; //床足向选装
sbit Imh_led =Led[1]^0; //球管头向移动
sbit Imf_led =Led[1]^1; //球管足向移动
sbit Tml_led =Led[1]^2; //床左移
sbit Tmr_led =Led[1]^3; //床右移
sbit R_driver_led =Led[1]^4; //曝光
sbit En_bed_led =Led[1]^5; //床旋转使能
*/
uchar Timer_Int_ID; //定时器定时中断标志
uchar KeyBoard_Int_ID; //键盘中断标志
//uchar Uart_Int_ID; //串口接收中断标志
uchar KeyData; //键值
uchar AD_Data[2]; //A/D暂存数据
uchar Timer_Int_ID; //定时器中断标志位
uchar Check;
uchar Table[7]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00}; //定义与键盘和AD有关的数据表
idata unsigned char Tbak[7]={0xff,0xff,0xff,0xff,0xff,0xff,0x00};
uchar Rx_data[5]; //定义从中控板接收到的数据
//uchar Tx_data[10];
extern void Uart_Init(void);
extern void ComOutChar(uchar OutData);
extern unsigned char ComGetChar();
extern void Timer0_Init(void);
extern unsigned char GetTLC0832Data(uchar ucCmd);
void Delay(void)
{
unsigned char i;
unsigned char j;
for(i = 0;i <= 200;i++)
for(j = 0;j <= 80;j++)
{
;
}
}
void Led_Display()
{
if((Rx_data[2])==0xff)
{
state = state&0x7f; //无暗盒
All_p=0;
H2_led1=0;
H2_led2=0;
V2_led1=0;
V2_led2=0;
Cp3_led1=0;
Cp3_led2=0;
Cp3_led3=0;
Cp4_led1=0;
Cp4_led2=0;
Cp4_led3=0;
Cp4_led4=0;
}
else
{
if((Rx_data[2]&0x01)==0) All_p=1;
else All_p=0;
if((Rx_data[2]&0x02)==0) H2_led1=1;
else H2_led1=0;
if((Rx_data[2]&0x04)==0) H2_led2=1;
else H2_led2=0;
if((Rx_data[2]&0x08)==0) V2_led1=1;
else V2_led1=0;
if((Rx_data[2]&0x10)==0) V2_led2=1;
else V2_led2=0;
if((Rx_data[2]&0x20)==0) Cp3_led1=1;
else Cp3_led1=0;
if((Rx_data[2]&0x40)==0) Cp3_led2=1;
else Cp3_led2=0;
if((Rx_data[2]&0x80)==0) Cp3_led3=1;
else Cp3_led3=0;
if((Rx_data[3]&0x01)==0) Cp4_led1=1;
else Cp4_led1=0;
if((Rx_data[3]&0x02)==0) Cp4_led2=1;
else Cp4_led2=0;
if((Rx_data[3]&0x04)==0) Cp4_led3=1;
else Cp4_led3=0;
if((Rx_data[3]&0x08)==0) Cp4_led4=1;
else Cp4_led4=0;
}
}
void Interrupt_Init(void)
{
EA = 0; // CPU所有中断关(IE最高位MSB)
EX0 = 1; // INT0中断开
IT0 = 1; // INT0低电平触发(为1则为下降沿触发)
ES = 1;
ET0 = 1;
EA = 1; // CPU总中断开(IE最高位MSB)
}
//void Speaker_out(void)//峰鸣器响函数
// {
// P1_4 = 1;
// Delay();
// P1_4 = 0;
// }
void Int0_Int()interrupt 0 using 0
{
IE0 = 0;
KeyBoard_Int_ID = 1; //键盘中断标志
}
void CPU_IO_Int(void) //通用IO口初始化
{
Speaker = 0; //峰鸣器输出脚
HandGate = 0; //脚闸输入脚
FootGate = 0; //手闸输入脚
FeedWD = 0; //喂狗引脚
LED1 = 0; //指示UART是否正在发送数据
LED2 = 0; //单片机指示灯,由TIMER0定时控制
LED3 = 0; //暂无定义
}
void Timer0_Int(void) interrupt 1 using 1 //TIMER0中断函数
{
uchar i;
EA =0;
TF0 = 0;
TH0 = 0X04; //初始化定时器0高8位
TL0 = 0X06; //初始化定时器0低8位
if(time_u>0) time_u--;
i++;
if(i ==3)
{
i =0;
Timer_Int_ID = 1;
LED2 = !LED2; //指示单片机的状态
}
TR0 = 1;
EA =1;
}
void main ()
{
uchar i;
uchar k;
Timer0_Init();
CPU_IO_Int();
Uart_Init();
Interrupt_Init();
len=0;
Delay();
COM = 0XD1;
do
{
ACC=COM;
}while(clflag ==1);
COM = 0X04;
COM = 0X2C;
state=0;
while(1)
{
//------------ad---转换-----------------------------------------
if(Timer_Int_ID == 1)
{
if((P3&0x20)==1) { Table[5] = Table[5]&0xFD; }
else { Table[5] |=0x02; }
if((P3&0x40)==1) { Table[5] = Table[5]&0xFE; }
else { Table[5] |=0x01; }
}
//---------------------------//
if(KeyBoard_Int_ID==1)
{
uchar i;
KeyBoard_Int_ID = 0;
for(i=0;i<4;i++)//接收按键值
{
COM = 0X40 +i;
ab[i] = DAT;
}
for(i=0;i<7;i++){ Tbak[i]=Table[i];} //bak
if((state&0x80)==0x80) // .7=1有暗盒状态
{
if( All_p ==1) //全片
{ ; }
else { ; }
if( Out_p ==1) //出片
{ ; }
else { ; }
if( H_2 ==1) { ; } //横向2分隔
else { }
if( V_2 ==1) { ; } //纵向2分隔
else { ;}
if( Cp_3 ==1) { ; } //3分隔
else { }
if( Cp_4 ==1) { ; } //4分隔
else { ; }
if( Cp_S ==1) { ; } //分隔选定
else { ; }
}
else //无暗盒
{
Table[4]|=0x80;
Table[5]|=0x3f;
}
for(i=2;i<7;i++)
{
if(Table[i]!=Tbak[i]) Table[6]=1;
}
// Check=0;
// for(i = 0;i<4;i++)
// {
// ComOutChar(ab[i]);
// }
// for(k = 0; k<6; k++)
// {
// Check+=Table[k];
// ComOutChar(Table[k]);
// }//将数据发给中控板
// ComOutChar(' ');
}
//--------------------led 控制----------------------------------------
for(i =0;i<3;i++)//对应位置灯点亮
{
COM = 0X80+i;
DAT =Led[i];
}
//-----通信-------------------------------------------------------
if((len>0)&&(time_u==0))
{
len=0;
TIflag=0;
inTxBuf=TxBuf,outTxBuf=TxBuf;
head_pt=START_PT;
tail_pt=START_PT;
}
if(tail_pt!=head_pt)
{
time_u=0x30;
i=ComGetChar(); //接受串口0消息
switch(len)
{
case 0:
if(i==3) {len=1;}
break;
case 1:
if(i==2)
{
len=0;
if(Table[6]>0)
{
Table[6]=0;
ComOutChar(0x03);
ComOutChar(0xe0);
Check=0;
for(k = 0; k<6; k++)
{
Check+=Table[k];
ComOutChar(Table[k]);
}//将数据发给中控板
ComOutChar(Check);
}
else
{
ComOutChar(0x03);
ComOutChar(0xe1);
}
}
else if(i==1) { len=2;Check=0;}
break;
case 2:
default:
Rx_data[len]=i;
Check+=i;
len++;
if(len>4)
{
len=0;
if(Check==0)
{
Led_Display();
if(Table[6]>0)
{
Table[6]=0;
ComOutChar(0x03);
ComOutChar(0xe0);
Check=0;
for(k = 0; k<6; k++) { Check+=Table[k];ComOutChar(Table[k]); }//将数据发给中控板
ComOutChar(Check);
}
else
{
ComOutChar(0x03);
ComOutChar(0xe1);
}
}
else
{
ComOutChar(0x03);
ComOutChar(0xee);
}
}
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -