分享

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

 飞往天际 2019-02-12
http://www./bbs/dpj-150083-1.html

电路原理图如下:
 

单片机程序源码:

#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;
                                        }


                                }
                        }
                }        
        }
}

https://www./i34cm8j

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多