rfid 門卡系統(tǒng)和人體紅外感應(yīng)開發(fā)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
今天忙了一天了,因?yàn)楫厱N杯我發(fā)現(xiàn)如果不加把勁,可能寒假之前代碼搞不出了,今天突擊了兩個(gè)模塊,一個(gè)人體感應(yīng)模塊,和rfid刷卡模塊,這兩個(gè)模塊談不上自己編寫代碼,今天的任務(wù)也僅僅是看懂了代碼,現(xiàn)在我總結(jié)一下今天的所得
人體感應(yīng)模塊,開始的時(shí)候,問(wèn)題出在兩個(gè)方面,第一個(gè)就是我竟然不小心把電源看錯(cuò)了,因?yàn)閳D上沒得標(biāo)記,搞起我用電壓表測(cè)量輸出的電壓,結(jié)果發(fā)現(xiàn)輸出的結(jié)果總是4.46V,我開始因?yàn)槭顷P(guān)照強(qiáng)度的問(wèn)題,就把他放在一個(gè)黑盒子了,結(jié)果還是4.46V,于是糾結(jié)了好久才弄處理
第二個(gè)點(diǎn),值得注意的地方,就是單片機(jī)檢測(cè)電平的變化,因?yàn)榧t外感應(yīng)模塊本身就不難,我開始想用中斷,因?yàn)檫@樣的話,可以節(jié)省單片機(jī)的內(nèi)部的資源,其實(shí)這個(gè)想法昨晚上就有了,后來(lái)才知道,51單片機(jī)只能夠是低電平觸發(fā)中斷,這樣的話,原來(lái)的方案就不能實(shí)現(xiàn)
還是郭老師那句話好呀,51單片機(jī)在進(jìn)行輸入的時(shí)候,要對(duì)其進(jìn)行寫1 操作,這樣才能夠讀出管腳的I/O的變化,對(duì)于51單片機(jī)的管腳的知識(shí),今天百度了一下,這里有幾篇比較好的文章推薦給大家
博客:這個(gè)是別個(gè)總結(jié)的,感覺很有用
IO口檢測(cè)高點(diǎn)平的問(wèn)題,曾經(jīng)而困擾我不少時(shí)間,呵呵。
這幾天做一個(gè)項(xiàng)目,又有點(diǎn)暈呼了,查了不少資料,做了一個(gè)總結(jié),和大家分享~~
1、51單片機(jī)的I/O 口檢測(cè)高低電平是需要首先讓該端口置為1的。此時(shí)這個(gè)引腳才被設(shè)置為輸入。
2、如果是avr單片機(jī),可以通過(guò)設(shè)置DDRx的值來(lái)設(shè)置輸入輸出(詳見數(shù)據(jù)手冊(cè)~~)
3、切忌要將單片機(jī)的檢測(cè)端口設(shè)置為輸入,否則可能影響被檢測(cè)模塊端口的電壓(如:被拉低電平至0v,或被拉高)
4、注意單片機(jī)一般是TTL電平模式的,因此高電平的最低應(yīng)該是2V,低電平的最高應(yīng)該是0.8V。(具體還是見數(shù)據(jù)手冊(cè)比較保險(xiǎn)一點(diǎn))
示例代碼:
#include
sbit led = P1^1;
sbit hongwai = P1^2;
typedef unsigned int uint ;
//延時(shí)函數(shù)
void delay(uint x)
{
uint i,j;
for (i = x;i>0;i--)
for(j = 110;j>0;j--);
}
main()
{
hongwai = 1;
while(1)
{
if(hongwai ==1)//檢測(cè)到高電平的話,延時(shí)一下
{
delay(20);
if(hongwai == 1)//再次檢測(cè)一下
{
led = 0;
}
}
else
led = 1;
}
}
步進(jìn)電機(jī):
其實(shí)以前我還在糾結(jié)為什么我的步進(jìn)電機(jī)總要比其他人的壞的快,原來(lái)是沒有弄清楚步進(jìn)電機(jī)的正極,因?yàn)椴竭M(jìn)電機(jī)通常是采用5根線,所以,紅色的那根通常是正極,步進(jìn)電機(jī)的驅(qū)動(dòng)很簡(jiǎn)單,這里不做總結(jié)
rfid模塊:
從吃完中飯就回來(lái)弄這個(gè)模塊了,這個(gè)模塊比較小氣,代碼比較長(zhǎng),我今天下午可以說(shuō)是把他從頭到腳打量了一下午,但是還是沒有結(jié)果,最后,問(wèn)達(dá)鑫,因?yàn)檫_(dá)鑫做出來(lái)了,后來(lái)才知道,這個(gè)模塊的電壓一定要嚴(yán)格的限定在3.3v,我今天下午沒有弄出來(lái)的原因就是電源偏高,我在慶幸沒有把模塊燒壞,因?yàn)榻裉祀娫措m然說(shuō)是3.3v,結(jié)果到最后才知道他有3.47V,導(dǎo)致模塊一直處于高電壓狀態(tài),這個(gè)模塊的電壓最好一定要等于3.3v
示例代碼:這里給出主程序
#include
#include"ICRead.h"
unsigned char status;
unsigned char RevBuffer[2];
unsigned char CardNum[4];
unsigned char Duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*******************
系統(tǒng)初始化函數(shù)
*********************/
void InitializeSystem()
{
DZ=1;
P0=0;
DZ=0;
LED=1;
P0 = 0xFF;
LED=0;
PcdReset(); //RC522 restart;
PcdAntennaOff(); //關(guān)閉天線
PcdAntennaOn(); //開啟天線
M500PcdConfigISOType( 'A' );//設(shè)置RC632的工作方式;
}
void delay10ms()
{
unsigned char i,j;
for(i=123;i>0;i--)
for(j=10;j>0;j--);
}
void main()
{
unsigned char i,digitron;
InitializeSystem( );
status=PcdRequest(PICC_REQIDL,&RevBuffer[0]);
status=PcdAnticoll(CardNum);
if(status==MI_OK)
{
while(1)
{
digitron=0xfe;
for(i=0;i<4;i++)
{
delay10ms();
Wei=1;
P0=digitron;
digitron<<=1;
Wei=0;
Duan=1;
P0=Duanma[CardNum[i]%10];
Duan=0;
delay10ms();
}
}
}
}
明天還有串口通信,這兩個(gè)程序還是比較經(jīng)典的,明天加上串口通信,應(yīng)該就可以刷卡進(jìn)門了,對(duì)了,因?yàn)?1好像有一個(gè)銀行卡結(jié)賬的示例程序,明天看看,可不可以移植到我們的豬舍上來(lái)