先给整体设计框图:
废话不多说了,
程序框图:
源码:
/************************************
*********STC89C51**********
**********12MHz晶振********/
#include "reg51.h"
#define uint8 unsigned char
#define uint16 unsigned int
#define uchar unsigned char
#define uint unsigned int
/********************寄存器内部地址定义********************/
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
sfr P1M0 = 0x92;
sfr P1M1 = 0x91;
sfr ADC_CONTR = 0xBC;
sfr ADC_RES = 0xBD;
sfr ADC_RESL = 0xBE;
sfr P1ASF = 0x9D;
sfr CCON = 0xD8; //PCA控制寄存器
sfr CMOD = 0xD9; //PCA模式寄存器
sfr CCAPM0 = 0xDA; //PCA模块0模式寄存器 //模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)
sfr CCAPM1 = 0xDB; //PCA模块1模式寄存器 //模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)
sfr CL = 0xE9; //PCA 定时寄存器 低位
sfr CH = 0xF9; //PCA 定时寄存器 高位
sfr CCAP0L = 0xEA; //PCA模块0的 捕获寄存器 低位
sfr CCAP0H = 0xFA; //PCA模块0的 捕获寄存器 高位
sfr CCAP1L = 0xEB; //PCA模块1的 捕获寄存器 低位
sfr CCAP1H = 0xFB; //PCA模块1的 捕获寄存器 高位
sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0
sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1
sbit CF = CCON^7; //PCA计数溢出标志位
sbit CR = 0xDE; //PCA计数器 运行控制位
sbit CCF1 = CCON^1; //PCA模块1中断标志
sbit CCF0 = CCON^0; //PCA模块0中断标志
/************************************************************/
#define TIMER0_HIGHT 0xE5 //设置定时器0工作方式1自动装载初值,定时5ms,Fosc=12MHZ
#define TIMER0_LOW 0xF3
#define LCD_Data P0 //LCD的数据口
sbit LCD_BF=LCD_Data^7; //LCD忙信号位
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^4;
sbit BEEP=P2^3;//控制喇叭
sbit RED=P2^1;//控制红灯
sbit YELLOW=P2^0;//控制黄灯
sbit OPEN=P2^2;//控制继电器
unsigned int I_DATA=0;
unsigned int V_DATA=0;
unsigned char Time5ms=0;
unsigned char tp=0;
unsigned int ad_average_result,R,Vin;
unsigned char Start=0;
unsigned char D2=0;
unsigned char D1=0;
unsigned int U_SET=370;
unsigned int I_D[3];
unsigned char Ms_flag=0;
/*-------------------延时子函数-------------------------*/
#define XTAL 16 //晶振频率,单位MHz
void delay_1us