单片机C程序怎么一个慢一个快啊?

来源:百度知道 编辑:UC知道 时间:2024/06/28 17:25:17
先简要说说我的硬件吧,想做一个用键盘扫描控制步进电机的停止,正转,反转,正向加速减速,反向加速减速,P2口接电机,P3口键盘扫描,7个键排2行,第一行4个,第二行3个,列接P3.0-3.3,行接P3.4和P3.5
现在先编的键盘扫描这部分,2个程序,我看第一个比较啰唆就改成了第2种,可扫描起来明显比第1个慢特多,谁可以指点一下为什么啊?
第1个程序如下
#include <AT89X51.H>
unsigned char code table[]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9,0x00,0xf1,0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0x00};
unsigned char temp;
unsigned char key;
unsigned char i,j,k,s;
sbit p3_4=P3^4;
sbit p3_5=P3^5;
void main(void)
{
while(1)
{
P3=0xff;
p3_4=0;
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
for(i=50;i>0;i--)
for(j=200;j>0;j--);
temp=P3;
temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P3;
temp=temp&0x0f;
switch(temp)
{
case 0x0e:
key=1;
break;
case 0x0d:
key=2;
break;
case 0x0b:

//下面是第二个程序,是你自己改的吧?呵呵有如下问题

。。。
P3=0xdf; //没问题
temp=P3; //读低四位,
if(temp!=0xdf) //低四位有变化,则
{ *
for(i=50;i>0;i++) *
for(j=200;j>0;j++); *
if(temp!=0xdf) *
【问题1】 没有重新读入端口值,所以这段程序白扯!起不到去抖的作用。 应该在两个延时后面再加上一个temp=P3;

【问题2】(导致扫描慢的原因),就是你用了i++,和j++。正确都应该是“i--,j--”,用++时只有在i、j自增到值溢出的情况才会满足i<=0,j也一样*/
{
switch(temp)
{
case 0xdd:
。。。

都是小问题,改过来就好了,嘿嘿~

你软件仿真下看下运行时间就知道了