单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

一个不用中断可立即跳出当前单片机程序运行状态的操作

  [复制链接]
跳转到指定楼层
楼主
电路原理图如下:


单片机程序源码:

#include <reg52.h>          //头文件
#include <intrins.h>
#define uint unsigned int   //宏定义
#define uchar unsigned char
sbit SW1 =P1^0;            //按键1
sbit SW2 =P1^1;            //按键2
sbit SW3 =P1^2;            //按键3
sbit SW4 =P1^3;            //按键4
uint num;
uchar huayang1[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xff};
uchar huayang2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};     
uchar huayang3[]={0xaa,0x55,0xfb,0xf7,0xef,0x39,0xf1,0xe5,0x02,0xe3,0x2c,};                                   
void delay(uint S)
{
        while(S--);
}

void ms()
{
        uint i;
        for(i=0;i<200;i++)
        {
                delay(200);
        }
}

void main()
{
        while(1)
        {
               
                if(SW1==0)   
                {
                        delay(10);   
                        if(SW1==0)   
                        {
                                while(!SW1);
                                while(1)
                                {
                                        for(num=0;num<9;num++)
                                        {
                                                P0=huayang1[num];  P2=~huayang1[num];
                                                ms();
                                        }
                                }
                        }
                }
               
                if(SW2==0)                                       
                {
                        delay(10);
                        if(SW2==0)
                        {
                                while(!SW2);
                                while(1)
                                {
                                        for(num=0;num<8;num++)
                                        {
                                                P0=0xff;  P2=0;
                                                ms();
                                                P0=huayang2[num]; P2=~(0x55 & huayang2[num]);
                                                ms();                           
                                         }


                                }
                        }
                }
                if(SW3==0)           
                {
                        delay(10);
                        if(SW3==0)
                        {
                                while(!SW3);
                                while(1)
                                {
                                        for(num=0;num<11;num++)
                                        {
                                                
                                                P0=huayang3[num]; P2=~(0xaa & huayang3[num]);
                                                ms(); ms();
                                                if(SW1==0||SW2==0||SW3==0||SW4==0)
                                                        break;
                                        }


                                }
                        }
                }        
        }
}

一个不用中断可立即跳出当前运行状态的操作.rar (17.29 KB, 下载次数: 38)



评分

参与人数 7黑币 +137 收起 理由
shuisheng60 + 10 很给力!
areyouok + 12
jinsheng7533967 + 35 赞一个!
Trump1438 + 10 很给力!
Sawardeakar + 10 很给力!
#include51.h + 10 绝世好帖!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ahshmj 发表于 2019-1-22 06:00 | 只看该作者
改变PC值不就行了吗!
回复

使用道具 举报

板凳
jifengjianwu 发表于 2019-1-22 07:00 | 只看该作者
这个程序挺好,谢谢楼主分享
回复

使用道具 举报

地板
weidoit 发表于 2019-1-22 08:46 | 只看该作者
delay的时候,其他的事件顾不上的,也能“立即”?
回复

使用道具 举报

5#
#include51.h 发表于 2019-1-22 18:25 | 只看该作者
weidoit 发表于 2019-1-22 08:46
delay的时候,其他的事件顾不上的,也能“立即”?

什么呀!怎么跟智障似的,别人附件在那你都不知道下下来验证。附件才是完整的!别人的代码思路就是能起到跳过delay,立即进入别的代码中,效果同中断一样!同楼主所说的主题是一样。别人能想到的算法估计你还真没那个能力想出来!不信你自己试试!

评分

参与人数 1黑币 +10 收起 理由
zhengchong60 + 10 很给力!

查看全部评分

回复

使用道具 举报

6#
#include51.h 发表于 2019-1-22 18:28 | 只看该作者
ahshmj 发表于 2019-1-22 06:00
改变PC值不就行了吗!

某种xx也是同你这么想的
回复

使用道具 举报

7#
Sawardeakar 发表于 2019-1-22 18:30 | 只看该作者
验证过了,很有创意!

评分

参与人数 6黑币 +105 收起 理由
Trump1438 + 15 很给力!
jinsheng7533967 + 35 很给力!
#include51.h + 15
yoxi + 15 很给力!
zhengchong60 + 10 赞一个!
shuisheng + 15 赞一个!

查看全部评分

回复

使用道具 举报

8#
Angle145 发表于 2019-1-24 16:44 | 只看该作者
建议把显示的代码更新下,不然这个是实现不了的,引起不必要的误会
回复

使用道具 举报

9#
Angle145 发表于 2019-1-24 16:46 | 只看该作者
我把他的源码贴下,显示的那个是错的:
void ms()
{
        uint i;
        for(i=0;i<200;i++)
        {
                delay(200);
                if(SW1==0||SW2==0||SW3==0||SW4==0)
                        break;
        }
}
if(SW1==0)   
                {
                        delay(10);   
                        if(SW1==0)   
                        {
                                while(!SW1);
                                while(1)
                                {
                                        for(num=0;num<9;num++)
                                        {
                                                P0=huayang1[num];  P2=~huayang1[num];
                                                ms();
                                                if(SW1==0||SW2==0||SW3==0||SW4==0)
                                                        break;
                                        }
                                        if(SW1==0||SW2==0||SW3==0||SW4==0)
                                                break;
                                }
                        }
                }
其他按键同理

评分

参与人数 1黑币 +35 收起 理由
就你?呸! + 35

查看全部评分

回复

使用道具 举报

10#
Trump1438 发表于 2019-1-24 19:39 | 只看该作者
Angle145 发表于 2019-1-24 16:46
我把他的源码贴下,显示的那个是错的:
void ms()
{

没有必要作什么更新,是要学的自然会找附件,不想学的何苦自扰!

评分

参与人数 1黑币 +8 收起 理由
sheng7533967 + 8 很给力!

查看全部评分

回复

使用道具 举报

11#
 楼主| 刀刀见红 发表于 2019-1-25 16:12 | 只看该作者
Trump1438 发表于 2019-1-24 19:39
没有必要作什么更新,是要学的自然会找附件,不想学的何苦自扰!

Mr. Trump, you said it very well.

评分

参与人数 6黑币 +105 收起 理由
sheng7533967 + 15
shuisheng60 + 10 很给力!
jinsheng7533967 + 35 赞一个!
Trump1438 + 15 赞一个!
yoxi + 15 很给力!
Sawardeakar + 15 很给力!

查看全部评分

回复

使用道具 举报

12#
sheng7533967 发表于 2019-2-7 00:45 | 只看该作者
好样的,思路不错

评分

参与人数 1黑币 +35 收起 理由
areyouok + 35

查看全部评分

回复

使用道具 举报

13#
shuisheng60 发表于 2019-2-7 00:47 | 只看该作者
很好,收下了
回复

使用道具 举报

14#
就你?呸! 发表于 2019-2-11 13:37 | 只看该作者
很好的创意

评分

参与人数 1黑币 +35 收起 理由
jinsheng7533967 + 35

查看全部评分

回复

使用道具 举报

15#
22229 发表于 2019-2-11 16:01 | 只看该作者
这个程序挺好,谢谢楼主分享
回复

使用道具 举报

16#
axkf 发表于 2019-2-11 17:27 | 只看该作者
这个程序挺好,谢谢楼主分享
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

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