单片机的自行车里程表程序单片机解密
| 单片机解密#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); } } |

芯片解密