切换到宽版
爱科技/爱创意/爱折腾;电子/数码爱好者的家!欢迎访问新版数码之家网站
  • 1292阅读
  • 5回复

[C51]请高手进来帮忙看看这个是什么问题 [复制链接]

上一主题 下一主题
离线数码家园
 

发帖
5228
M币
16486
专家
31
粉丝
540
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-05-31
网上抄的一个定时程序,当时编译通不过,在elecfunwb朋友的指点下,编译通过了,但是上电路的时候又没显示,折腾了好久,数码管总算点亮了,时钟也走时了。可是按键无反应,接线应该是对的,由于是小白,折腾好久了也解决不了,所以请高手帮忙看看是什么问题,先在此感谢了!


这是矩阵键盘电路图
下面是矩阵键盘程序

/************矩阵键盘扫描,同时可进行数码管各位的+- ******************/
void matrixkeyscan() //如何确定时间设定时数码管显示的数字是否会自动+1  
{
/*当两行H1、H2重新赋值时存在冲突, 解决办法为:H1=1时H2=0,H2=1时H1=0 或者对P3口进行整体赋值*/  
uchar temp;  /***扫描第一行**/  
H1=0;H2=1;//扫描第一行  
temp=P1;  
temp=temp|0x1f; //读取L1、L2、L3的状态
/***判断哪个键摁下***/  
if(temp!=0xff) //判断是否有键摁下  
{    
delay_ms(10); //延时    
H1=0;H2=1; //扫描第一行//重新读取    
temp=P1;    
temp=temp|0x1f; //读取L1、L2、L3的状态    
if(temp!=0xff) //消抖    
{  
switch(temp) //判断哪个键摁下  
{  
case 0x7f:{key=3;k3++;k3=k3%3/*k=0~2*/;              
TR0=0/*时间设定时定时器停止*/;
}
break;
  case
0xbf:{key=2;k3=0;k2++;if(k2==1){num1=0;TR1=1;
}
}
break;  
case
0xdf:key=1;
break;  
}
//键1 2 3  分别摁下  
clk_weixuan();  
while(temp!=0xff)  //按键释放才会跳出循环  
{      
H1=0;H2=1; //扫描第一行//重新读取      
temp=P1;      
temp=temp|0x1f;//读取L1、L2、L3的状态  
}    
}  
}    
/***扫描第二行**/  
H2=0;H1=1; //扫描第二行  
temp=P1;  
temp=temp|0x1f; //读取L1、L2、L3的状态
/***判断哪个键摁下***/  
if(temp!=0xff)//判断是否有键摁下  
{    
delay_ms(10);//延时    
H2=0;H1=1;//扫描第二行//重新读取    
temp=P1;    
temp=temp|0x1f;//读取L1、L2、L3的状态  
if(temp!=0xff)//消抖    
{  
switch(temp)//判断哪个键摁下  
{  
case 0x7f:{key=6;k6++;if(k6==2)k6=0;}break;  
case 0xbf:{key=5;k5++;/*1 2 3 4 */if(k5==5)k5=1;num1=0;TR1=1;
/*内次按下K5 都会显示2s的回路(A/B/C/D),故需要打开定时器且计数清零
*/
}
break;  
case 0xdf:key=4;break;
} //键 4 5 6  分别摁下  
clk_weixuan();  
while(temp!=0xff)//按键释放才会跳出循环  
{      
H2=0;H1=1;//扫描第二行//重新读取      
temp=P1;      
temp=temp|0x1f;//读取L1、L2、L3的状态
   }    
}  
}
}
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖提到的人: @elecfunwb
本帖最近打赏记录:共1条打赏M币+13
小李飞拆修 M币 +13 歡迎探討 2018-08-02
离线zandx

发帖
1053
M币
3172
专家
0
粉丝
18
只看该作者 1楼 发表于: 2018-05-31
delay_ms()
这个延时函数是不是得根据晶振频率自己定义写出来,而不是直接调用?(也没准你没贴出来)
51单片机的几种精确延时
https://blog.csdn.net/feike24/article/details/52357772

我瞎猜的
本帖最近打赏记录:共1条打赏M币+5
数码家园 M币 +5 熱心會員 2018-05-31
离线数码家园

发帖
5228
M币
16486
专家
31
粉丝
540
只看该作者 2楼 发表于: 2018-05-31
回 zandx 的帖子
zandx:delay_ms()
这个延时函数是不是得根据晶振频率自己定义写出来,而不是直接调用?(也没准你没贴出来)
51单片机的几种精确延时
https://blog.csdn.net/feike24/article/details/52357772
....... (2018-05-31 08:35) 回 zandx 的帖子

void delay_ms(uint xms)      //*延时子函数程序*/
{        
uint i,j;  
    for(i=xms;i>0;i--)    
    for(j=250;j>0;j--); //*该层循环延时约1ms*/
这里有一个延时子函数,具体是不是你说的我也不懂
本帖最近打赏记录:共1条打赏M币+2
bhzjr M币 +2 熱心會員 2018-06-11
离线bg4rff

发帖
1518
M币
1237
专家
8
粉丝
32
只看该作者 3楼 发表于: 2018-05-31
图上线接在P1.1-P1.3,如果改成接在P1.5-P1.7程序无须修改
否则

temp=temp|0x1f; //读取L1、L2、L3的状态
都改成 temp=temp|0xF1;
是都改,有好几处

这三个  
case 0x7f:
case 0xbf:
case 0xdf:
改成
case 0xf7:
case 0xfb:
case 0xfd:
这每个有两处修改
本帖最近打赏记录:共3条打赏M币+25专家+1
小李飞拆修 M币 +5 熱心助人 2018-08-02
数码家园 专家 +1 非常感谢!按您指点的接线,可以使用了。在此感谢!!! 2018-05-31
数码家园 M币 +20 非常感谢!按您指点的接线,可以使用了。在此感谢!!! 2018-05-31
离线18043416332
发帖
6
M币
0
专家
0
粉丝
0
只看该作者 4楼 发表于: 2018-06-30
可以加我好友吗 微信18043416332我有问题想请教你麻烦了
离线数码家园

发帖
5228
M币
16486
专家
31
粉丝
540
只看该作者 5楼 发表于: 2018-06-30
回 18043416332 的帖子
18043416332:可以加我好友吗 微信18043416332我有问题想请教你麻烦了 (2018-06-30 11:14) 回 18043416332 的帖子

朋友,请教我的话就高台我了
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个