![]()
#include #include #include // 定义8255端口地址 (根据原理图译码确定)#define PORT_8255_A 0x8000 // PA端口地址#define PORT_8255_B 0x8001 // PB端口地址#define PORT_8255_C 0x8002 // PC端口地址#define PORT_8255_CTRL 0x8003 // 控制寄存器地址 // 数码管段码表 (共阴极)unsigned char seg_codes[] = { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F // 9}; // 延时函数void delay(unsigned int ms) { for (unsigned int i = 0; i < ms; i++) { for (unsigned int j = 0; j < 1000; j++) { // 空循环延时 } }} // 初始化8255void init_8255() { // 控制字: 10000001 (0x81) // A口输出, B口输出, C口输出 outportb(PORT_8255_CTRL, 0x81);} // 显示8位数字void display_numbers() { unsigned char digits[] = {1, 2, 3, 4, 5, 6, 7, 8}; // 要显示的数字 while (!kbhit()) { // 按任意键退出 for (int i = 0; i < 8; i++) { // 设置位选 (选中当前位) outportb(PORT_8255_B, ~(1 << i)); // 设置段码 outportb(PORT_8255_A, seg_codes[digits[i]]); // 延时保持显示 delay(1); // 关闭当前位显示 (消除鬼影) outportb(PORT_8255_A, 0x00); } }} int main() { init_8255(); // 初始化8255 display_numbers(); // 显示数字 // 程序结束前关闭所有显示 outportb(PORT_8255_A, 0x00); // 关闭段选 outportb(PORT_8255_B, 0xFF); // 关闭位选 return 0;}