久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8684|回復: 30
收起左側

一個不用中斷可立即跳出當前單片機程序運行狀態的操作

  [復制鏈接]
ID:469417 發表于 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, 下載次數: 94)
回復

使用道具 舉報

ID:7485 發表于 2019-1-22 06:00 | 顯示全部樓層
改變PC值不就行了嗎!
回復

使用道具 舉報

ID:412814 發表于 2019-1-22 07:00 | 顯示全部樓層
這個程序挺好,謝謝樓主分享
回復

使用道具 舉報

ID:149389 發表于 2019-1-22 08:46 | 顯示全部樓層
delay的時候,其他的事件顧不上的,也能“立即”?
回復

使用道具 舉報

ID:471066 發表于 2019-1-22 18:25 | 顯示全部樓層
weidoit 發表于 2019-1-22 08:46
delay的時候,其他的事件顧不上的,也能“立即”?

什么呀!怎么跟智障似的,別人附件在那你都不知道下下來驗證。附件才是完整的!別人的代碼思路就是能起到跳過delay,立即進入別的代碼中,效果同中斷一樣!同樓主所說的主題是一樣。別人能想到的算法估計你還真沒那個能力想出來!不信你自己試試!

評分

參與人數 1黑幣 +10 收起 理由
zhengchong60 + 10 很給力!

查看全部評分

回復

使用道具 舉報

ID:469932 發表于 2019-1-22 18:30 | 顯示全部樓層
驗證過了,很有創意!
回復

使用道具 舉報

ID:142059 發表于 2019-1-24 16:44 | 顯示全部樓層
建議把顯示的代碼更新下,不然這個是實現不了的,引起不必要的誤會
回復

使用道具 舉報

ID:142059 發表于 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

查看全部評分

回復

使用道具 舉報

ID:472325 發表于 2019-1-24 19:39 | 顯示全部樓層
Angle145 發表于 2019-1-24 16:46
我把他的源碼貼下,顯示的那個是錯的:
void ms()
{

沒有必要作什么更新,是要學的自然會找附件,不想學的何苦自擾!

評分

參與人數 1黑幣 +8 收起 理由
sheng7533967 + 8 很給力!

查看全部評分

回復

使用道具 舉報

ID:469417 發表于 2019-1-25 16:12 | 顯示全部樓層
Trump1438 發表于 2019-1-24 19:39
沒有必要作什么更新,是要學的自然會找附件,不想學的何苦自擾!

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

使用道具 舉報

ID:472268 發表于 2019-2-7 00:45 | 顯示全部樓層
好樣的,思路不錯
回復

使用道具 舉報

ID:472242 發表于 2019-2-7 00:47 | 顯示全部樓層
很好,收下了
回復

使用道具 舉報

ID:475444 發表于 2019-2-11 13:37 | 顯示全部樓層
很好的創意
回復

使用道具 舉報

ID:402398 發表于 2019-2-11 16:01 | 顯示全部樓層
這個程序挺好,謝謝樓主分享
回復

使用道具 舉報

ID:448822 發表于 2019-2-11 17:27 | 顯示全部樓層
這個程序挺好,謝謝樓主分享
回復

使用道具 舉報

ID:164189 發表于 2019-2-21 14:14 | 顯示全部樓層
感謝樓主分享!
回復

使用道具 舉報

ID:365802 發表于 2019-2-22 08:08 來自手機 | 顯示全部樓層
思路新奇,感謝分享。
回復

使用道具 舉報

ID:473186 發表于 2019-3-7 23:05 | 顯示全部樓層
這個程序很有創意,謝謝樓主分享
回復

使用道具 舉報

ID:387856 發表于 2019-3-8 09:46 | 顯示全部樓層
提示: 該帖被管理員或版主屏蔽
回復

使用道具 舉報

ID:499466 發表于 2019-12-25 18:51 | 顯示全部樓層
初學者不明覺歷我也在想能不能不寫中斷
回復

使用道具 舉報

ID:472975 發表于 2020-7-23 11:54 | 顯示全部樓層
代碼一小段,變化千千萬,非常好,稍作修改,把按鍵改成變量即可與程序中的其他模塊配套使用,亦可連接串口與下位機、雙機、多機通信協作運行,并不僅限于51系列只要是C都可以用,不是C也是可以借鑒原理的
回復

使用道具 舉報

ID:608923 發表于 2020-8-17 20:18 | 顯示全部樓層
這個太好了
回復

使用道具 舉報

ID:810680 發表于 2020-8-17 22:19 | 顯示全部樓層
每天都有小驚喜,樓主太給力!
回復

使用道具 舉報

ID:89217 發表于 2020-8-18 08:40 | 顯示全部樓層
  if(SW1==0)   
                        {
                                while(!SW1);只要用這種結構的 都是渣渣程序。你一直按著 別的程序要不要做事啊?萬一按鍵進水/短路,你這太機器就廢物了,最好用位置自鎖,延時用標志位延時 不要用delay()這類的硬延時,保證系統不卡在某個程序時間超過10ms才是高效的程序
回復

使用道具 舉報

ID:66287 發表于 2020-8-18 08:47 | 顯示全部樓層
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;
                                 }
                         }
                 }
