/*
* Exp_9: 8254
* author: liu abin
* all right reserved
**/
#include "conio.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,0x00}; // 0~f; 16 for none
u8 table[] = {0x00,0x01,0x02,0x04,0x08,0x10,0x20}; // 1~6
u8 block[] = {16,16,16,16,16,16};
u16 M8255_SET = 0x0606;
u16 M8255_A = 0x0600;
u16 M8255_B = 0x0602;
u16 M8255_C = 0x0604;
void delay(u16 time);
u8 getCode(void);
void frametime(void);
void display(u8 port, u8 num);
void converCode(void);
void addNum(u8 num);
u8 cmd_8255 = 0x89; //10001001
u8 code = 0;
u8 colmask[] = {0x0f,0x0e,0x0d,0x0b,0x07,0x0f,0x0f}; // 1...4 cols 5.6for display
u8 colindex = 0;
u8 pivot = 6;
u8 direct = -1;
void main() {
outportb(M8255_SET,cmd_8255);
while(1) {
while(getCode() == 0) {
//displayBlock();
}
converCode();
addNum(code);
while(getCode() == 1)
; //
//outportb(M8255_B,code);
}
}
void delay(u16 time) {
int i = 0,j=0;
for(;i<time;i++) {
for(;j<10000;j++)
;
}
}
u8 getCode() {
u8 temp = 0x0f;
u8 i = 1;
code = 0x0f;
colindex = 0;
for(;i<=6;i++) {
outportb(M8255_A,~table[i]);
code = inportb(M8255_C);
//display cccccccccccccccccccccccccccccccccccccccccccc
outportb(M8255_B,number[block[i-1]]);
frametime();
if(code != 0x0f) {
temp = code;
colindex = i;
}
}
if(temp != 0x0f) {
code = temp;
code = (~code) & 0x0f;
return 1;
}
return 0; // no input
}
void frametime() {
int j = 0;
for(;j<1000;j++)
;
}
void display(u8 port, u8 num) {
outportb(M8255_B, number[num]);
outportb(M8255_A, ~table[port]);
frametime();
}
void converCode() {
if(code == 0x01)
code = 0;
else if(code == 0x02)
code = 4;
else if(code == 0x04)
code = 8;
else
code = 0x0c;
code += colindex;
code--;
}
void addNum(u8 num) {
if(num == 0x0f) {
display(0,15);
__asm{
MOV AX,4CH
INT 21H
}
}
// block[0] = block[1];
// block[1] = block[2];
// block[2] = block[3];
// block[3] = block[4];
// block[4] = block[5];
// block[5] = num;
block[5] = block[4] = block[3] = block[2] = block[1] = block[0] = 16;
block[pivot-1] = num;
pivot += direct;
if(pivot == 0) {
pivot = 1;
direct = 1;
}
else if(pivot == 7) {
pivot = 6;
direct = -1;
}
}
吉林大学微机接口实验代码(九)
最新推荐文章于 2022-11-06 16:41:03 发布