吉林大学微机接口实验代码(八)

  • 辣鸡微机实验

  • 数码管与中断
  • 这部分代码似乎有问题,如上机有问题请留言
#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{
	    /*MOV AX, OFFSET test_intpt  // mark the func
	    MOV SI, 0038H
	    MOV [ES:SI], AX
	    MOV AX, CS
	    MOV SI, 003AH
	    MOV [ES:SI], AX*/
	    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 // OCW1
	    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;  // problem here
		for(;i>=0;i--) {
			display(i,numb);
			delay(shorttime);
		}
		// display(0,numb); // worked well
		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() {
	//display(0,15);
	times--;
	if(times == 0) {
		outportb(M8255_A,~0);
		__asm {
			MOV AH,4CH
			INT 21H
		}
	}	
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值