/*------------------------------------------------------------------*/
/* --- STC MCU International Limited -------------------------------*/
/* --- STC 1T Series MCU SPI Demo(Each other as the master-slave) --*/
/* --- Mobile: (86)13922805190 -------------------------------------*/
/* --- Fax: 86-755-82944243 ----------------------------------------*/
/* --- Tel: 86-755-82948412 ----------------------------------------*/
/* --- Web: www.STCMCU.com -----------------------------------------*/
/* If you want to use the program or the program referenced in the */
/* 12c5a16s2控制板程序 */
/*------------------------------------------------------------------*/
//#include "reg51.h"
#include<STC_NEW_8051.h>
#include<intrins.h>
#define FOSC 20000000L
#define BAUD (256 - FOSC / 32 /38400) //115200
#define ENABLE_ISP 0x82 //系统工作时钟<20MHz 时,对IAP_CONTR 寄存器设置此值
#define Self_Define_ISP_Download_Command 0x22
typedef unsigned char INT8U;
typedef unsigned int INT16U;
typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;
unsigned char i;
unsigned char csdata;
unsigned int timeds;
unsigned char JMQY;
#define DEBUG_DATA 0x5A //本测试程序最终存储在 EEPROM 单元的数值
#define DATA_FLASH_START_ADDRESS 0x00 //STC5Axx 系列 EEPROM 测试起始地址
sbit K1_IN = P0^5; //sbit K1_IN = P2^0;
sbit K2_IN = P2^6; //sbit K2_IN = P2^1;
sbit K3_IN = P2^5; //sbit K3_IN = P2^2;
sbit OUT01 = P3^2; //sbit OUT01 = P2^7;
sbit OUT02 = P3^3; //sbit OUT02 = P2^6;
sbit OUT03 = P3^4; //sbit OUT03 = P2^5;
sbit OUT04 = P3^5; //sbit OUT04 = P2^4;
sbit OUT05 = P3^6; //sbit OUT05 = P2^3;
unsigned char RUN_ZT; //主机状态
sbit IN01 = P0^4; //sbit IN01 = P0^0;
sbit IN02 = P0^0; //sbit IN02 = P0^1;
sbit IN03 = P0^1; //sbit IN03 = P0^2;
sbit IN04 = P0^2; //sbit IN04 = P0^3;
sbit IN05 = P0^3; //sbit IN05 = P0^4;
sbit IN06 = P2^4; //sbit IN06 = P0^5;
sbit IN07 = P2^3; //sbit IN07 = P0^6;
sbit IN08 = P2^2; //sbit IN08 = P0^7;
sbit IN09 = P2^1; //sbit IN09 = P3^2;
sbit INJM = P2^0; //sbit INJM = P3^3;
sbit CSDK = P2^7; //测试端口输出
idata unsigned char IN01_KGR; //抗干扰
idata unsigned char IN02_KGR; //抗干扰
idata unsigned char IN03_KGR; //抗干扰
idata unsigned char IN04_KGR; //抗干扰
idata unsigned char IN05_KGR; //抗干扰
idata unsigned char IN06_KGR; //抗干扰
idata unsigned char IN07_KGR; //抗干扰
idata unsigned char IN08_KGR; //抗干扰
idata unsigned char IN09_KGR; //抗干扰
idata unsigned char INJM_KGR; //抗干扰
idata unsigned char INJM_ZT; //计米输入状态
idata unsigned long BCJM1;
idata unsigned long ZBCJM1;
idata unsigned long BCJM2;
idata unsigned long ZBCJM2;
#define XS_DATA_SETUP 0X44// ;设置TM1620采用固定地址模式,且为数据写模式
#define XS_ADD0 0XC0// ;设置TM1620显示寄存器地址00H
#define XS_ADD1 0XC2// ;设置TM1620显示寄存器地址01H
#define XS_ADD2 0XC4// ;设置TM1620显示寄存器地址02H
#define XS_ADD3 0XC6// ;设置TM1620显示寄存器地址03H
#define XS_ADD4 0XC8// ;设置TM1620显示寄存器地址04H
#define XS_ADD5 0XCA// ;设置TM1620显示寄存器地址05H
#define XS_CTR_OFF 0X87// ;设置TM1620显示__关闭
#define XS_CTR_ON1 0X88// ;开显示,亮度为1
#define XS_CTR_ON2 0X89// ;开显示,亮度为2
#define XS_CTR_ON3 0X8A// ;开显示,亮度为3
#define XS_CTR_ON4 0X8B// ;开显示,亮度为4
#define XS_CTR_ON5 0X8C// ;开显示,亮度为5
#define XS_CTR_ON6 0X8D// ;开显示,亮度为6
#define XS_CTR_ON7 0X8E// ;开显示,亮度为7
#define XS_CTR_ON8 0X8F// ;开显示,亮度为8
#define XS0 0
#define XS1 1
#define XS2 2
#define XS3 3
#define XS4 4
#define XS5 5
#define XS6 6
#define XS7 7
#define XS8 8
#define XS9 9
#define XSF 10
// sfr SPSTAT = 0xcd; //SPI status register
#define SPIF 0x80 //SPSTAT.7
#define WCOL 0x40 //SPSTAT.6
// sfr SPCTL = 0xce; //SPI control register
#define SSIG 0x80 //SPCTL.7
#define SPEN 0x40 //SPCTL.6
#define DORD 0x20 //SPCTL.5
#define MSTR 0x10 //SPCTL.4
#define CPOL 0x08 //SPCTL.3
#define CPHA 0x04 //SPCTL.2
#define SPDHH 0x00 //CPU_CLK/4
#define SPDH 0x01 //CPU_CLK/16
#define SPDL 0x02 //CPU_CLK/64
#define SPDLL 0x03 //CPU_CLK/128
sbit SPISS = P1^4; //sbit SPISS = P1^2;
sbit SPISS1 = P3^7; //sbit SPISS1 = P1^3;
sbit CC = P4^5; //sbit SPISS1 = P1^3;
sbit Trig = P3^2; //产生脉冲引脚
sbit Echo = P3^3; //回波引脚
#define DEBUG_DATA 0x5A //本测试程序最终存储在 EEPROM 单元的数值
#define DATA_FLASH_START_ADDRESS 0x00 //STC5Axx 系列 EEPROM 测试起始地址
union union_temp16
{
INT16U un_temp16;
INT8U un_temp8[2];
}my_unTemp16;
unsigned int eeprom_address;
void IO_Init(void) ;
void UartInit(void) ; //液晶通信设置
void UART1_write(BYTE dat); //液晶通信写入数据
BYTE get_char(); //液晶通信读出数据
unsigned char CCLED ;
void delay_20us();
void LVDInit();
void Time0Init(void);
void Time1Init(void);
void InitUart();
void InitSPI();
void SendUart(BYTE dat); //send data to PC
BYTE RecvUart(); //receive data from PC
void SPISwap(BYTE dat); //数码管指令发送
void SPISwapSJ (BYTE dat); //数码管数据发送
void SPISwap_LED(BYTE dat); //面板灯指令发送
void SPISwapSJ_LED (BYTE dat); //面板灯数据发送
void LED_CSH (void); //面板灯复位
void LED_RUN(void); //面板灯运行显示
unsigned char LED_RUN_Mode;
unsigned char LED_RUN_ZT;
unsigned char LED_SHU_JU1;unsigned char LED_SHU_JU2;unsigned char LED_SHU_JU3;unsigned char LED_SHU_JU4;
unsigned char BLED_SHU_JU1;unsigned char BLED_SHU_JU2;unsigned char BLED_SHU_JU3;unsigned char BLED_SHU_JU4;
unsigned char TING_JING;
INT8U Byte_Read(INT16U add); //读一字节,调用前需打开IAP 功能
void Byte_Program(INT16U add, INT8U ch); //字节编程,调用前需打开IAP 功能
void Sector_Erase(INT16U add); //擦除扇区
void IAP_Disable(); //关闭IAP 功能
void can_shu_she_zhi (void); //参数设置
void shu_ju_zeng (void);//数据增加
void shu_ju_jian (void);//数据减少
void XS_KJ (unsigned char DATA1,unsigned char DATA2,unsigned char DATA3,unsigned char DATA4,unsigned char DATA5,unsigned char DATA6); //显示参数
void Hui_fu_chu_chang_she_zhi(void); //恢复出厂设置
void Write_CS(void); //写入设置
void Read_CS(void); //读取设置
void Write_JM(void); //写入计米
void Read_JM(void); //读取计米
void Write_JMADD(); //写入计米保存地址
void Read_JMADD(); //读取计米保存地址
void delay(unsigned int x) ;
void XS_CSH(void);
unsigned char XS_DDM(unsigned char DATA);
void KEY_JC(void); //按键扫描
void IN_10(void); //10路输入扫描
void jz16to10_6W(unsigned long t); //16进制转10进制
void xian_shi_can_shu (void);
///////////////////////////////////////////////////////////
idata unsigned char KEY1; //按键抗干扰
idata unsigned char KEY2; //按键抗干扰
idata unsigned char KEY3; //按键抗干扰
idata unsigned int KEY4; //按键抗干扰
idata unsigned int KEY5; //按键抗干扰
unsigned char CSzt; //参数状态
unsigned char SJZSHU[6]; //进制转换寄存器
float JMZC; //周长
float JMLJ; //累加量
unsigned char JMADD; //计米保存地址
unsigned long ZJM; //总计米量
unsigned long JM; //计米
unsigned long JMB; //控制计米显示
unsigned char bo_cun_tou; //保存数据头标志
unsigned char bo_cun_wei; //保存数据尾标志
unsigned long ID; //计米
unsigned int cjtime; //测量时间
bit succeed_flag; //测量成功标志
unsigned char t8;
unsigned char t7;
unsigned char t6;
unsigned char t5;
unsigned char t4;
unsigned char t3;
unsigned char t2;
unsigned char t1;
unsigned char XING_JIAO_TIME; //星三角转换时间设定器
unsigned char MODEDATA; // 启动模式数据寄存器
unsigned char SHOUJ