⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alarm.c

📁 这是一个工厂用的,用于漏打螺钉时报警的程序
💻 C
字号:

#include<stc12c5410ad.h>
#include <intrins.h> 
#define uchar unsigned char 
#define uint unsigned int 
///////////////isp  sfr////////////////////////////////

sfr  isp_wdt     = 0xE1;
sfr  isp_data    = 0xE2;
sfr  isp_addrh   = 0xE3;
sfr  isp_addrl   = 0xE4;
sfr  isp_cmd     = 0xE5;
sfr  isp_trig    = 0xE6;
sfr  isp_contr   = 0xE7;
////擦除一个扇区
void ErasEEEprom(uchar t_addr)
{
    isp_addrh = t_addr;
    isp_addrl = 0;
    EA    =    0;           /* 关中断 */
    isp_contr = 0x81;       /* 1000,0000 */
    isp_cmd = 3;
    isp_trig = 0x46;
    isp_trig = 0xb9;
    _nop_();
    _nop_();
    isp_contr = 0;           /* 0111,1111 */
    isp_cmd = 0;
    isp_trig = 0;
    isp_addrh = 0xff;
    isp_addrl = 0xff;
    EA = 1;                    /* 开中断 */
}
////擦除扇区,写一次最多256个,建议试用几个,要写入的数据存在指针指向的缓冲区
 void WritEEEprom(uchar t_addr_h, uchar t_addr_l, uchar num, uchar *ptr)
{
	uchar iic_num;
    ErasEEEprom(t_addr_h);
    for (iic_num=0; iic_num<num; iic_num++)
    {
        isp_data = *(ptr+iic_num);
        isp_addrh = t_addr_h;
        isp_addrl = iic_num+t_addr_l;
        EA    =    0;                 /* 关中断 */
        isp_contr = 0x81;        /* 1000,0000 */
        isp_cmd = 2;
        isp_trig = 0x46;
        isp_trig = 0xb9;
        _nop_();
        _nop_();
        isp_contr = 0;             /* 0111,1111 */
        isp_cmd = 0;
        isp_trig = 0;
        isp_addrh = 0xff;
        isp_addrl = 0xff;        
        EA = 1;                    /* 开中断 */
    }
}


////从EEprom的t_addr地址开始读出num个数据
////存入以tEmp[0]开始的存储单元
////一次最多256个,读数的数据存入指针指向的缓冲区
void REadEEprom(uchar s_addr_h, uchar s_addr_l, uchar num, uchar *ptr)
{
	uchar iic_num;
    for (iic_num=0; iic_num<num; iic_num++)
    {
        isp_addrh = s_addr_h;
        isp_addrl = iic_num+s_addr_l;
        EA    =    0;    /* 关中断 */
        isp_contr = 0x81;       /* 1000,0000 */
        isp_cmd = 1;
        isp_trig = 0x46;
        isp_trig = 0xb9;
        _nop_();
        _nop_();
        isp_contr = 0;    /* 0111,1111 */
        isp_cmd = 0;
        isp_trig = 0;
        isp_addrh = 0xff;
        isp_addrl = 0xff;        
        EA = 1;                            /* 开中断 */
        *(ptr+iic_num) = isp_data;
    }
} 



//////////////////////////////////////////////
uchar rember[10]={1,2,3,4,5,6,7,8,9,0};
uchar rember1[10];

sbit  buz=P2^0;


sbit  sda=P2^1;
sbit  sst=P2^2;
sbit  sclk=P2^3;

sbit  keyb1=P2^5;
sbit  keyb2=P2^4;
sbit  key_add=P3^5;
sbit  key_dec=P3^4;


sbit  led_l=P2^6;
sbit  led_h=P2^7; 

unsigned char  code 
disptable[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6}; 
 //数码管显示   0     1    2    3    4   5    6	    7    8    9          
void display(uchar num)
{ 
 uchar i;
 num=disptable[num];
 sclk=0;
 for(i=0;i<8;i++)
   {
    sda=num&0x01;
    sclk=1;
    num=num>>1;
    sclk=0;    
   }
 sst=0;
 sst=1;
}
void delay_1ms(void)                 //1ms延时函数
{uint i;
 for(i=0;i<1140;i++)
    {;}
}
  
void delay_nms(unsigned int n)       //N ms延时函数
{uint i=0;
 for(i=0;i<n;i++)
    {delay_1ms();}
}

alarm()
{
  buz=0;
  led_l=0;
  //delay_nms(9);		           
 // buz=1;
  //led_l=1;
}

stop_alarm()
{

  buz=1;
  led_l=1;
}

void main(void) 
{ uchar i,doing;

  P2M1=0xc0;
  P2M0=0x00;

/*
  display(0);while(keyb2!=1);delay_nms(350);
  display(1);while(keyb2!=1);delay_nms(350);
  display(2);while(keyb2!=1);delay_nms(350);
  display(3);while(keyb2!=1);delay_nms(350);
  display(4);while(keyb2!=1);delay_nms(350);
  display(5);while(keyb2!=1);delay_nms(350);
  display(6);while(keyb2!=1);delay_nms(350);
  display(7);while(keyb2!=1);delay_nms(350);
  display(8);while(keyb2!=1);delay_nms(350);
  display(9);while(keyb2!=1);delay_nms(350);
  display(10);while(keyb2!=1);delay_nms(350);
*/

  REadEEprom (0x28, 0x00, 10, rember1);
  rember[0]=rember1[0];
  i=rember[0];
  display(i);

  //alarm();alarm();stop_alarm();

  while(1)
       {
	   


   ////////////////设置并存储////////////////////////////////////////
        if(key_add==0)
		  {
		   i=i+1;
		   rember[0]=i;
		   if(i<=9)
             {WritEEEprom(0x28, 0x00, 10, rember);
			  led_l=0;delay_nms(50);led_l=1;
		     }		  
		   if(i>=9)
 		     {i=9;alarm();delay_nms(100);stop_alarm();rember[0]=i;
			 }		  
		   display(i);
		    
		   delay_nms(50);
		   while(key_add==0); 
		   delay_nms(150);
		  }

        if(key_dec==0)
		  {
		   i=i-1;
		   rember[0]=i;
		   if(i>=1)
             {WritEEEprom(0x28, 0x00, 10, rember);
			  led_l=0;delay_nms(50);led_l=1;
		     }		  
		   if(i<=1)
 		     {i=1;alarm();delay_nms(100);stop_alarm();rember[0]=i;
			 }		  
		   display(i);
		    
		   delay_nms(50);
		   while(key_add==0); 
		   delay_nms(150);
		  }
   //////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////
        if(keyb2!=0)//no use
		  {
		   delay_nms(50);
		   if(keyb2!=0)
		      {doing=1;i=rember[0];}
		  }

		while(doing==1)
		 {
		 
		  if(keyb2!=1)
		     {if(i>0)
			   {alarm();}
			 }
			 else
			   {
			    stop_alarm();
			   }


	      if(keyb1==0)
		  {
		   display(i--); //alarm();
		   delay_nms(50);
		   while(keyb1==0); 
		   delay_nms(150);

		   display(i);

		  }	

		  if(i==0)
		     {display(i);

			  stop_alarm();

			  delay_nms(50);
		      while(keyb2!=0); 
		      delay_nms(150);

		      i=rember[0];
		      display(i);
			  delay_nms(50);
		      while(keyb2!=0); 
		      delay_nms(500);

			  doing=0;
		     } 

		 }
///////////////////////////////////////////////////////////////////


       }
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -