我用的是8952单片机,这个程序的功能是实现键盘输入显示功能,像电话机那样,P0口是键盘口,P1口是段码口,P2.0~ P2.3是动态扫描口,共用了四个数码管, 问题在于我将它放入proteus中仿真时,所有的管子只显示同一个数字,不知道问题在哪???请高手指点迷津。小弟先行谢过了。 #include<reg51.h> #include<stdio.h> Uart_Init(); int nKeyNumber; sbit P00=0x80; sbit P01=0x81; sbit P02=0x82; sbit P03=0x83; sbit P04=0x84; sbit P05=0x85; sbit P06=0x86; sbit P07=0x87; sbit P32=0xb2; char Table[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};段码 sbit P20=0xa0; sbit P21=0xa1; sbit P22=0xa2; sbit P23=0xa3; char TelephoneNu[12]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};初始号码 Updata_led(nKeyNumber);有键按下时运行函数 void Data_led();显示函数 main() { while(1) { nKeyNumber=0xff; P2=0x00; P00=0; P01=0; P02=0; P03=0; EX0=1; EA=1; if(nKeyNumber==0xff) Data_led(); else { Updata_led(nKeyNumber); Data_led(); nKeyNumber=0xff; } } } void int0() interrupt 0 using 0 中断 { int i,j; int Pin1; EX0=0; for(i=0;i<4;i++) for(j=0;j<4;j++) { P0=0xff&(~(0x01<<(3-i))); Pin1=P0; if(((Pin1>>(4+j))&0x01)==0) {nKeyNumber=i+j*4; return; } } EX0=1; } Updata_led(nKeyNumber)有键按下时将第一位放入TelephoneNu[0]中其于的依次移位 { int k,n; n=10; for(k=11;k>0;k--) { TelephoneNu[n+1]=TelephoneNu[n]; --n; } TelephoneNu[0]=nKeyNumber; } void Data_led() 动态扫描显示 { int Number; P20=1; Number=TelephoneNu[0]; P1=Table[Number]; P20=0; P21=1; Number=TelephoneNu[1]; P1=Table[Number]; P21=0; P22=1; Number=TelephoneNu[2]; P1=Table[Number]; P22=0; P23=1; Number=TelephoneNu[3]; P1=Table[Number]; P23=0; } |