找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1272|回复: 1
打印 上一主题 下一主题
收起左侧

STC单片机+12964低电压保护源程序

[复制链接]
跳转到指定楼层
楼主
ID:641745 发表于 2019-11-16 11:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机源程序如下:
  1. //#include<reg52.h>
  2. #include<STC_NEW_8051.H>
  3. #include<LCD12864.H>
  4. #include<eeprom.h>
  5. #include<ADC.h>
  6. #include<math.h>
  7. /****定义按键接口**************/
  8. sbit Mode=P3^2;
  9. sbit Add=P3^3;
  10. sbit Dec=P3^4;
  11. sbit Ent=P3^5;
  12. sbit Dsp=P3^7;       
  13. sbit J5=P2^7;       
  14. sbit   LED=P4^2;
  15. sbit   G1=P4^3;

  16. unsigned char id,num;
  17. unsigned int  a[8];          
  18. //void Add_key1();
  19. void Lcd_Mark2(void);
  20. /*void Lcd_Mark3(void)
  21. {
  22. Mcs=1;Scs=0;
  23.             g=        a[0]/100%10;               
  24.             d=        a[0]/10%10;
  25.                 e=        a[0]%10;
  26.                 Disp_Digit(0,0,zero+g*16);
  27.                 Disp_Digit(0,8,zero+d*16);
  28.         Disp_Digit(0,16,zero+e*16);
  29.                 Disp_Digit(0,24,space);
  30.                 Disp_Digit(0,32,space);
  31.        
  32.                         g=        a[1]/100%10;               
  33.             d=        a[1]/10%10;
  34.                 e=        a[1]%10;
  35.                 Disp_Digit(2,0,zero+g*16);
  36.                 Disp_Digit(2,8,zero+d*16);
  37.         Disp_Digit(2,16,zero+e*16);
  38.                 Disp_Digit(2,24,space);
  39.                 Disp_Digit(2,32,space);
  40.        
  41.                         g=        a[2]/100%10;               
  42.             d=        a[2]/10%10;
  43.                 e=        a[2]%10;
  44.                 Disp_Digit(4,0,zero+g*16);
  45.                 Disp_Digit(4,8,zero+d*16);
  46.         Disp_Digit(4,16,zero+e*16);
  47.                 Disp_Digit(4,24,space);
  48.                 Disp_Digit(4,32,space);
  49.        
  50.                         g=        a[3]/100%10;               
  51.             d=        a[3]/10%10;
  52.                 e=        a[3]%10;
  53.                 Disp_Digit(6,0,zero+g*16);
  54.                 Disp_Digit(6,8,zero+d*16);
  55.         Disp_Digit(6,16,zero+e*16);
  56.                 Disp_Digit(6,24,space);
  57.                 Disp_Digit(6,32,space);
  58.                 Disp_Digit(6,40,space);
  59.                 Disp_Digit(6,48,space);
  60. Mcs=0;Scs=1;
  61.             g=        a[4]/100%10;               
  62.             d=        a[4]/10%10;
  63.                 e=        a[4]%10;
  64.                 Disp_Digit(0,0,zero+g*16);
  65.                 Disp_Digit(0,8,zero+d*16);
  66.         Disp_Digit(0,16,zero+e*16);

  67.                         g=        a[5]/100%10;               
  68.             d=        a[5]/10%10;
  69.                 e=        a[5]%10;
  70.                 Disp_Digit(2,0,zero+g*16);
  71.                 Disp_Digit(2,8,zero+d*16);
  72.         Disp_Digit(2,16,zero+e*16);       
  73.                         g=        a[6]/100%10;               
  74.             d=        a[6]/10%10;
  75.                 e=        a[6]%10;
  76.                 Disp_Digit(4,0,zero+g*16);
  77.                 Disp_Digit(4,8,zero+d*16);
  78.         Disp_Digit(4,16,zero+e*16);       
  79.                         g=        a[7]/100%10;               
  80.             d=        a[7]/10%10;
  81.                 e=        a[7]%10;
  82.                 Disp_Digit(6,0,zero+g*16);
  83.                 Disp_Digit(6,8,zero+d*16);
  84.         Disp_Digit(6,16,zero+e*16);
  85.        
  86. }         */
  87. /*------------------------------------------------
  88.                     定时器初始化子程序
  89. ------------------------------------------------*/
  90. void Init_Timer0(void)
  91. {
  92.          TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  93.          TH0=0x00;                          //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
  94.          TL0=0x01;
  95.          ET0=1;                             //定时器中断打开
  96.          TR0=1;                             //定时器开关打开
  97. }

  98. void Delay100(int num)//延时函数          10ms
  99.   {        int i,j;
  100.            for ( i=num;i>0;i--)                       
  101.          for ( j=12490;j>0;j--)       
  102.                           {  }          
  103.    }
  104. void Disp(void);

  105. void main()
  106. {
  107.    
  108.   year=Byte_Read(0X00)<<2;
  109.   month=Byte_Read(0X01);
  110.   date=Byte_Read(0X02);
  111.   hour=Byte_Read(0X03);
  112.   min=Byte_Read(0X04);
  113.   sec=Byte_Read(0X05);
  114.   week=Byte_Read(0X06);
  115.   Init_Timer0();

  116. EA    = 1;                  //打开总中断
  117.   InitADC();      
  118.   Init_lcd();
  119.   Clr_Scr(); J5=1;
  120.    Delay100(30);
  121. // Delay12864(20000);                 
  122.   Lcd_Mark1();
  123. // Delay12864(10000);
  124.   EA=1;           
  125.         flag=0;G1=1;
  126.   while(1)
  127.            {                  
  128.                    write_com(Disp_On);       
  129.                 a[0]=(GetADCResult(0)<<2|ADC_LOW2);        a[0]=a[0]/100*3*month;   Delay12864(20);
  130.                 a[1]=(GetADCResult(1)<<2|ADC_LOW2); a[1]=a[1]/100*3*month;  Delay12864(20);
  131.         //        a[2]=GetADCResult(2);
  132.         //        a[3]=GetADCResult(3);
  133.         //        a[4]=GetADCResult(4);
  134.         //        a[5]=GetADCResult(5);a[5]=a[5]<<1;
  135.         //        a[6]=GetADCResult(6);a[5]=a[6]<<1;
  136.         //        a[7]=GetADCResult(7);a[5]=a[7]<<1;
  137.                                  //a[3]=ad[3];                 
  138.          if(Dsp==0)         
  139.           {            
  140.              if(Dsp==0)
  141.                  {
  142.                            flag=~flag ;                    
  143.                         while(Dsp==0);
  144.                             }
  145.                 }
  146.                   if( flag==0)
  147.                   {//Disp();
  148.                     Clr_Scr(); Lcd_Mark1(); Lcd_Mark2();
  149.                    }
  150.                     if( flag==1)
  151.                      {        Clr_Scr(); Disp();                     
  152.                          }
  153.          
  154.           if ((a[0]>300)&&(a[1]>300))
  155.             {Delay100(1000);G1=0;
  156.                 if (  G1==0)
  157.                     if( (a[0]<year)&&(a[1]<year))
  158.                           {
  159.                            Delay100(hour);  
  160.                            J5=0;Delay100(hour);J5=1;
  161.                           }
  162.                           }
  163.                  // if( (a[5]>year)||(a[6]>year)||(a[7]>year))
  164.                  //    {J5=0;Delay100(100  ); }
  165.                 // if( (a[2]>month)||(a[3]>month)||(a[4]>month))
  166.                 //         {   Delay100(min-30 );
  167.                   //   J5=0; Delay100(100 ); J5=1;        }
  168.                  // if( (a[2]>date)||(a[3]>date)||(a[4]>date))
  169.                 //         {   Delay100(sec-30 );
  170.                   //     J5=0; Delay100(100 ); J5=1; }
  171.                                              
  172.                   if(Ent==0)
  173.                   {     if(Ent==0)

  174.                       { Sector_Erase(0x00);                             
  175.                    Byte_Program(0x00, year>>2);
  176.                            Byte_Program(0x00+1, month);
  177.                            Byte_Program(0x00+2, date);
  178.                            Byte_Program(0x00+3, hour);
  179.                            Byte_Program(0x00+4, min);
  180.                            Byte_Program(0x00+5, sec);
  181.                            Byte_Program(0x00+6, week);
  182.                                    while(Ent==0);        }
  183.                   }
  184.   
  185.           }                       
  186.                                          
  187. /*        switch( id )
  188.               {
  189.                        case 0: Disp( );  Delay12864(20000);                         break;//正常显示
  190.                  case 1:year1 = 1;Add_key1(); Disp( );                 break;//年                 
  191.                         case 2:month1=1;Add_key1();Disp();break;//月
  192.             case 3:day1=1;;Add_key1();Disp();break;  //日
  193.                  case 4:hour1=1;Add_key1();Disp();break;//星期     
  194.                  case 5:min1=1;Add_key1();Disp();break;  //小时
  195.                        case 6:sec1=1;Add_key1();Disp();break; //分钟
  196.                        case 7:sec1=1;Add_key1();Disp();break; //秒
  197.                  default:break;       
  198.                   }      */     
  199.                }
  200.          
  201. void Timer0_isr(void) interrupt 1 using 1
  202. {
  203. TH0=0x00;                  //重新赋值
  204. TL0=0x01;  
  205.      LED=~LED;

  206.                  {  if(Mode==0)
  207.                                   {
  208.                                    // Delay12864(20);
  209.                                          if(Mode==0)
  210.                                          {
  211.                                            id++;                               
  212.                                                    if(id>8) id=0;
  213.                                                 while(Mode==0);   }
  214.                                                 }
  215.                              if(id==1)
  216.                            {   if(Add==0)
  217.                         {
  218.                            Delay12864(20);
  219.                           if(Add==0)
  220.                              {  year++;
  221.                                                  if (year>0x0fff)        year=0;   
  222.                                 while(Add==0);
  223.                                     }
  224.                                      }
  225.                                    if(Dec==0)
  226.                          {
  227.                             Delay12864(20);
  228.                             if(Dec==0)
  229.                              {  year--;        if (year<0x00)        year=0;   
  230.                                    while(Dec==0);
  231.                                 }
  232.                           }
  233.                                          }
  234.                                 if(id==2)
  235.                            {   if(Add==0)
  236.                         {
  237.                            Delay12864(20);
  238.                           if(Add==0)
  239.                              { month++;if (month>0xff)        month=0;          
  240.                                 while(Add==0);
  241.                                     }
  242.                                 }
  243.                                    if(Dec==0)
  244.                          {
  245.                             Delay12864(20);
  246.                             if(Dec==0)
  247.                              { month--;if (month<0x00)        month=0;            
  248.                                    while(Dec==0);
  249.                                 }
  250.                                          }
  251.                                    }
  252.                                    if(id==3)
  253.                            {   if(Add==0)
  254.                         {
  255.                            Delay12864(20);
  256.                           if(Add==0)
  257.                              { date++; if (date>0xff)        date=0;  
  258.                                 while(Add==0);
  259.                                     }
  260.                                 }
  261.                                    if(Dec==0)
  262.                          {
  263.                             Delay12864(20);
  264.                             if(Dec==0)
  265.                              {date--;//if (date<0x00)        date=0;            
  266.                                    while(Dec==0);
  267.                                 }
  268.                                          }
  269.                                  }
  270.                                         if(id==4)
  271.                            {   if(Add==0)
  272.                         {
  273.                            Delay12864(20);
  274.                           if(Add==0)
  275.                              { hour++;
  276.                                                  if(hour>100)hour=0;          
  277.                                 while(Add==0);
  278.                                     }
  279.                                 }
  280.                                    if(Dec==0)
  281.                          {
  282.                             Delay12864(20);
  283.                             if(Dec==0)
  284.                              {hour--;if(hour>100)hour=0;            
  285.                                    while(Dec==0);
  286.                                 }
  287.                                          }                                        
  288.                                    }
  289.                                   
  290.                                         if(id==5)
  291.                            {   if(Add==0)
  292.                         {
  293.                            Delay12864(20);
  294.                           if(Add==0)
  295.                              { min++;if((min>0xff)||(min<30))min=30;          
  296.                                 while(Add==0);
  297.                                     }
  298.                                 }
  299.                                    if(Dec==0)
  300.                          {
  301.                             Delay12864(20);
  302.                             if(Dec==0)
  303.                              {min--;if((min>0xff)||(min<30))min=30;            
  304.                                    while(Dec==0);
  305.                                 }
  306.                                          }                                        
  307.                                    }
  308.                                   
  309.                                         if(id==6)
  310.                            {   if(Add==0)
  311.                         {
  312.                            Delay12864(20);
  313.                           if(Add==0)
  314.                              { sec++;if((sec>0xff)||(sec<30))sec=30;          
  315.                                 while(Add==0);
  316.                                     }
  317.                                 }
  318.                                    if(Dec==0)
  319.                          {
  320.                             Delay12864(20);
  321.                             if(Dec==0)
  322.                              {sec--;if((sec>0xff)||(sec<30))sec=30;                    
  323.                                    while(Dec==0);
  324.                                 }
  325.                                          }                                        
  326.                                    }
  327.                         if(id==7)
  328.                            {   if(Add==0)
  329.                         {
  330.                            Delay12864(20);
  331.                           if(Add==0)
  332.                              { week++;if(week>100)week=0;                  
  333.                                 while(Add==0);
  334.                                     }
  335.                                 }
  336.                                    if(Dec==0)
  337.                          {
  338.                             Delay12864(20);
  339.                             if(Dec==0)
  340.                              {week--;if(week>100)week=0;            
  341.                                    while(Dec==0);
  342.                                 }
  343.                                          }                                        
  344.                                    }
  345.                                 if(id==8)
  346.                                 {  
  347.                               id=0;
  348.                                  }
  349.           }                                                 
  350. }
  351.         void Lcd_Mark2(void)          
  352. {  write_com(Disp_On);
  353.         Mcs=0;Scs=1;                        //第二屏
  354.                 f=        a[0]/1000%10;
  355.                 g=        a[0]/100%10;               
  356.             d=        a[0]/10%10;
  357.                 e=        a[0]%10;
  358.                 Disp_Digit(2,16,zero+f*16);
  359.                 Disp_Digit(2,24,zero+g*16);
  360.                 Disp_Digit(2,32,zero+d*16);Disp_Digit(2,40,point );
  361.         Disp_Digit(2,48,zero+e*16);
  362.                 f=        a[1]/1000%10;
  363.                 g=        a[1]/100&10;               
  364.             d=        a[1]/10%10;
  365.                 e=        a[1]%10;
  366.                 Disp_Digit(4,16,zero+f*16);
  367.                    Disp_Digit(4,24,zero+g*16);
  368.                 Disp_Digit(4,32,zero+d*16);        Disp_Digit(4,40,point );
  369.         Disp_Digit(4,48,zero+e*16);
  370.             
  371.                 Disp_Digit(6,16,zero+( week/10)*16);
  372.                 Disp_Digit(6,24,zero+( week%10)*16);       
  373. }                                     


  374. void Disp(void)//显示和闪烁函数
  375. {
  376.         unsigned int i=0;
  377.         unsigned char a=0,b=0,c=0,f=0;
  378.         Clr_Scr();
  379.          write_com(Disp_On);
  380.                  Mcs=1;Scs=0;
  381.                  Disp_Digit(0,0,space);        Disp_Digit(0,8,space);Disp_Digit(0,16,space);        Disp_Digit(0,24,space);
  382.                         Disp_Chinese(0,32,bao);
  383.                 Disp_Chinese(0,48,hu);
  384.                                         Mcs=1;Scs=0;
  385.          {Disp_Chinese(2,0,dya);
  386.           Disp_Chinese(2,16,ya);
  387.             f=year/1000;       
  388.                 g=year/100;                                  //低压值
  389.             d=year/10%10;
  390.                 e=year%10;
  391.                 if(id!=1)
  392.                 {        Disp_Digit(2,32,zero+f*16);                  
  393.                            Disp_Digit(2,40,zero+g*16);
  394.                         Disp_Digit(2,48,zero+d*16);//        Disp_Digit(2,48,point );
  395.                         Disp_Digit(2,56,zero+e*16);}
  396.                 if(id==1)
  397.                 {        Disp_Digit_f(2,32,zero+f*16);                  
  398.                            Disp_Digit_f(2,40,zero+g*16);
  399.                         Disp_Digit_f(2,48,zero+d*16);//        Disp_Digit(2,48,point );
  400.                         Disp_Digit_f(2,56,zero+e*16);}       
  401.     }   
  402.          {   g=hour/100;     
  403.             d=hour/10%10;
  404.                 e=hour%10;
  405.                 Mcs=1;Scs=0;
  406.                         Disp_Chinese(4,0,xian);        Disp_Chinese(4,16,shi);
  407.                         Disp_Digit(4,32,space);
  408.                         if(id!=4)       
  409.                 {        Disp_Digit(4,40,zero+d*16);        Disp_Digit(4,48,point );                               
  410.                         Disp_Digit(4,56,zero+e*16);}
  411.                                 if(id==4)       
  412.                 {        Disp_Digit_f(4,40,zero+d*16);        Disp_Digit_f(4,48,point );                               
  413.                         Disp_Digit_f(4,56,zero+e*16);}       

  414.            }          
  415.         {
  416.                      d=week/10;
  417.             e=week%10;        //地址
  418.                         Mcs=1;Scs=0;
  419.                         Disp_Chinese(6,0,di);
  420.                         Disp_Chinese(6,16,zhi);
  421.                         Disp_Digit(6,32,space);                Disp_Digit(6,40,space);
  422.                         if(id!=7)
  423.                 {        Disp_Digit(6,48,zero+d*16);
  424.                         Disp_Digit(6,56,zero+e*16);}
  425.                    if(id==7)
  426.                 {        Disp_Digit_f(6,48,zero+d*16);
  427.                         Disp_Digit_f(6,56,zero+e*16);}
  428.     }     
  429.             write_com(Disp_On);          

  430.          {        Mcs=0;Scs=1;        //右                                                     
  431.                         Disp_Chinese(0,0,tiao);
  432.                 Disp_Chinese(0,16,zheng);
  433.                         Disp_Digit(0,32,space);        Disp_Digit(0,40,space);        Disp_Digit(0,48,space);        Disp_Digit(0,56,space);
  434.                             }
  435.          {                g=month/100;
  436.                     d=month/10%10;
  437.                         e=month%10;
  438.                 Disp_Digit(2,0,space);                Disp_Digit(2,8,space);       
  439.                 Disp_Digit(2,16,K);        Disp_Digit(2,24,space);
  440.                 if(id!=2)       
  441.          {        Disp_Digit(2,32,zero+g*16);
  442.                 Disp_Digit(2,40,zero+d*16);
  443.                 Disp_Digit(2,48,zero+e*16);}
  444.                         if(id==2)       
  445.          {        Disp_Digit_f(2,32,zero+g*16);
  446.                 Disp_Digit_f(2,40,zero+d*16);
  447.                 Disp_Digit_f(2,48,zero+e*16);}       
  448.                                 Disp_Digit(2,56,space);

  449.          }
  450.        
  451.     {   
  452.                 d=sec/10%10;
  453.                 e=sec%10;
  454.                 Mcs=0;Scs=1;       
  455.         Disp_Digit(4,0,space);        Disp_Digit(4,8,space);        Disp_Digit(4,16,space);        Disp_Digit(4,24,space);
  456.         Disp_Digit(4,32,space);        Disp_Digit(4,40,space);        Disp_Digit(4,48,space);        Disp_Digit(4,56,space);                  
  457.     }              
  458.                    Mcs=0;Scs=1;
  459.                 {                      
  460.                 d=id/10;
  461.                 e=id%10;                       
  462.                         Mcs=0;Scs=1;
  463.                                         Disp_Chinese(6,0,tiao);        Disp_Chinese(6,16,zheng);
  464.                                         Disp_Digit(6,32,space);          
  465.                         Disp_Digit(6,40,zero+d*16);//送显示
  466.                         Disp_Digit(6,48,zero+e*16);
  467.                           Disp_Digit(6,56,space);
  468.        }                  
  469.     }
复制代码

所有资料51hei提供下载:
低压.rar (57.7 KB, 下载次数: 8)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-11-19 20:05 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表