- 数码管与中断
- 这部分代码似乎有问题,如上机有问题请留言
#include "conio.h"
#include "dos.h"
typedef unsigned char u8;
typedef unsigned int u16;
u8 number[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u8 table[] = {0x01,0x02,0x04,0x08,0x10,0x20};
u16 M8255_SET = 0x0606;
u16 M8255_A = 0x0600;
u16 M8255_B = 0x0602;
u16 M8255_C = 0x0604;
u8 cmd_set = 0x0f0;
u16 shorttime = 10000;
void frametime(void);
void delay(u16 time);
void display(u8 port, u8 num);
void display1(void);
void display2(void);
void display3(void);
void interrupt test_intpt(void);
u8 times = 6;
void main() {
outportb(M8255_SET,cmd_set);
setvect(0x0e,test_intpt);
__asm{
CLI
MOV AL, 11H
OUT 20H, AL
MOV AL, 08H
OUT 21H, AL
MOV AL, 04H
OUT 21H, AL
MOV AL, 03H
OUT 21H, AL
MOV AL, 00H
OUT 21H, AL
STI
}
while(1) {
display3();
}
}
void frametime() {
int j = 0;
for(;j<1000;j++)
;
}
void delay(u16 time) {
int i = 0,j=0;
for(;i<time;i++) {
for(;j<10000;j++)
;
}
}
void display(u8 port, u8 num) {
outportb(M8255_B, number[num]);
outportb(M8255_A, ~table[port]);
frametime();
}
void display1() {
int numb = 0;
for(;numb<16;numb++) {
int i = 5;
for(;i>=0;i--) {
display(i,numb);
delay(shorttime);
}
delay(shorttime);
}
display(0,15);
delay(shorttime);
}
void display2() {
while(1) {
display(0,1);
display(1,2);
display(2,3);
display(3,4);
display(4,5);
display(5,6);
}
}
void display3() {
int i = 0;
for(;i<times;i++) {
display(i,0);
}
}
void interrupt test_intpt() {
times--;
if(times == 0) {
outportb(M8255_A,~0);
__asm {
MOV AH,4CH
INT 21H
}
}
}