用AT89C5211. 检测四个开关S1~S4的状态,开关S1合上时,数码管显示1,开关S2合上时,数码管显示2,依次轮下去,当开关没有合上或合上的开关多于1个时,数码管均显示0。
时间: 2023-05-16 10:07:29 浏览: 124
51单片机使用8个数码管中的一个数码管,循环显示数字0~9,到9回0,数字变化的时间间隔为1s。
5星 · 资源好评率100%
以下是用AT89C5211检测四个开关S1~S4的状态,实现数码管显示相应数字的代码:
```
#include <reg52.h>
sbit S1 = P1^0;
sbit S2 = P1^1;
sbit S3 = P1^2;
sbit S4 = P1^3;
sbit D1 = P2^0;
sbit D2 = P2^1;
sbit D3 = P2^2;
sbit D4 = P2^3;
void main()
{
while(1)
{
if(S1 == 0 && S2 == 1 && S3 == 1 && S4 == 1) // S1合上
{
D1 = 1;
D2 = 0;
D3 = 0;
D4 = 0;
}
else if(S1 == 1 && S2 == 0 && S3 == 1 && S4 == 1) // S2合上
{
D1 = 0;
D2 = 1;
D3 = 0;
D4 = 0;
}
else if(S1 == 1 && S2 == 1 && S3 == 0 && S4 == 1) // S3合上
{
D1 = 0;
D2 = 0;
D3 = 1;
D4 = 0;
}
else if(S1 == 1 && S2 == 1 && S3 == 1 && S4 == 0) // S4合上
{
D1 = 0;
D2 = 0;
D3 = 0;
D4 = 1;
}
else if(S1 == 1 && S2 == 1 && S3 == 1 && S4 == 1) // 没有开关合上
{
D1 = 0;
D2 = 0;
D3 = 0;
D4 = 0;
}
else // 多个开关合上
{
D1 = 0;
D2 = 0;
D3 = 0;
D4 = 0;
}
}
}
```
注意:以上代码仅供参考,具体实现方式可能因硬件环境等因素而有所不同。
阅读全文