其他按鍵同理

以上是樓主原程序,又是while(!SW1);又是 for(num=0;num<9;num++)的,單片機也不需要干其他事了。
高明在何處?
回復

使用道具 舉報

ID:429003 發表于 2020-8-18 13:16 | 顯示全部樓層
有人贊揚,有人鄙夷,有人抱不平,實在不明,高明在何處?  no code project ?
回復

使用道具 舉報

ID:89217 發表于 2020-8-19 08:16 | 顯示全部樓層
bhjyqjs 發表于 2020-8-18 08:47
if(SW1==0)   
                 {
                         delay(10);   

寫作手法開頭不練好后續思想就固化,無論大小程序,都盡量不要做程序堵塞性的操作,保持良好的編程手法很重要,F在初學者跟著開發程序板,開發板的程序和量產程序天壤地別,早知道早避坑,愛聽不聽,感覺自我良好就按照你自己想怎么滴就怎么滴。
回復

使用道具 舉報

ID:108573 發表于 2020-8-20 08:41 | 顯示全部樓層
只有在初始化程序中用過delay,或者在某些等待引腳狀態翻轉時用過微秒級delay,其他地方都不建議用
回復

使用道具 舉報

ID:108573 發表于 2020-8-20 08:54 | 顯示全部樓層
bhjyqjs 發表于 2020-8-18 08:47
if(SW1==0)   
                 {
                         delay(10);   

我也看了,一頭霧水,該delay的地方還是跳不出去,能跟中斷比?還是樓主貼錯程序了
回復

使用道具 舉報

ID:468878 發表于 2020-8-20 12:47 | 顯示全部樓層
大概用的什么原理?沒看明白,注釋也沒有啊
回復

使用道具 舉報

ID:807712 發表于 2020-8-20 14:00 | 顯示全部樓層
rsx9583 發表于 2020-8-20 12:47
大概用的什么原理?沒看明白,注釋也沒有啊

庸人自擾,高明處懂的是內行,不懂是一般水準

評分

參與人數 1黑幣 +15 收起 理由
shuisheng60 + 15 很給力!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97精品国产97久久久久久免费 | 亚洲视频在线观看 | 日日夜夜av| 最新国产精品精品视频 | 91精品久久久久久久久中文字幕 | 国产精品久久久久久福利一牛影视 | 欧美精品一区二区三区蜜桃视频 | 搞av.com| 中文字幕 国产 | 国产日屁| 成人在线视频网 | 91久久精品国产 | 欧美黄 片免费观看 | 国产欧美日韩一区二区三区在线观看 | 成人免费网站在线 | 成人av网站在线观看 | 欧美h版 | 99视频在线 | 国产精品视频一二三区 | av毛片| 一区二区成人在线 | 国产黄色大片 | 久久久久久综合 | 国产日韩欧美中文 | 国产精品1区 | 国产成人精品免费视频大全最热 | 亚洲一区二区三区在线 | 天天久久 | 久久久www成人免费无遮挡大片 | 亚洲国产精品久久久久 | 99国产精品久久久 | 香蕉大人久久国产成人av | 97精品国产一区二区三区 | 欧洲av在线| 日韩精品一区二区三区 | 久久国产婷婷国产香蕉 | 一区二区欧美在线 | 亚洲av一级毛片 | 久久无毛 | 亚洲午夜久久久 | 日韩精品一区二区在线观看 |