完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序下载到单片机上,第一行(0,1,2,3)不能显示,其余都正常,,但是其他行的我是按第一行的复制过去的,为什么其他的都行,第一行的却不行呢?求大神打救啊!!
#include |
|
相关推荐
7个回答
|
|
晕 这不是郭天祥的范例么。看他的书啊。
|
|
|
|
楼主细心一点看看是不是 哪个代码抄错了!
#include #define uint unsigned int #define uchar unsigned char //***it dula=P2^6; //***it wela=P2^7; //***it key1=P3^4; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0}; uchar num,temp,num1; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uchar keyscan(); void display(uchar aa); void main() { num=17; P2=0; P0=0; P0=0xc0; while(1) { display(keyscan()); } } void display(uchar aa) { P2=0; P0=table[aa-1]; } uchar keyscan() { P1=0xfe; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xee:num=1; break; case 0xde:num=2; break; case 0xbe:num=3; break; case 0x7e:num=4; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xfd; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xed:num=5; break; case 0xdd:num=6; break; case 0xbd:num=7; break; case 0x7d:num=8; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xfb; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xeb:num=9; break; case 0xdb:num=10; break; case 0xbb:num=11; break; case 0x7b:num=12; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } P1=0xf7; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xe7:num=13; break; case 0xd7:num=14; break; case 0xb7:num=15; break; case 0x77:num=16; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } } } return num; } 我用的是while来判断的,数码管显示键值,P1口是键盘扫描,P0口和P2口是数码管扫描。 |
|
|
|
while判断的缺点是按键按下的时候数码管不亮了!
|
|
|
|
嗯嗯,谢谢
|
|
|
|
程序有点多给你一个简单点的程序练练,希望对你有用
/*----------------------------------------------- 名称:矩阵键盘 内容:通过反转法循环扫描矩阵键盘,并通过数码管显示数据 ------------------------------------------------*/ #include #define uchar unsigned char #define uint unsigned int uchar const EL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0-F /*----------------------------------------------- 延时程序 ------------------------------------------------*/ void delay(uint j) { while(j--); } /*----------------------------------------------- 键盘扫描程序 ------------------------------------------------*/ uchar keyscan() { uchar cord_h,cord_l; P0=0X00; P2=3; P3=0X0F; cord_h=P3&0X0F; if(cord_h!=0x0f) { delay(200); if(cord_h!=0x0f) { cord_h=P3&0X0F; P3=cord_h|0xf0; cord_l=P3&0xf0; return(cord_h+cord_l); } }return(0xff); } /*----------------------------------------------- 主程序 ------------------------------------------------*/ void main () { uchar key;  2=0;  0=0X00; while(1) { key=keyscan(); //调用键盘扫描, switch(key) { case 0xee0=EL[0];break;//0按下相应的键显示相对应的码值 case 0xde0=EL[1];break;//1 按下相应的键显示相对应的码值 case 0xbe0=EL[2];break;//2 case 0x7e0=EL[3];break;//3 case 0xed0=EL[4];break;//4 case 0xdd0=EL[5];break;//5 case 0xbd0=EL[6];break;//6 case 0x7d0=EL[7];break;//7 case 0xeb0=EL[8];break;//8 case 0xdb0=EL[9];break;//9 case 0xbb:P0=EL[10];break; case 0x7b:P0=EL[11];break; case 0xe7:P0=EL[12];break; case 0xd7:P0=EL[13];break; case 0xb7:P0=EL[14];break; case 0x77:P0=EL[15];break; } } } |
|
|
|
呵呵,你把插在电脑上的USB下载线拔了,就一切正常了.没骗你.因为第一行是TX还是RX,只要连在电脑上,你就肯定失效.这是硬件问题
|
|
|
|
真的耶 == 高手,膜拜呀!!!!
|
|
|
|
只有小组成员才能发言,加入小组>>
3126 浏览 9 评论
2826 浏览 16 评论
3337 浏览 1 评论
8708 浏览 16 评论
3930 浏览 18 评论
9545浏览 3评论
882浏览 3评论
453浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
453浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2174浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-18 19:03 , Processed in 1.052830 second(s), Total 88, Slave 69 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号