📄 alarm.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 + -