|
壇友的不占用中斷 不使用延時(shí) 沒(méi)有死循環(huán)!!!不占用任何資源。親測(cè)可用
1.png (100.42 KB, 下載次數(shù): 27)
下載附件
2024-5-3 20:36 上傳
單片機(jī)源程序如下:
- #include <reg51.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit LED1= P3^4;
- sbit LED2 = P3^5;
- sbit LED3= P3^6;
- sbit LED4 = P3^7;
- sbit key1 =P1^4;
- sbit key2 =P1^5;
- /*不占用中斷 不使用延時(shí) 沒(méi)有死循環(huán)!!!不占用任何資源
- 這個(gè)按鍵檢測(cè)程序我在20年前網(wǎng)上看到過(guò)。當(dāng)時(shí)沒(méi)有試用。今又看到這個(gè)單片機(jī)代碼。于是決定測(cè)試一下*/
- unsigned char num,trg1=0, trg2=0,cont1=0,cont2=0;//一定是全局變量
- //unsigned char
- unsigned key1scan()
- {
- unsigned char a=!key1;//網(wǎng)上是異或運(yùn)算a=key1^0x01,對(duì)于一位按鍵可以直接寫成取反
- trg1= a&(a^cont1);
- cont1=a;
- if(trg1&!key1) //網(wǎng)上是(trg1&key1)實(shí)際測(cè)試不能使用!!因?yàn)槿魏螘r(shí)候都不可能為真。只有改成(trg1&!key1)才可以完美執(zhí)行!!!
- //return 1;//返回等于1 表示按鍵按下。
- {
- //此處可以是自己需要執(zhí)行的程序。(去掉前面的返回)
- LED1=~LED1;//按一次亮按一次滅
- }
- }
- unsigned key2scan()
- {
- unsigned char a=!key2;//網(wǎng)上是異或運(yùn)算a=key2^0x01,對(duì)于一位按鍵可以直接寫成取反
- trg2= a&(a^cont2);
- cont2=a;
- if(trg2&!key2)
- //return 1;//返回等于1 表示按鍵按下。
- {
- //此處可以是自己需要執(zhí)行的程序。(去掉前面的返回)
- LED2=~LED2; //按一次亮按一次滅
- }
- }
- void main()
- {
- P3=0XFF;
- P1=0XFF;
- while(1)
- {
- key1scan(); //每次按下按鍵只會(huì)執(zhí)行一次,按鍵不放開絕對(duì)不會(huì)重復(fù)執(zhí)行。
- {
- //自己的程序。
- }
- key2scan(); //每次按下按鍵只會(huì)執(zhí)行一次,按鍵不放開絕對(duì)不會(huì)重復(fù)執(zhí)行。
- {
- }
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|