完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 leidong043 于 2015-11-29 18:01 编辑
switch(CS){ case 0: P2=0x00; CS++;P3=A[1];break; case 1: P2=0x04; CS=0;P3=A[2];break; default: break; } 数组为什么不能用呢 |
|
相关推荐
11个回答
|
|
数组定义和初始化确定没问题?error贴上来
|
|
|
|
本帖最后由 leidong043 于 2015-11-29 17:14 编辑
没有错误。 就是P3没有什么变化 unsigned int A[]={0x3f,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07, 0x7F,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; 然后给数组加上code 可以正常使用了。 unsigned int code A[]={0x3f,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07, 0x7F,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; 随后将数组下标改成变量又不正常。 th=temp>>4; tl=temp&0x0f; P3=0x00; switch(CS){ case 0: P2=0x00; CS++;P3=A[th];break; case 1: P2=0x04; CS=0;P3=A[tl];break; default: break; } th 和tl 为 char型。 |
|
|
|
//以下为完成程序
//矩阵按键键值显示到数码管上 #include #include #define uint8 unsigned char #define uint16 unsigned int uint8 temp; uint8 code SEG[]={0x3f,0x06,0x5B,0x4F, 0x66,0x6D,0x7D,0x07, 0x7F,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; uint8 key_seach(){ uint8 temp1; P0=0x0f; temp1=P0; P0=temp1|0xf0; temp1=P0; return temp1; } main(){ uint8 th,tl,CS=0; while(1){ temp=key_seach(); //将键盘扫描的键值返回到temp th=temp>>4; tl=temp&0x0f; P3=0x00; switch(CS){ case 0: P2=0x00; CS++;P3=SEG[th];break; case 1: P2=0x04; CS=0;P3=SEG[tl];break; default: break; } } } 有不足之处请之处 |
|
|
|
temp初始值是多少 |
|
|
|
|
|
|
|
你先用软件的仿真观察temp,temp,th,tl,这几个变量运行时间数据值到底有没有发生变化,一步一步的仿真,不要跳过去,确定一下是不是这几个变量没有就没有被赋值,还有注意左移右移时间数据高低位的补齐
|
|
|
|
渴死的鱼儿 发表于 2015-11-29 17:50 恩 解决了。。。。。。。 |
|
|
|
查表法的简单按键扫描,你参考一下
#include #include #define uint unsigned int #define uchar unsigned char /************************************************************** * 名称:Key_Tab() * 功能:P1外接4×4按键, 按照查表法读出键值 * 返回:按键值0~15/如无键按下, 返回16 ***************************************************************/ uchar Key_Tab(void) { uchar code K_Tab[4][4] = { 0xee, 0xde, 0xbe, 0x7e, 0xed, 0xdd, 0xbd, 0x7d, 0xeb, 0xdb, 0xbb, 0x7b, 0xe7, 0xd7, 0xb7, 0x77}; uchar temp1 = 0xfe, temp2, i, j; for(i = 0; i < 4; i++) { //扫描低四位 P1 = temp1; //输出一行0 temp2 = P1; //马上就读入 if((temp2 & 0xf0) != 0xf0) { //如果有键按下 for(j = 0; j < 4; j++) //就扫描高四位 if(temp2 == K_Tab[i][j]) //查表 return i * 4 + j; //查到了就返回按键的数值 } else temp1 = _crol_(temp1, 1); } return 16; //没有查到,返回按键松开的代码 } |
|
|
|
是不是返回的变量没有被赋值
|
|
|
|
恩 我看到有些产品中 按键长按,短按, 长时间没有按键动作时退出设置的这种情况,是怎么做到了。 |
|
|
|
以最初的错误的程序调试时,P3口确实没有任何变化。 给数组加上code 调试时,P3口有输出。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
LDO线性稳压器产生了模拟电源与数字电源,模拟电源去给运放供电,他们的地是不是同一个地?
1528 浏览 2 评论
1398 浏览 1 评论
1053 浏览 0 评论
2497 浏览 1 评论
ad把一个15mm*1.5mm的灯放到直径15mm的圆形pcb板上,可以实现吗
2250 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 14:08 , Processed in 1.017319 second(s), Total 96, Slave 79 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号