打印
[51单片机]

求大神指点关于52单片机定时器代替delay的使用方法

[复制链接]
1405|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sengling001|  楼主 | 2016-11-11 14:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人是个新手  刚学单片机  写程序不喜欢用delay 但是定时器中断又用的不太好求大神指点 这是我写的一段程序,按键不太灵敏,但是该用delay就很灵敏,希望大神能帮我修改修改 最好给点中断使用的方法
#include<reg52.h>
#include"C52.h"
#define uchar unsigned char
uchar miao,i=0,j=0,a=0,b=0;
void main()
{
        EA=1;
        ET0=1;
        //AUXR &= 0x7F;                //定时器时钟12T模式
        TMOD &= 0xF0;                //设置定时器模式
        TMOD |= 0x01;                //设置定时器模式
        TL0 = 0x00;                //设置定时初值
        TH0 = 0xdC;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        TR0 = 1;
        for(;;)
        {
                if(K1==0)
                {
                        if(i%1==0)
                        {
                                if(K1==1)
                                {
                                        if(i>=2*100)
                                        {
                                                LED0=!LED0;
                                                i=0;
                                        }
                                        else if(i<2*100)
                                        {
                                           LED1=!LED1;
                                           i=0;
                                        }
                                }
                        }
                }
                if(K2==0)
                {
                        if(i%1==0)
                        {
                                if(K2==1)
                                {
                                        if(j>=2*100)
                                        {
                                                LED2=!LED2;
                                                j=0;
                                        }
                                        else if(j<2*100)
                                        {
                                           LED3=!LED3;
                                           j=0;
                                        }
                                }
                        }
                }
        }                                
}

void Time (void) interrupt 1
{       
        TL0 = 0x00;                //设置定时初值
        TH0 = 0xdc;
        if(!K1)
                if(i%1==0)
                {
                        if(!K1)
                        {
                                i++;
                        }
                }
        if(!K2)
                if(i%1==0)
                {
                        if(!K2)
                        {
                                j++;
                       
                        }
                }               
}

相关帖子

沙发
NE5532| | 2016-11-11 15:12 | 只看该作者
用你自己用得好的方法去处理,能解决目前问题,又不带来新问题的方法,就是最好的方法。等你熟练现有方法以后,自然有能力探索更高。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