芯片解密STC15F2K60S2单片机实验程序
芯片解密#include<reg51.h>
芯片解密#include<intrins.h>
芯片解密#define on 1
#define off 0
#define speed_mod 0
#define distance_mod 1
#define v_speed_mod 4
#define time_mod 2
#define v_distance_mod 3
#define uchar unsigned char
#define uint unsigned int
sbit key_n=P3^3;
uchar code dis_code[11]={0x14,0x77,0x2c,0x25,
0x47,0x85,0x84,0x37,0x04,0x05,0xff};
uchar data dis_buf[4];
uchar data dis_digit;
uchar data dis_index;
uchar dis_mod=speed_mod;//默认显示速度
uchar n=1;
uchar key=off;//按键按下标志,默认为关
uchar dis_key=on;//数码管显示开关,默认为开
uchar dis_cut=on;//数码管显示模式,默认为节能模式
uchar sleep=off;//睡眠模式,默认为关
uchar time_key=off;//计时开关,默认为关
uchar speed_n;
uchar time_check=0;//按键去抖动
uchar time_wait=0;//关闭数码管的等待时间
uchar time_sec=0;
uchar time_min=0;
uchar time_hour=0;
uchar timer0_num=0;//计时器0的50ms中断次数
uchar timer1_num=0;//计时器1的50ms中断次数
uchar distance_num=0;//检测到的卡片个数
uchar dst_one_sec=0;//1s内检测到的卡片个数
uchar distance_10m_num=0;//10m内检测到的卡片个数
uchar bit1_code,bit2_code,bit3_code,bit4_code;
uint speed=0;
uint distance=0;
uint v_distance=0;//累积距离
uint time=0;
uint time_real=2;//累积时间
uint v_speed=0;//平均速度
uint dis_value;//显示数值
void delayms(uchar ms)
{ uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void main()
{ P0=0xff;
P2=0xff;
TMOD=0x11;
TH0=0x3c;
TL0=0xaf;
TH1=0x3c;
TL1=0xaf;
TR0=on;
TR1=on;
IP=0x0b;
IE=0x8f;
IT0=1;
IT1=1;
dis_index=0x00;
dis_digit=0xef;
//----------数码管驱动程序------------
while(1)
{ P0=0xff;
P2=0xff;
if((dis_key==on)&&(!sleep))
{if(dis_mod==speed_mod)
{dis_value=speed;}
if(dis_mod==distance_mod)
{dis_value=distance;}
if(dis_mod==v_speed_mod)
{dis_value=v_speed;}
if(dis_mod==time_mod)
{dis_value=time;}
if(dis_mod==v_distance_mod)
{dis_value=v_distance;}
bit4_code=dis_value%10;//显示最低位
dis_value/=10;
bit3_code=dis_value%10;//显示次低位
dis_value/=10;
bit2_code=dis_value%10;//显示次高位
dis_value/=10;
if(dis_value!=0)//最高位灭零
{bit1_code=dis_value%10;}
else
{bit1_code=10;}
dis_buf[0]=dis_code[bit4_code];
dis_buf[1]=dis_code[bit2_code]-4;
dis_buf[2]=dis_code[bit3_code];
dis_buf[3]=dis_code[bit1_code];
P0=dis_buf[dis_index];
P2=dis_digit;
dis_digit*=2;//显示下一位
if(dis_digit==0xf0)
{dis_digit=0xef;}
dis_index++;
dis_index&=0x03;//4个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描
delayms(1);
}

芯片解密