📄 shouchiji2.c
字号:
/**********************************************/
//题目:手持机启动程序
//功能:启动设备
//创作人:李焕杰
//创作时间:2006/08/08
/*********************************************/
#include <at892051.H>
#include <intrins.h>
#define unchar unsigned char
#define unint unsigned int
sbit hunzhan=P3^3;
sbit duizhan=P3^2;
sbit jia=P3^5;
sbit jian=P3^4;
sbit lamp=P3^7;
sbit lamphz=P1^0;
sbit lampdz=P1^1;
sbit qh=P1^2;//切换键,设置生命数还是子弹数
sbit LED_DATA=P1^5;//4094,显示
sbit LED_CLK=P1^4;
sbit LED_OE=P1^7;
sbit LED_STB=P1^6;
unchar i;qiehuan;
unint ming;zidan;
unint fashe1;fashe2;fashe3;
unchar Led[6];
unchar Countl,send,a,dsjs;
unchar code ledbuf[19] = // digit convert table segment=0,on
{0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xff, //共阴极段表
// 0 1 2 3 4 5 6 7 8 9 消隐
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unchar code fsbuf[10] ={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90};
//**************
//*延时函数
//延时4个周期
//**************
void delay()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
//*******************
//*4094显示函数
//*******************
void SendLED_Byte(unchar by)
{
unchar sa;
LED_CLK=0;
_nop_();
LED_DATA=0;
_nop_();
for(sa=0;sa<8;sa++)
{
LED_DATA=by&1;
by=by>>1;
delay();
LED_CLK=1;
delay();
LED_CLK=0;
delay();
}
}
void displed(unint mm,zz)
{
unchar jj,send;
LED_STB=1;
LED_OE=0;
Led[2]=mm/100;
Led[1]=(mm-Led[2]*100)/10;
Led[0]=(mm-Led[2]*100)%10;
Led[5]=zz/100;
Led[4]=(zz-Led[5]*100)/10;
Led[3]=(zz-Led[5]*100)%10;
for(jj=0;jj<6;jj++)
{
send=ledbuf[Led[jj]];
SendLED_Byte(send);
}
LED_OE=1;
}
//*********
//发射函数
//功能:实现三位十进制数转换成发射需要的十六进制数
//**********
void fshs(unint m,z)
{
unint fs1,fs2,fs3,fs4,fs5,fs6,fsm,fsz;
fs1=m/100;
fs2=(m-fs1*100)/10;
fs3=(m-fs1*100)%10;
fs4=z/100;
fs5=(z-fs4*100)/10;
fs6=(z-fs4*100)%10;
fsm=fsbuf[fs2];
fsz=fsbuf[fs4];
fsm=fsm>>4;
fsz=fsz>>4;
fashe1=fsbuf[fs1]^fsm;
fashe2=fsbuf[fs3]^fsz;
fsz=fsbuf[fs6];
fsz=fsz>>4;
fashe3=fsbuf[fs5]^fsz;
}
//*********
//*定时中断0
//**********
void timer0() interrupt 1 using 2
{
dsjs++;
if(dsjs==20)
{
dsjs=0;
a=a+1;
TR0=0;
TH0=0X4c; //定时50ms
TL0=0X00;
}
else
{
TH0=0X4c; //定时50ms
TL0=0X00;
}
}
/***********************************************
延时函数 //xms
************************************************/
void delayxms(unint x)
{ //延时程序,延时x毫秒
unint j;
do
{
j=300;
while(--j);
} while(--x);
}
main()
{
SP=0x50;
PCON=0X00;
SCON = 0x51; // Serial port1 data Mode 1 and enable receiver
TMOD = 0x22; // 定时器1方式2,定时器0方式2
TH1 = 0xe8; //定时器初值
TL1 = 0xe8;
TH0=0X4c; //定时50ms
TL0=0X00;
ET0=1;//定时器0允许
TR1=1;
EA=1;
lamp=1;
lamphz=1;
lampdz=1;
a=0;
ming=0;
zidan=100;
qiehuan=0;
displed(ming,zidan);
delayxms(20);
while(1)
{
_nop_();
_nop_();
if(!qh)
{
if(qiehuan==0)
qiehuan=1;
else
qiehuan=0;
delayxms(200);
}
if(!jia||!jian)
TR0=1;
else
{
TR0=0;
a=0;
}
if(!jia)//命数增加
{
if(qiehuan)
{
if(a==1)
{
a=0;
if(ming<990)
ming=ming+10;
else
ming=999;//最大999条命
}
else
{
if(ming<999)
ming=ming+1;
else
ming=999;
}
displed(ming,zidan);//显示命数
delayxms(100);//延时100ms
}
else
{
if(a==1)
{
a=0;
if(zidan<990)
zidan=zidan + 20;
else
zidan=999;//最大999条命
}
else
{
if(zidan<999)
zidan=zidan+1;
else
zidan=999;
}
displed(ming,zidan);//显示子弹数
delayxms(100);//延时100ms
}
}
if(!jian)//命数减少
{
if(qiehuan)
{
if(a==1)
{
a=0;
if(ming>10)
ming=ming - 10;
else
ming=0;//命最少为0
}
else
{
if(ming>0)
ming=ming - 1;
else
ming=0;
}
displed(ming,zidan);//显示出命
delayxms(100);//延时100ms
}
else
{
if(a==1)
{
a=0;
if(zidan>10)
zidan=zidan - 20;
else
zidan=0;//命最少为0
}
else
{
if(zidan>0)
zidan=zidan - 1;
else
zidan=0;
}
displed(ming,zidan);//显示子弹
delayxms(100);//延时100ms
}
}
if(!hunzhan&&duizhan)//混战模式
{
lamp=0;//指示灯亮
lamphz=0;
lampdz=1;
fshs(ming,zidan);//调用函数,把命数调整为可以发射的十六进制数
for(i=0;i<2;i++)
{
SBUF=0xaa;
while(TI==0);
TI=0;
SBUF=0x00;
while(TI==0);
TI=0;
SBUF=fashe1;
while(TI==0);
TI=0;
SBUF=fashe2;
while(TI==0);
TI=0;
SBUF=fashe3;
while(TI==0);
TI=0;
SBUF=0xbb;
while(TI==0);
TI=0;
SBUF=0xaa^fashe1^fashe2^fashe3^0xbb;//校验位
while(TI==0);
TI=0;
}
hunzhan=1;
delayxms(50);
lamp=1;
}
if(!duizhan&&hunzhan)//队战模式
{
fshs(ming,zidan);//调用函数,把命数调整为可以发射的十六进制数
lamp=0;//指示灯亮
lampdz=0;
lamphz=1;
for(i=0;i<2;i++)
{
SBUF=0xaa;
while(TI==0);
TI=0;
SBUF=0xf0;
while(TI==0);
TI=0;
SBUF=fashe1;
while(TI==0);
TI=0;
SBUF=fashe2;
while(TI==0);
TI=0;
SBUF=fashe3;
while(TI==0);
TI=0;
SBUF=0xbb;
while(TI==0);
TI=0;
SBUF=0xaa^0xf0^fashe1^fashe2^fashe3^0xbb;
while(TI==0);
TI=0;
}
duizhan=1;
delayxms(50);
lamp=1;//指示灯灭
}
if(!jia&&!jian)//结束
{
for(i=1;i<51;i++)
{
SBUF=0xaa;
while(TI==0);
TI=0;
SBUF=0x92;
while(TI==0);
TI=0;
SBUF=00;
while(TI==0);
TI=0;
SBUF=i;
while(TI==0);
TI=0;
SBUF=00;
while(TI==0);
TI=0;
SBUF=00;
while(TI==0);
TI=0;
SBUF=0xaa^0x92^i;
while(TI==0);
TI=0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -