芯片复制STC89C52制作的“锂电池容量检测器”
- 芯片复制/**********************************************
- * 功能:LED显示锂电池容量检测
- * 芯片复制编程:ztzp
- * P0 段码控制
- * P2 位码控制
- * P1 5位拨码开关,决定放电电流。
- **********************************************/
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- sfr T2MOD = 0xC9; //使用定时器2必须定义,T2MOD的地址。
- float Iout; //放电电流,与预设值相关。
- float Sum; //放电量累加值
- ulong S; //放电量四舍五入后转换为整数
- uchar S1; //第一位
- uchar S2; //第二位
- uchar S3; //第三位
- uint i; //1秒钟计时变量
- uint State = 0; //计数状态,0开始计数;1停止计数。此值由外部中断0控制。
- sbit LED_R = P3^6; //红色LED,表示正在放电,低电平有效。
- sbit LED_G = P3^7; //绿色LED,表示停止放电,低电平有效。
- void init(); //系统初始化
- void init_int0(); //外部中断初始化
- void init_Time2(); //定时器2初始化
- void Show(); //LED数码管显示放电量
- //共阳LED数码管位码(从左到右:1、2、3、4、5、6、7、8)
- //用PNP管驱动
- code uchar WEI_CODE [] =
- {
- 0xFE, //1 11111110
- 0xFD, //2 11111101
- 0xFB, //3 11111011
- 0xF7, //4 11110111
- 0xEF, //5 11101111
- 0xDF, //6 11011111
- 0xBF, //7 10111111
- 0x7F //8 01111111
- };
- //共阳LED数码管段码(带小数点)
- code uchar DSY_CODE [] =
- {
- 0x40, //0
- 0x79, //1
- 0x24, //2
- 0x30, //3
- 0x19, //4
- 0x12, //5
- 0x02, //6
- 0x78, //7
- 0x00, //8
- 0x10 //9
- };
- // 延时 xms(晶振:11.0592MHz,)
- void DelayMS(uint x)
- {
- uchar i;
- while( x-- )
- {
- for( i=0; i<111; i++ );
- }
- }
- //主程序
- void main()
- {
- init(); //系统初始化
- init_int0(); //外部中断初始化
- init_Time2(); //定时器2初始化
- while(1)
- {
- Show(); //显示
- }
- }
- //LED数码管显示放电量(从左到右)
- void Show()
- {
- //第1位
- S = Sum + 0.5; //四舍五入
- S1 = S/10000000;
- if (S1 != 0)
- {
- P2 = WEI_CODE[0];
- P0 = DSY_CODE[S1] + 0x80; //无小数点
- DelayMS(1);
- P2 = 0xFF;
- P0 = 0xFF;
- DelayMS(1);
- }
- //第2位
- S = Sum + 0.5;
- S2 = S%10000000/1000000;
- if (S2 != 0 || S1 != 0) //当第一位不等于0时,第二位必须显示
- {
- P2 = WEI_CODE[1];
- P0 = DSY_CODE[S2] + 0x80;
- DelayMS(1);
- P2 = 0xFF;
- P0 = 0xFF;
- DelayMS(1);
- }

芯片解密