開關檢測案例一:
具體電路圖如下: K1--K4閉合,控制 D1—D4 亮滅
產生的問題:
1、關于 R8 R9 R7 R10 的阻值選擇問題,倘若太大的話, 比如10K 不管開關斷開還是閉合,好像都沒什么用,電阻上部分電流被拉低,一直為低電平,雖然仿真對,但終究有問題
倘若選擇一般大,則為灰色,表示電平不確定,最后不得已選擇 20Ω 電阻,電平可以確定,開關閉合,電平拉低,那么實際電路中, 電阻的取值究竟怎樣呢????
2、需要掌握 按位與 的用法
參加運算的兩個數據,按二進制位進行“與”運算。
運算規則:0&0=0; 0&1=0; 1&0=0; 1&1=1;
即:兩位同時為“1”,結果才為“1”,否則為0
例如:3&5 即 0000 0011 & 0000 0101 = 0000 0001 因此,3&5的值得1。
參考程序如下以及電路圖:
#include《reg52.h》
#include《intrins.h》
#define uchar8 unsigned char
#define uint16 unsigned int
#define LED P1
/*****************************/
// 函數名稱: DelayMS( )
// 函數功能: 延時
// 入口函數: 延時毫秒
// 出口函數: 無
/************************* *******************/
void DelayMs(uint16 val)
{
uint16 i,j;
for( i=0;i《val;i++)
for(j=0;j《113;j++);
}
void main()
{
while(1)
{
uchar8 temp;
LED=0xff; // P1.1—P1.3 置1 高電平 ,LED熄滅 ,高四位默認高電平,作為輸入
temp=P1&0xf0; // 讀 P1口 ,并且屏蔽其低四位,送入temp
temp=temp》》4; // temp內容 右移四位,也就是說 P1口高4位狀態移動至低四位 ,兩者狀態一樣
LED=temp; // temp 的數據送 P1口輸出
DelayMs(1000);
}
}
開關檢測案例二:
參考程序代碼:(目的: 通過 K1 K2 按鍵的組合00 01 10 11 來控制 LED 的燈的亮滅)
#include《reg52.h》
#include《intrins.h》
#define uchar8 unsigned char
#define uint16 unsigned int
#define LED P1
void main()
{
uchar8 state;
do
{
P2=0xff; // 設置 P2口輸入
state=P2; // 讀 P2口的狀態,送入 state
state=state&0x03; // 屏蔽 高6位
switch(state)
{
case 0 : LED=0xFE;break; // 14 0x0e 1110
case 1: LED=0xFD;break; // 13 0x0d 1101
case 2: LED=0xFB;break; // 11 0x0b 1011
case 3: LED=0xF7;break; // 7 0x07 0111
}
}while(1);
}
-
電阻
+關注
關注
86文章
5528瀏覽量
172296 -
電路圖
+關注
關注
10349文章
10721瀏覽量
531421 -
led燈
+關注
關注
22文章
1592瀏覽量
108142
發布評論請先 登錄
相關推薦
評論