【51单片机】开关状态检测
生活随笔
收集整理的這篇文章主要介紹了
【51单片机】开关状态检测
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
【項目一】
題目
原理圖
代碼
【項目二】
題目
原理圖
代碼
【項目一】
題目
4個開關的狀態反映在4個發光二級管上,開關閉合,對應的發光二極管點亮。
原理圖
?
代碼
#include <reg52.h> #define uchar unsigned char #define uint unsigned intvoid delay(uint n) {uchar i;uint j;for(j=0;j<n;j++)for(i=0;i<123;i++); }void main (void) {while(1){uchar temp;P1=0xff;//每次循環都將P1初始化,相當于設置刷新,實時關注開關的動態temp=P1&0xf0;temp=temp>>4;P1=temp;delay(500);} }?代碼分析
| 開關狀態 | P1=0xff | temp=P1&0xf0 | temp=temp>>4 | 現象 |
| 開關S0閉合 | 1111 1111 | XXX0 0000= XXX0 1111&1111 0000 | 0000 XXX0 | D1亮 |
| 開關S1閉合 | 1111 1111 | XX0X 0000= XX0X 1111&1111 0000 | 0000 XX0X | D2亮 |
| 開關S2閉合 | 1111 1111 | X0XX 0000= X0XX 1111&1111 0000 | 0000 X0XX | D3亮 |
| 開關S3閉合 | 1111 1111 | 0XXX 0000= 0XXX 1111&1111 0000 | 0000 0XXX | D4亮 |
【項目二】
題目
2個開關S0和S1分別接在單片機的2個引腳上,其高低電平共有4種組合,這4種組合分別點亮4個引腳控制的4個LED,即LED0~LED3。當S0、S1均閉合時,LED0亮,其余滅;S0打開、S1閉合時,LED1亮,其余滅;S0閉合、S1打開時,LED2亮,其余滅;S0、S1均打開時,LED3亮,其余滅。
原理圖
代碼
#include <reg52.h> #define uchar unsigned char #define uint unsigned intvoid delay(uint n) {uchar i;uint j;for(j=0;j<n;j++)for(i=0;i<123;i++); }void main (void) {do{char state;P1=0xff;//等價于刷新的功能state=P1;state=state&0x30;state=state>>4;switch (state){case 0: P1=0x08;delay(500);break;case 1: P1=0x04;delay(500);break;case 2: P1=0x02;delay(500);break;case 3: P1=0x01;delay(500);break;}}while(1); }代碼分析
| 開關狀態 | state=P1 | state=state&0x30 | state>>4 | case | 現象 |
| S0斷開 S1斷開 | 1111 1111 | 0011 0000 | 0000 0011 | 3 | LED0亮 |
| S0閉合 S1斷開 | 1110 1111 | 0010 0000 | 0000 0010 | 2 | LED1亮 |
| S0斷開 S1閉合 | 1101 1111 | 0001 0000 | 0000 0001 | 1 | LED2亮 |
| S0閉合 S1閉合 | 1100 1111 | 0000 0000 | 0000 0000 | 0 | LED3亮 |
總結
以上是生活随笔為你收集整理的【51单片机】开关状态检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 离散数学--联结词
- 下一篇: spaCy V3.0 基于规则匹配(2)