单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1209|回复: 19
收起左侧

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

  [复制链接]
刀刀见红 发表于 2019-1-22 02:53 | 显示全部楼层 |阅读模式
电路原理图如下:
kkk.jpg

单片机程序源码:

#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, 下载次数: 50)
回复

使用道具 举报

ahshmj 发表于 2019-1-22 06:00 | 显示全部楼层
改变PC值不就行了吗!
回复

使用道具 举报

jifengjianwu 发表于 2019-1-22 07:00 | 显示全部楼层
这个程序挺好,谢谢楼主分享
回复

使用道具 举报

weidoit 发表于 2019-1-22 08:46 | 显示全部楼层
delay的时候,其他的事件顾不上的,也能“立即”?
回复

使用道具 举报

#include51.h 发表于 2019-1-22 18:25 | 显示全部楼层
weidoit 发表于 2019-1-22 08:46
delay的时候,其他的事件顾不上的,也能“立即”?

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

评分

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

查看全部评分

回复

使用道具 举报

#include51.h 发表于 2019-1-22 18:28 | 显示全部楼层
ahshmj 发表于 2019-1-22 06:00
改变PC值不就行了吗!

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

使用道具 举报

Sawardeakar 发表于 2019-1-22 18:30 | 显示全部楼层
验证过了,很有创意!
回复

使用道具 举报

Angle145 发表于 2019-1-24 16:44 | 显示全部楼层
建议把显示的代码更新下,不然这个是实现不了的,引起不必要的误会
回复

使用道具 举报

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

查看全部评分

回复

使用道具 举报

Trump1438 发表于 2019-1-24 19:39 | 显示全部楼层
Angle145 发表于 2019-1-24 16:46
我把他的源码贴下,显示的那个是错的:
void ms()
{

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

评分

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

查看全部评分

回复

使用道具 举报

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

Mr. Trump, you said it very well.
回复

使用道具 举报

sheng7533967 发表于 2019-2-7 00:45 | 显示全部楼层
好样的,思路不错
回复

使用道具 举报

shuisheng60 发表于 2019-2-7 00:47 | 显示全部楼层
很好,收下了
回复

使用道具 举报

就你?呸! 发表于 2019-2-11 13:37 | 显示全部楼层
很好的创意
回复

使用道具 举报

22229 发表于 2019-2-11 16:01 | 显示全部楼层
这个程序挺好,谢谢楼主分享
回复

使用道具 举报

axkf 发表于 2019-2-11 17:27 | 显示全部楼层
这个程序挺好,谢谢楼主分享
回复

使用道具 举报

jonejen 发表于 2019-2-21 14:14 | 显示全部楼层
感谢楼主分享!!
回复

使用道具 举报

ping264888 发表于 2019-2-22 08:08 来自手机 | 显示全部楼层
思路新奇,感谢分享。
回复

使用道具 举报

zhengchong60 发表于 2019-3-7 23:05 | 显示全部楼层
这个程序很有创意,谢谢楼主分享
回复

使用道具 举报

liuhailan5757 发表于 2019-3-8 09:46 | 显示全部楼层
提示: 该帖被管理员或版主屏蔽
回复

使用道具 举报

21#
无效楼层,该帖已经被删除
 楼主| 刀刀见红 发表于 2019-3-9 02:08
liuhailan5757 发表于 2019-3-8 09:46
首先肯定楼主的方法很赞,但现在也有很多单片机的按键中断大把的,像九齐的,晟矽微的,芯圣的,应管的,这 ...

用你的中断去吧,别人的思路不需要你懂

static 发表于 2019-3-17 01:14
liuhailan5757 发表于 2019-3-8 09:46
首先肯定楼主的方法很赞,但现在也有很多单片机的按键中断大把的,像九齐的,晟矽微的,芯圣的,应管的,这 ...

九齐的,晟矽微的,芯圣的,应管都是别人用的不用的垃圾芯片,好意思吹

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

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