完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 noahzzz 于 2016-8-1 20:18 编辑
向各位高玩大大求教一个关于51单片机的问题题目如下,按下16个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,第二个显示4...以此类推直到最后一个按键显示256(即16的平方)。 本人编了两段程序,其中一段程序最后一个按键成功显示了256,另一个程序最后一个按键显示的是000。但是两段程序是一模一样,所以很纳闷 请各位指点一二。 //有256 #include #define uint unsigned int #define uchar unsigned char ***it dula=P2^6; ***it wela=P2^7; uint x,num; uchar temp; uchar code table[]={ //显示数据编码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,}; void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. { //delay(500);大约延时500ms. uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uint keyscan(); void display(uchar bai,uchar shi,uchar ge); void main() { while(1) { x=keyscan(); display(x/100,x%100/10,x%10); } } void display(uchar bai,uchar shi,ucharge) //位数 { dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1); dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1); } uint keyscan() { P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xee:num=1; break; case0xde:num=4; break; case0xbe:num=9; break; case0x7e:num=16; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xed:num=25; break; case0xdd:num=36; break; case0xbd:num=49; break; case0x7d:num=64; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfb; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xeb:num=81; break; case0xdb:num=100; break; case0xbb:num=121; break; case0x7b:num=144; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xf7; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xe7:num=169; break; case0xd7:num=196; break; case0xb7:num=225; break; case0x77:num=256; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } return num; } //没有256 #include #defineuchar unsigned char //宏定义 #define uint unsigned char ***it dula=P2^6; ***it wela=P2^7; uint x,num; uchar temp; uchar code table[]={ //显示数据编码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,}; void delay(uint z) //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms. { //delay(500);大约延时500ms. uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uint keyscan(); void display(uchar bai,uchar shi,uchar ge); void main() { while(1) { x=keyscan(); display(x/100,x%100/10,x%10); } } void display(uchar bai,uchar shi,ucharge) //显示三位数 { dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1); dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1); dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1); } uint keyscan() { P3=0xfe; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xee:num=1; break; case0xde:num=4; break; case0xbe:num=9; break; case0x7e:num=16; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xed:num=25; break; case0xdd:num=36; break; case0xbd:num=49; break; case0x7d:num=64; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfb; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xeb:num=81; break; case0xdb:num=100; break; case0xbb:num=121; break; case0x7b:num=144; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xf7; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp=temp&0xf0; while(temp!=0xf0) { temp=P3; switch(temp) { case0xe7:num=169; break; case0xd7:num=196; break; case0xb7:num=225; break; case0x77:num=256; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } return num; } |
|
相关推荐
1个回答
|
|
已经找到问题了 我定义错了
|
|
|
|
只有小组成员才能发言,加入小组>>
782浏览 0评论
145浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 01:43 , Processed in 1.180775 second(s), Total 86, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号