写出满足以下条件基于C51单片机的代码, 运用中断,假设有二个外部设备,其中一个为压力开关,一个为温度开关,压力产生的危害要高于温度,两设备正常工作时输出低电平,有故障时输出高电平,试设计某控制系统,当温度开关按下时闪烁慢,压力开关按下时闪烁快,正常工作时,控制指示灯亮。
时间: 2024-06-13 16:08:49 浏览: 54
```c
#include <reg52.h>
sbit pressure_switch = P1^0; // 压力开关
sbit temperature_switch = P1^1; // 温度开关
sbit led = P2^0; // 控制指示灯
unsigned int count = 0; // 计数器
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i = 0; i < t; i++)
for(j = 0; j < 125; j++);
}
void main()
{
EA = 1; // 开总中断
EX0 = 1; // 开外部中断0
IT0 = 1; // 设置外部中断0为下降沿触发
EX1 = 1; // 开外部中断1
IT1 = 1; // 设置外部中断1为下降沿触发
while(1)
{
if(!pressure_switch && !temperature_switch) // 正常工作
{
led = 0; // 控制指示灯亮
delay(500); // 延时500ms
led = 1; // 控制指示灯灭
delay(500); // 延时500ms
}
}
}
void int0() interrupt 0 // 外部中断0服务程序
{
count = 0; // 计数器清零
while(!pressure_switch) // 压力开关按下
{
led = ~led; // 控制指示灯闪烁
delay(100); // 延时100ms
count++; // 计数器加1
if(count == 10) // 延时1s
break;
}
}
void int1() interrupt 2 // 外部中断1服务程序
{
count = 0; // 计数器清零
while(!temperature_switch) // 温度开关按下
{
led = ~led; // 控制指示灯闪烁
delay(500); // 延时500ms
count++; // 计数器加1
if(count == 10) // 延时5s
break;
}
}
```
--相关问题--:
1. 如何在C51单片机中使用定时器?
2. C51单片
阅读全文