本帖最后由 34af9uc 于 2023-7-10 19:22 编辑
/*****************pms150g电笔**********************/
/*****************qq:774145445*********************/
/*****************ID:共同学习stm8******************/
/*****************ide:0.98A4_20230708**************/
/**************************************************/
// pms150g
// ______ ______
// 5v-|1-vdd \_/ gnd-8|-gnd ________
// led_g-|2-pa7 pa0-7|-jiance--|__10M___|----| ________
// led_r-|3-pa6 pa4-6|-bijiao--|__15M___|----|---|__4.7M__|--------220v
// gnd-|4-pa5_____pa3-5|-feng----|__10R___|--------------------------蜂鸣器
#include "extern.h"
led_g bit pa.7;
led_r bit pa.6;
feng bit pa.3;
jiance bit pa.0;
bijiao bit pa.4;
void chushihua(); //初始化
void shanshuo1(); //慢闪绿灯+蜂鸣器
void shanshuo2(); //快闪红灯+蜂鸣器
void jiance_gao(); //高电位检测3伏
void jiance_di(); //低电位检测0.5伏
/**************************************************/
void FPPA0 (void)
{
//.ADJUST_IC SYSCLK=IHRC/16 // SYSCLK=1M
//.ADJUST_IC SYSCLK=ILRC;
.ADJUST_IC DISABLE; // No adjust IHRCR, WatchDog Enable
clkmd =0xf4; //系统时钟ilrc
clkmd.4 =0; //关闭ihrc
chushihua();
/**************************************************/
$ jiance in,PH;
// padier =0b1110_1001; //pa4数字停用
// $ GPCS VDD*(16)/24; //0.15
// $ GPCC Enable,N_R,P_PA4;
while (1)
{
GPCS =0;
$ GPCC Disable; //关闭比较器
//padier =0b1111_1001; //pa4数字启用
$ jiance in,PH;
//$ jiance out,high;
$ bijiao in,X_PH, X_PL;
.delay 10;
stopsys; //进入掉电模式
if(bijiao ==0)
{
led_g =1; //绿灯点亮
.delay 10;
jiance_gao();
.delay 10;
jiance_di();
.delay 10;
led_g =0;
.delay 10;
}
}
}
/**************************************************/
/*
void Interrupt (void)
{
pushaf;
if (Intrq.T16)
{ // T16 Trig
// User can add code
Intrq.T16 = 0;
//...
}
popaf;
}
*/
/**************************************************/
void chushihua() //初始化
{
$ led_g out,low;
$ led_r out,low;
$ feng out,low;
$ jiance in,X_PH, X_PL; //输入,关闭上拉电阻,关闭下拉电阻
$ bijiao in,X_PH, X_PL;
//padier =0b1110_1001; //pa4数字停用
//$ GPCC Disable; //关闭比较器
//GPCS =0;
.delay 20;
}
/**************************************************/
void shanshuo1() //慢闪绿灯+蜂鸣器
{
byte shan_a1;
shan_a1 =200;
while(shan_a1 --)
{
//if(feng ==1){feng =0;} else{feng =1;}
pa ^=1 <<3; //响蜂鸣器
}
feng =0;
shan_a1 =80;
while(shan_a1 --)
{
//if(led_g ==1){led_g =0;} else{led_g =1;}
//pa ^=1 <<7; //闪绿灯
led_g =1;
.delay 30;
led_g =0;
.delay 70;
}
led_g =0;
}
/**************************************************/
void shanshuo2() //快闪红灯+蜂鸣器
{
byte shan_a1;
shan_a1 =100;
while(shan_a1 --)
{
//if(feng ==1){feng =0;} else{feng =1;}
pa ^=1 <<3; //响蜂鸣器
}
feng =0;
shan_a1 =40;
while(shan_a1 --)
{
//if(led_g ==1){led_g =0;} else{led_g =1;}
//pa ^=1 <<6; //闪红灯
led_r =1;
.delay 30;
led_r =0;
.delay 70;
}
led_g =0;
}
/**************************************************/
void jiance_gao() //高电压检测3伏
{
$ jiance in,pl; //正电压比较一次
$ GPCS VDD*(16)/24; //3.3v
$ GPCC Enable,N_R,P_PA4;
if(gpcc.6)
{
shanshuo2(); //快闪红灯+蜂鸣器
return;
}
$ jiance in,ph; //反电压比较一次
$ GPCS VDD*(16)/24; //3.3v
$ GPCC Enable, N_PA4,P_R;
if(gpcc.6)
{
shanshuo2(); //快闪红灯+蜂鸣器
return;
}
}
/**************************************************/
void jiance_di() //低电位检测0.5伏
{
$ jiance in,pl; //正电压比较一次
$ GPCS VDD*(8)/24; //1.6v
$ GPCC Enable,N_R,P_PA4;
if(gpcc.6)
{
shanshuo1(); //慢闪绿灯+蜂鸣器
return;
}
$ jiance in,ph; //反电压比较一次
$ GPCS VDD*(8)/24; //1.6v
$ GPCC Enable, N_PA4,P_R;
if(gpcc.6)
{
shanshuo1(); //慢闪绿灯+蜂鸣器
return;
}
}
/**************************************************/
|