一 硬件
![]()
![]()
2.测试程序
#define ADR_273 0x0200 #define ADR_244 0x0400 #define LED_PORT 0x800 #define DY1_PORT 0x504 #define DY2_PORT 0x506 #define ADR_245 0x500 void outp(unsigned int addr, char data) // 输出一字节到I/O端口 { __asm { mov dx, addr mov al, data out dx, al } } char inp(unsigned int addr) // 从I/O端口输入一字节 { char result; __asm { mov dx, addr in al, dx mov result, al } return result; } char segTable[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; char end_flag[5]={0x55,0x55,0x55,0x55,0x55}; // 段码顺序:dp g f e d c b a (dp为小数点) // 共阳极编码表 (0点亮,1熄灭) unsigned char cnt_run=0x00; void disp() { static int i=0; //for(i=0;i<5000;i++); // for(i=0;i<5000;i++); outp(DY1_PORT, segTable[i]); outp(DY2_PORT, segTable[i++]); if(i>9) { i=0; } } void main(void) /*检测按键状态并由LED发光二极管显示, 若按键闭合对应LED发光二极管点亮, 若按键断开对应LED发光二极管灭.*/ { int i=0; unsigned char button_state=0x00; while (1) { //char button_state; int i; cnt_run++; if(cnt_run>99) { cnt_run=0; } button_state=inp(ADR_245)&0x0f; if(button_state!=0x0f) { cnt_run=0; } //int i=0; for(i=0;i<5000;i++); for(i=0;i<5000;i++); outp(LED_PORT, 0x00); //outp(DY1_PORT, segTable[5]); //outp(DY2_PORT,segTable[6]); for(i=0;i<5000;i++); for(i=0;i<5000;i++); outp(LED_PORT, button_state); //disp(); outp(DY1_PORT, segTable[cnt_run/10%10]); outp(DY2_PORT, segTable[cnt_run%10]); } }
3.测试
![]()