用c写一个数码管中断系统
时间: 2023-05-23 11:06:49 浏览: 49
前置条件:假设你已经连接了一个基于数码管的硬件系统,可以通过I/O口控制数码管的显示。
下面是一个简单的c程序,用于设置数码管的中断系统:
```c
#include<stdio.h>
#include<stdlib.h>
#include "dos.h"
#include<conio.h>
int val = 1; // 先默认数码管显示1
void interrupt(*OldIntVector)(...);
void interrupt NewIntVector(...)
{
// 将数值赋给 I/O 端口,以使数码管显示相应数字
outportb(0x378, val);
// 保存原始的中断向量并返回到主程序
(*OldIntVector)(...);
}
int main()
{
clrscr();
// 注册中断向量
OldIntVector = getvect(0x08); // 保存原来的中断向量
setvect(0x08, NewIntVector); // 设置新的中断向量
// 进入中断处理程序
while(1)
{
clrscr();
printf("Press any key to change the value on the display...");
getch();
// 通过改变 val 的值来改变数码管显示的数字
val++;
if(val > 9)
val = 0;
}
// 恢复中断向量
setvect(0x08, OldIntVector); // 恢复原来的中断向量
return 0;
}
```
这个代码主要做了以下几件事情:
1. 首先,定义了一个全局变量 `val`,用于保存数码管要显示的数字。
2. 接下来,定义了一个中断处理函数 `NewIntVector()`。这个函数将数值赋给 I/O 端口,以驱动数码管显示相应数字。
3. 在 `main()` 函数中,首先保存了原来的中断向量,并设置了新的中断向量。这意味着,当计算机接收到一个中断请求时,会调用 `NewIntVector()` 函数,而不是原来的中断处理程序。
4. 然后,程序进入一个无限循环,不断改变 `val` 变量的值,这样就能观察数码管在各种不同数字之间的变化。
5. 最后,在程序结束时,恢复原来的中断向量。
需要注意的是,这个程序可能需要进行一些适当的调整才能在您的特定环境中正常工作。此外,实现一个完整的中断系统可能需要更加复杂的代码。