[size=13.333333969116211px]1) 單個按鍵與多個數碼管—點陣(位操作—輸入與字節操作—輸出)—動態 [size=13.333333969116211px]1. 多個按鍵 → 鍵盤與多個LED燈—最小系統—輸出擴展與掃描輸入口 [size=13.333333969116211px]a) 多個按鍵,單個LED燈—動態輸入—掃描函數 [size=13.333333969116211px]b) 多個按鍵,多個LED燈—動態—掃描函數—數組對照 [size=13.333333969116211px]c) 多個按鍵,多個LED燈—單數碼管—掃描函數—數組對照 [size=13.333333969116211px]d) 鍵盤,多個LED燈—單數碼管 [size=13.333333969116211px]2. 多個按鍵 → 鍵盤與多個LED燈—最小系統—輸出擴展與掃描輸入口 [size=13.333333969116211px]1) 多個按鍵,單個LED燈—動態輸入—掃描函數 [size=13.333333969116211px]2) 多個按鍵,多個LED燈—動態—掃描函數—數組對照 [size=13.333333969116211px]3) 多個按鍵,多個LED燈—單數碼管—掃描函數—數組對照 [size=13.333333969116211px]4) 鍵盤,多個LED燈—單數碼管 [size=13.333333969116211px]3. 多個按鍵 → 鍵盤、數碼管與點陣—最小系統—輸入與輸出掃描 [size=13.333333969116211px]a) 多個按鍵,多個LED燈—多數碼管—掃描函數—數組對照 [size=13.333333969116211px]b) 鍵盤,多個LED燈—單數碼管—掃描函數—數組對照 [size=13.333333969116211px]c) 多個按鍵,多個LED燈—單點陣—掃描函數—數組對照 [size=13.333333969116211px]d) 鍵盤,多個LED燈—多點陣—掃描函數—數組對照 [size=13.333333969116211px]2. 多個按鍵→ 鍵盤、數碼管與點陣—最小系統—輸入與輸出掃描 [size=13.333333969116211px]1) 多個按鍵,多個LED燈—多數碼管—掃描函數—數組對照 [size=13.333333969116211px]LED燈是由發光二極管制成的,它的工作原理與標準或說普通二極管相同—單向導電性。將多個發光二極管按照8字形安排,則構成一個7段數碼管;按照米字形則構成13段數碼管。后者在字節處理方面不是8的倍數,則會帶來一些麻煩。前者雖缺一位,但加上小數點位則恰到好處。 [size=13.333333969116211px]  [size=13.333333969116211px]//源程序—4個一組的數碼管實現: [size=13.333333969116211px]#define LEDS 4 [size=13.333333969116211px]#include"reg51.h" [size=13.333333969116211px]//led T選iffl1號 [size=13.333333969116211px]//unsigned char code Select[]={0x01,0x02,0x04,0x08,0x10,0x20}; [size=13.333333969116211px]unsigned char code Select[]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,}; [size=13.333333969116211px]unsigned char code LED_CODES[]= [size=13.333333969116211px]{ 0xc0,0xF9,0xA4,0xB0,0x99,//0-4 [size=13.333333969116211px]0x92,0x82,0xF8,0x80,0x90,//5-9 [size=13.333333969116211px]0x88,0x83,0xC6,0xA1 ,0x86,//A,b,C,d,E [size=13.333333969116211px]0x8E,0xFF,0x0C,0x89,0x7F,0xBF//F,空格,P,H,.,- [size=13.333333969116211px]}; [size=13.333333969116211px]void main() [size=13.333333969116211px]{ [size=13.333333969116211px]char i=0; [size=13.333333969116211px]long int j; [size=13.333333969116211px]long int n; [size=13.333333969116211px]while(1) [size=13.333333969116211px]{ [size=13.333333969116211px]P2=0; [size=13.333333969116211px]P2=LED_CODES[n]; [size=13.333333969116211px]//P1=1; [size=13.333333969116211px]P1=Select; [size=13.333333969116211px]for(j=3000;j>0;j--); //該LED 模型靠脈沖點亮,第 i 位靠脈沖點亮后,會自動熄來頭。 [size=13.333333969116211px]//修改循環次數,改變點亮下一位之前的延時,可得到不同的顯示效果。 [size=13.333333969116211px]i++; [size=13.333333969116211px]if(i>5) i=0; [size=13.333333969116211px]n++; [size=13.333333969116211px]if(n>16) n=0; [size=13.333333969116211px]} [size=13.333333969116211px]} [size=13.333333969116211px] [size=13.333333969116211px]l 多數碼管循環移動 [size=13.333333969116211px] [size=13.333333969116211px]#include [size=13.333333969116211px]#include [size=13.333333969116211px]#define uchar unsigned char [size=13.333333969116211px]#define uint unsigned int [size=13.333333969116211px]uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, [size=13.333333969116211px]0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//0—F字符陽極管 [size=13.333333969116211px]uchar code DUA_CODE[]={0x08,0x04,0x02,0x01,0x08,0x04,0x02,0x01, [size=13.333333969116211px]0x08,0x04,0x02,0x01,0x08,0x04,0x02,0x01};//右向左移動 [size=13.333333969116211px]uchar code DUA_CODE[]={0x01,0x02,0x04,0x08 };//左向右移動 [size=13.333333969116211px] [size=13.333333969116211px]******關于移位函數的使用—P3=_crol_(P3,1);或P3=_cror_(P3,1);左右移位******* [size=13.333333969116211px]//延時 [size=13.333333969116211px]void DelayMS(uint x) [size=13.333333969116211px]{ [size=13.333333969116211px]uchar t; [size=13.333333969116211px]while(x--) for(t=0;t<120;t++); [size=13.333333969116211px]} [size=13.333333969116211px]//主程序 [size=13.333333969116211px]void main() [size=13.333333969116211px]{ [size=13.333333969116211px]uchar i; [size=13.333333969116211px]while(1) [size=13.333333969116211px]{ [size=13.333333969116211px]for(i=0;i<16;i++) [size=13.333333969116211px]{ [size=13.333333969116211px]P2=0x00; [size=13.333333969116211px]P2=DSY_CODE; //發送段碼 [size=13.333333969116211px]P3=DUA_CODE; //發送位碼 [size=13.333333969116211px]DelayMS(10); [size=13.333333969116211px]} [size=13.333333969116211px]} [size=13.333333969116211px]} [size=13.333333969116211px] [size=13.333333969116211px]2) 鍵盤,多個LED燈—單數碼管—掃描函數—數組對照 [size=13.333333969116211px] [size=13.333333969116211px]3) 多個按鍵,多個LED燈—單點陣—掃描函數—數組對照 [size=13.333333969116211px] [size=13.333333969116211px]4) 鍵盤與點陣 [size=13.333333969116211px]字母輸入與實現技術 [size=13.333333969116211px]文本顯示技術 [size=13.333333969116211px]多個LED燈,多個按鍵 → 鍵盤 [size=13.333333969116211px]A) 單“位”—P口1位--單個燈—位輸出,單個按鍵控制—硬控制與軟控制 [size=13.333333969116211px]一個按鍵,一盞照明燈,一個繼電器。硬件接口問題—線路連接、硬件硬驅動問題(程序稱為軟驅動)。 [size=13.333333969116211px] 說明: [size=13.333333969116211px]硬件特性,驅動與控制信號,程序編寫 [size=13.333333969116211px]由繼電器引出的強電驅動電器的控制問題,如電動機—交流電機、直流電機、步進電機、伺服電機;單項或多項 [size=13.333333969116211px]
|