写出该实验需要的代码, 实验: 外部中断实验 实验目的: 熟悉51单片机的外部中断;掌握开关的电路设计;掌握8位LED数码管的电路设计。 实验原理: 51单片机的中断,包括中断源、中断向量地址、中断服务子程序,开关的电路设计,以及数码管的硬件电路。 实验内容: 使用外部中断方式来统计独立按键S4或S5按下的次数,并通过LED数码管的低2位来显示按键次数。
时间: 2024-02-27 12:56:37 浏览: 20
好的,以下是该实验需要的代码:
```
#include<reg52.h>
#include<intrins.h>
sbit S4 = P3^2; // 定义S4按键输入口
sbit S5 = P3^3; // 定义S5按键输入口
sbit D1 = P0^0; // 定义LED数码管的第一位
sbit D2 = P0^1; // 定义LED数码管的第二位
sbit D3 = P0^2; // 定义LED数码管的第三位
sbit D4 = P0^3; // 定义LED数码管的第四位
sbit D5 = P0^4; // 定义LED数码管的第五位
sbit D6 = P0^5; // 定义LED数码管的第六位
sbit D7 = P0^6; // 定义LED数码管的第七位
sbit D8 = P0^7; // 定义LED数码管的第八位
unsigned char cnt; // 定义按键计数器
void delay(unsigned int xms) // 延时函数,单位为毫秒
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void key_handler() interrupt 0 // 中断服务子程序
{
if(S4==0) // 判断是S4按键触发中断
{
cnt++; // 按键计数器加一
D1 = cnt%2; // 将按键计数器的二进制数的个位数传给D1
D2 = (cnt/2)%2; // 将按键计数器的二进制数的十位数传给D2
}
if(S5==0) // 判断是S5按键触发中断
{
cnt--; // 按键计数器减一
D1 = cnt%2; // 将按键计数器的二进制数的个位数传给D1
D2 = (cnt/2)%2; // 将按键计数器的二进制数的十位数传给D2
}
delay(10); // 延时去抖动
}
void main()
{
cnt = 0; // 按键计数器清零
D1 = 0; // LED数码管初始显示为0
D2 = 0;
D3 = 0;
D4 = 0;
D5 = 0;
D6 = 0;
D7 = 0;
D8 = 0;
IT0 = 1; // S4外部中断方式为下降沿触发
EX0 = 1; // 打开S4外部中断
IT1 = 1; // S5外部中断方式为下降沿触发
EX1 = 1; // 打开S5外部中断
EA = 1; // 打开总中断开关
while(1); // 主程序循环等待中断触发
}
```
注意:本代码是基于STC89C52单片机编写的,如果你使用的是其他型号的51单片机,可能需要进行相应的修改。另外,该代码仅供参考,具体实现还需要根据实验板的具体情况进行相应的修改。