定时定次催款应用程序设计

来源:本站
导读:目前正在解读《定时定次催款应用程序设计》的相关信息,《定时定次催款应用程序设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《定时定次催款应用程序设计》的详细说明。
简介:实现功能:定时定次催款应用程序
使用芯片:STC15F104E
晶振:12MHZ
编译环境:Keil

/********************************************************************实现功能:定时定次催款应用程序使用芯片:STC15F104E晶振:12MHZ编译环境:Keil   *********************************************************************//********************************************************************/#include "reg52.h" #include <intrins.H>#define uchar unsigned char //宏定义字符型变量#define uint  unsigned int  //宏定义整型变量/********************************************************************                            寄存器设置*********************************************************************/ sfr IAP_DATA  =0xc2;     //数据寄存器sfr IAP_ADDRH =0xc3;     //地址寄存器sfr IAP_ADDRL =0xc4;     //地址寄存器sfr IAP_CMD   =0xc5;     //命令寄存器sfr IAP_TRIG  =0xc6;     //触发寄存器sfr IAP_CONTR =0xc7;     //擦除寄存器sbit  P33=P3^3;          //定义继电器控制输出脚/********************************************************************                            命令定义*********************************************************************/#define CMD_IDLE     0   //EEPROM无操作#define CMD_READ     1   //读取字节#define CMD_PROGRAM  2   //写入字节#define CMD_ERASE    3   //擦除字节/********************************************************************                       编程周期由晶振决定*********************************************************************///#define ENABLE_IAP 0X80    //编程周期由晶振决定(如果<30MHZ选用此项)//#define ENABLE_IAP 0X81    //编程周期由晶振决定(如果<24MHZ选用此项)//#define ENABLE_IAP 0X82    //编程周期由晶振决定(如果<20MHZ选用此项)  #define ENABLE_IAP 0X83    //编程周期由晶振决定(如果<12MHZ选用此项)//#define ENABLE_IAP 0X84    //编程周期由晶振决定(如果<6MHZ选用此项)//#define ENABLE_IAP 0X85    //编程周期由晶振决定(如果<3MHZ选用此项)//#define ENABLE_IAP 0X86    //编程周期由晶振决定(如果<2MHZ选用此项)//#define ENABLE_IAP 0X87    //编程周期由晶振决定(如果<1MHZ选用此项)#define IAP_ADDRESS 0X0000   //内部EEPROM地址/********************************************************************                            开机最大次数和最长时间定义*********************************************************************/#define C  10    //开机最大次数(次)#define T  1     //开机最长时间(小时)/********************************************************************                            初始定义*********************************************************************/#define DUAN P0   //P0口控制段#define WEI  P2   //P2口控制位uchar Count,days;uint fen,cnt;sbit jdq=P3^3;sbit key=P3^5;/********************************************************************                       函数初始化*********************************************************************/void IapIdle();                           //操作函数uchar IapReadByte(uint addr);             //读取函数void IapProgramByte(uint addr,uchar dat); //写入函数void IapEraseSector(uint addr);           //擦除函数void cshh();//============================================================//延时程序void delayms(unsigned int x){    int i,j;                                                                                    for(i=0;i<x;i++)                                                                           {         for(j=0;j<260;j++);       }                                                                                     }/********************************************************************                            主函数*********************************************************************/void main(){           delayms(600);     Count=IapReadByte(0);               days=IapReadByte(1);                Count++;                            IapEraseSector(0);              //擦除扇区  //34us    IapProgramByte(0,Count);        //写入数据//38us    cshh();                         //定时器中断初始化    if(Count<C)       TR0=1;    if(Count>=C||days==T)    {      TR0=0;      jdq=1;      IapEraseSector(0);            //擦除扇区      IapProgramByte(0,C+2);        //写入数据    }     while(1)    { if(key==0)     {      while(!key);      IapEraseSector(0);           //擦除扇区     }    }}/********************************************************************                            操作函数*********************************************************************/void IapIdle(){    IAP_CONTR=0;    IAP_CMD=0;    IAP_TRIG=0;    IAP_ADDRH=0X80;    IAP_ADDRL=0;}/********************************************************************                            读取一个字节函数*********************************************************************/uchar IapReadByte(uint addr){    uchar dat;      IAP_CONTR=ENABLE_IAP;    IAP_CMD=CMD_READ;    IAP_ADDRL=addr;    IAP_ADDRH=addr>>8;    IAP_TRIG=0X5A;    IAP_TRIG=0XA5;    _nop_();    _nop_();    _nop_();    dat=IAP_DATA;    IapIdle();    return dat;}/********************************************************************                            写入一个字节函数*********************************************************************/void IapProgramByte(uint addr,uchar dat){    IAP_CONTR=ENABLE_IAP;    IAP_CMD=CMD_PROGRAM;    IAP_ADDRL=addr;    IAP_ADDRH=addr>>8;    IAP_DATA=dat;    IAP_TRIG=0X5A;    IAP_TRIG=0XA5;    _nop_();    _nop_();    _nop_();    IapIdle();}/********************************************************************                            擦除一个字节函数*********************************************************************/void IapEraseSector(uint addr){    IAP_CONTR=ENABLE_IAP;    IAP_CMD=CMD_ERASE;    IAP_ADDRL=addr;    IAP_ADDRH=addr>>8;    IAP_TRIG=0X5A;    IAP_TRIG=0XA5;    _nop_();    _nop_();    _nop_();    IapIdle();}/********************************************************************                           定时器中断初始化*********************************************************************/void cshh(){      TMOD|=0X01;//定义定时器工作方式     TH0=(65536-60000)/256;     TL0=(65536-60000)%256;     ET0=1;     EA=1;      //开中断 }/********************************************************************                           定时器中断函数*********************************************************************/void timer1(void)interrupt 1{    TH0=(65536-60000)/256;  //60ms   TL0=(65536-60000)%256;   cnt++;   if(cnt==1000)//1000次一分钟    {         cnt=0;         fen++;         if(fen==60)                  //60次为一小时         {            fen=0;           days++;           IapEraseSector(1);           //擦除扇区           IapProgramByte(1,Count);     //写入数据                   }         if(days==T)         {           jdq=1;           TR0=0;         }    }   } /********************************************************************                            结束*********************************************************************/

提醒:《定时定次催款应用程序设计》最后刷新时间 2024-03-14 01:02:36,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《定时定次催款应用程序设计》该内容的真实性请自行鉴别。