预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

I/O端口输出1的端口与输出0的端口对接的时候会检验出原来的端口是0 第一个,这个是错误程序 #include<reg52.h> voiddelay1ms(unsignedinti) //延时函数 { unsignedcharj; while(i--) { for(j=0;j<115;j++) //1ms基准延时程序 { ; } } } voidmain() { while(1) { P1=0xf0; //建立初始状态,每一行赋值0,每一列赋予1 unsignedchars[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //数码管灯 unsignedintl;//分别代表作列与行 unsignedintr; if(P1!=0xf0)//检验有没有按键被按下 { delay1ms(15); //避免前沿抖动,延时大约15ms switch(P1) //检验有没有键盘被按下 { //如果按下了就检验是哪一列被按下了 case0x70: //p1^7被按下 l=4; case0xB0: //p1^6被按下 l=3; case0xD0: //p1^5被按下 l=2; case0xE0: //p1^4被按下 l=1; default: break; } P1=0xf;、//每一列赋予1,每一行赋予0 switch(P1) //检验哪一行的按键被按下 { case0xE: //p1^0被按下 r=1; case0xD: //p1^2被按下 r=2; case0xB: //p1^3被按下 r=3; case0x7: r=4; //p1^4被按下 default: break; } //已经知道哪一个按键被按下 r=r*l;//得到的数在数值上等于要显示的数目 P1=s8[r]//数码管亮 } delay1ms(15);//避免后延抖动 } } 错误的地方在于 P1=0xf;、//每一列赋予1,每一行赋予0 switch(P1) //检验哪一行的按键被按下 { 这是因为如果没有再次判断当P1!=0XF的时候,就可能出现没有符合case之中的情况而直接运行default这种情况。 这个是错的 改正版也是错的 改正版 #include<reg52.h> #defineucharunsignedchar #defineuintunsignedint unsignedcharcodes8[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; voiddelay1ms(uinti) { ucharj; while(i--) { for(j=0;j<115;j++) //1ms基准延时程序 { ; } } } voidmain() { while(1) { uintl;//分别代表作列与行 uintr; P1=0xf0; //建立初始状态,每一行赋值0,每一列赋予1 if(P1!=0xf0)//检验有没有按键被按下 { delay1ms(15); //避免前沿抖动,延时大约15ms switch(P1) //检验有没有键盘被按下 { //如果按下了就检验是哪一列被按下了 case(0x70): //p1^7被按下 l=4; break; case(0xB0): //p1^6被按下 l=3; break; case(0xD0): //p1^5被按下 l=2; break; case(0xE0): //p1^4被按下 l=1; break; default: break; } P1=0xf; switch(P1) //检验哪一行的按键被按下 { case(0xE): //p1^0被按下 r=1;