找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1890|回复: 4
打印 上一主题 下一主题
收起左侧

单片机按键暂停程序,几个地方卡住,求大佬指点!感激不尽

[复制链接]
跳转到指定楼层
楼主
ID:497954 发表于 2019-3-25 15:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何实现按下k2按键暂停所在程序,按下k1按键又恢复程序,长按k2关闭程序
#include "reg52.h"   
#include "intrins.h"
typedef unsigned int u16;  
typedef unsigned char u8;
u16 scale;
u16 count = 0;
sbit k1=P3^2;  
sbit k2=P3^3;  
sbit led1=P2^0;  
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;
sbit led5=P2^4;
sbit pwm = P1^0;

/*timer0() interrupt 1   
{ static  u16   tt ;   
tt++;   
if(tt==10)   
{ tt=0;  
led5=0;  
}
if(scale==tt)  
led5=1;  

}
*/

void delay1(u16 i)
{
while(i--);
}

void delay2(u16 i)
{
        u8 a;
        for(a=0;a<i;a++)
        {
                TMOD = 0x00;
                TH0 = (65536-50000)/256;
                TL0 = (65536-50000)%256;
                TR0=1;
                while(!TF0);
                TF0=0;
        }
               
}


void light1()
{
        if(count == 0)led1=0;
        if(count == 0)delay2(20);
        if(count == 0)led1 = ~led1;
}
//Ï′μó£¨μç»úÔË×a£©
void light2()
{
        if(count == 0)led5 = ~led5;
        if(count == 0)led3 = ~led3;
        if(count == 0)delay2(20);
        if(count == 0)led3 = ~led3;
        if(count == 0)delay2(20);
        if(count == 0)led4 = ~led4;
        if(count == 0)delay2(20);
        if(count == 0)led4 = ~led4;
        if(count == 0)delay2(20);
        if(count == 0)led3 = ~led3;
        if(count == 0)delay2(20);
        if(count == 0)led3 = ~led3;
        if(count == 0)delay2(20);
        if(count == 0)led4 = ~led4;
        if(count == 0)delay2(20);
        if(count == 0)led4 = ~led4;
        if(count == 0)led5 = ~led5;
        if(count == 0)delay2(20);
        
}

void light3()
{
        if(count == 0)led2 = ~led2;
        if(count == 0)delay2(20);
        if(count == 0)led2 = ~led2;

}
//ÆˉÏ′
void light4()
{
        if(count == 0)led5 = ~led5;
        if(count == 0)led1 = ~led1;
        if(count == 0)led3 = ~led3;
        if(count == 0)delay2(20);
        if(count == 0)led3 = ~led3;
        if(count == 0)delay2(20);
        if(count == 0)led4 = ~led4;
        if(count == 0)delay2(20);
        if(count == 0)led4 = ~led4;
        if(count == 0)delay2(20);
        if(count == 0)led1 = ~led1;

}
/*
void light5()
{   

u16 n;     
TMOD=0x02;  
TH0=0x06;   
TL0=0x06;   
TR0=1;   
ET0=1;   
EA=1;     
while(1)
{for(n=0;n<5000;n++);  
scale++;   
}
        
}
*/
//éá˸
void light6()
{
        while(1)
        {
                if(count == 0)led1 = ~led1;
                if(count == 0)led2 = ~led2;
                if(count == 0)delay2(20);
                if(count == 0)led1 = ~led1;
                if(count == 0)led2 = ~led2;
                if(count == 0)delay2(20);
        }
        
}

void key1()
{
        if(k1==0)   
        {
                delay1(1000);   
                if(k1==0)  
                {
               
                        light1();
                        light2();
                        light3();
                        light4();
                        /*light5();*/
                        light6();
               
                }
                while(!k1);  
        }  
}
void key2()
{
        if(k2==0)   
        {
                TH0=(65536-60000)/256;
                TL0=(65536-60000)%256;  
                if(k2==0)  
                {   
                                count = 1;
                                while(1)
                                {
                                        key1();
                                }
                        
                                
                }
         
        }  
}

stop()interrupt 1
{
        key2();
}


void main()
{
        led1 = 1;
        led2 = 1;
        led3 = 1;
        led4 = 1;
        led5 = 1;

        TMOD=0x01;
        TH0=(65536-60000)/256;
        TL0=(65536-60000)%256;
        TR0=1;
        EA=1;
        ET0=1;
        while(1)
        {
                key1();        
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:466164 发表于 2019-3-25 22:33 | 只看该作者
TR0=1
暂停就是TR0=0;不改变计数值,TR0=1继续执行呵呵!不太懂。
回复

使用道具 举报

板凳
ID:337069 发表于 2019-3-26 07:49 | 只看该作者
本帖最后由 chtyise 于 2019-3-26 09:28 编辑

按一次key2以后一直在中断里面执行
回复

使用道具 举报

地板
ID:497954 发表于 2019-4-1 15:06 | 只看该作者
7358655 发表于 2019-3-25 22:33
TR0=1
暂停就是TR0=0;不改变计数值,TR0=1继续执行呵呵!不太懂。

谢谢您,我试一试能不能实现。
回复

使用道具 举报

5#
ID:497954 发表于 2019-4-1 15:07 | 只看该作者
chtyise 发表于 2019-3-26 07:49
按一次key2以后一直在中断里面执行

这个好像不行,中断程序不能太长,不然就会有很多问题,不过谢谢你啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表