Deepseek给出的8255显示例程 - 实践

#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;}

posted @ 2025-07-22 19:07  yfceshi  阅读(7)  评论(0)    收藏  举报