freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

本科畢業(yè)設(shè)計-基于51單片機的紅外遙控密碼鎖設(shè)計-在線瀏覽

2025-03-07 15:53本頁面
  

【正文】 圖7 AT24c02管腳圖表1 AT24c02管腳功能管腳名稱管腳功能A0、AA2器件地址選擇SDA串行數(shù)據(jù)/地址SCL串行時鐘WP寫保護Vcc+Vss接地圖8存儲器地址位下圖為24C02在硬件中的的連接圖,根據(jù)各個管腳功能只需把A0、AAwp接地,按照I2C協(xié)議,時鐘線SCL和數(shù)據(jù)線SDA需接10K上拉電阻。遙控器應(yīng)用范圍:電器、兒童玩具等。由于本次設(shè)計用到的遙控器采用的是NEC編碼協(xié)議,下面將重點描述NEC碼特性。以此來完成紅外遙控的發(fā)送于接收。外觀如下: 圖15 紅外接收頭VS_1838b由于密碼采用雙控模式,在主控模塊采用矩陣鍵盤進行密碼的輸入及修改,因此,將紅外接收端接到單片機的外部中斷1來檢測是否有紅外信號,進而判斷遙控器是否有按鍵按下,并進行密碼的輸入與修改。紅外接收頭與單片機的連接硬件電路如下圖所示: 圖16 紅外接收頭連接圖 模擬鎖與報警電路設(shè)計本次設(shè)計采用led來模擬鎖,將發(fā)光二極管接到單片機的IO口上,實際應(yīng)用中接上一個1K電阻以保證發(fā)光二極管的亮度。以至于單片機的I/O 口是無法直接驅(qū)動,所以要使用放大電路用以驅(qū)動蜂鳴器,本次設(shè)計采用三極管來進行蜂鳴器的驅(qū)動。蜂鳴器外圍電路如下: 圖18 蜂鳴器連接圖 系統(tǒng)PCB設(shè)計根據(jù)上述每個模塊的設(shè)計,以及單片機的各個管腳特性整體電路如圖19。電源部分采用的是USB給單片機提供+5V的電源,發(fā)光二極管來指示有沒有給單片機供電。首先考慮到矩陣鍵盤的掃描問題,單片機IO口默認為高電平,如上面矩陣鍵盤圖所示,鍵盤的列和行分別接P1口的高低電平,可以先固定在某一行進行掃描,利用switch語句返回每個按鍵鎖表示的數(shù)值及跳轉(zhuǎn)到某個功能函數(shù)中去,以此來實現(xiàn)按鍵控制。第二行用來顯示密碼。其中密碼為六位數(shù)。先寫24c02的驅(qū)動程序,時鐘信號,讀寫數(shù)據(jù)等等,要考慮怎么將密碼寫入到24c02中,以及從中讀取等問題。最后要考慮遠程遙控問題,遙控器來發(fā)送紅外波,并由接收頭接收信號經(jīng)過處理之后傳到單片機中,再經(jīng)過程序運行處理來進行開鎖、改密等。另外,密碼鎖是用發(fā)光二極管來模擬,只需用高低電平來控制IO口即可。當(dāng)IO口味高電平時led熄滅,此時認為上鎖。所以,當(dāng)密碼錯誤時,給IO口送低電平即可達到報警效果。接收頭的輸出管腳連接的是單片機的外部中斷1口,因此,在程序運行時,首先要判斷是否產(chǎn)生中斷。本設(shè)計的主流程圖如下圖所示:開始有紅外中斷?接收碼正確否?密碼對否?調(diào)用中斷解碼程序紅外解碼報警開鎖中斷返回 圖20 主程序流程圖5 系統(tǒng)仿真與硬件調(diào)試 系統(tǒng)仿真和調(diào)試方案根據(jù)上述各個模塊的功能以及PCB設(shè)計可用PROTEUS來進行仿真,修改程序。SCK接時鐘線即為SCL,SDA接數(shù)據(jù)線,其余均接地。實際電路中,管腳3應(yīng)接10K滑動變阻器,管腳15接10歐電阻。然后分模塊逐一進行調(diào)試。因此,先寫矩陣鍵盤控制密碼鎖的程序。以及24c02的讀寫操作。將1602的顯示程序通過學(xué)習(xí)板燒到做好的電路板中,檢測1602是否正常顯示,若1602只亮屏不顯示字符此時調(diào)節(jié)滑動變阻器改變對比度。單片機固定牢固之后1602便可正常顯示。一般按鍵如果電路正確,并且程序和硬件都無差錯則在仿真中運行正確實物也可以輕松實現(xiàn)器功能。主要是將按鍵按下的值保存到存儲器中,并能夠從中讀取。此時程序中還要進行密碼的對比,若正確,led亮,說明鎖已經(jīng)打開。本人在調(diào)試過程中發(fā)現(xiàn)輸入密碼時不能夠正常開鎖,而真正能通過的密碼無從得知,若不通過存儲器的讀取,將初始值直接與鍵入值比較,此時密碼正確。經(jīng)過對程序的調(diào)試,讓此時存儲器隨機出現(xiàn)的密碼顯示到1602上,然后再在開鎖時鍵入對應(yīng)的密碼,此時密碼正確。此時再回到PROTEUS仿真,看下存儲器接線與PCB是否一致,以及芯片是否安置正確。4)紅外遙控模塊首先寫一個紅外遙控發(fā)送接收程序,看是否將字符正確顯示到1602上。經(jīng)過參考網(wǎng)上給出的例程,加上外部中斷1程序,使用中斷,檢測是否發(fā)送信號。 調(diào)試結(jié)果本次設(shè)計整體調(diào)試結(jié)果:給電路板送入+5V電源,1602第一行中間顯示wele,然后按解鎖鍵,1602第一行顯示input code 此時輸入密碼再按確定鍵。按下改密按鍵,1602第一行顯示input old code,輸入舊密碼(密碼錯誤則提示,并重新輸入),若密碼正確,畫面提示input new code,此時鍵入新密碼(六位數(shù)),然后按確定鍵,畫面顯示input new code again。若兩次密碼相同,則1602顯示plete。然后用遙控器如上操作,同樣可以進行開鎖及修改密碼。由于相同功能的芯片有很多,經(jīng)過對比其實用性,是否易操作,外圍電路以及程序設(shè)計難易等等來選擇較合理的芯片。寫程序時為了達到預(yù)期效果,對新接觸的芯片進行研究,通過多次修改完成每個模塊的運行。每一次失敗都會離成功又進一步。 致謝從開始選定課題到現(xiàn)在經(jīng)歷了將近半年的時間,在這期間遇到一些困難想要放棄的時候室友們都會鼓勵我,讓我再次有了信心。另外,還要感謝趙老師,總是在百忙之余指導(dǎo)我,幫我解決了不少難題,讓我順利完成了設(shè)計。 {_nop_()。_nop_()。}。/****紅外延時函數(shù)聲明*****/void delay(uint)。void delay(unsigned char x) 。void delay1(int ms)。 //外部中斷1//sbit lock=P2^3。//蜂鳴器void delay(unsigned char x) //x*{ unsigned char i。 i13。sbit scl=P2^5。bit key_flag=0,currentdisflag=1,lastdisflag=1,keystatusflag=0,dispassword_=0,dispassword_flag=0。uchar key=0,keycounts=0,t_num=0。uchar code tab2[]={ Right! }。uchar code tab4[]={Wele enter }。uchar code tab6[]={Input new code }。uchar code tab8[]={Complete! }。uchar code open[]={Wele... }。uchar code message[16]={0123456789abcdef}。//定義接口sbit rw=P2^1。sbit led=P2^3。void LCD_WriteData(uchar WDLCD)。void DisplayOneChar(uchar X, uchar Y, uchar DData)。/******************************延時函數(shù)****************************/void delay11(){。 for(x=t。x) for(y=110。y)。 rw=0。 LCD_Data=WDLCD。 en=0。 rw=0。 LCD_Data=WCLCD。 en=0。 //設(shè)置顯示模式:16X2,5X7,8位數(shù)據(jù)接口 LCD_WriteCommand(0x0c)。 //讀寫一個字符后,地址指針及光標(biāo)加一,且光標(biāo)加一整屏顯示不移動 LCD_WriteCommand(0x80)。= 0x1。= 0xF。//當(dāng)要顯示第二行時地址碼+0x40。// 算出指令碼 LCD_WriteCommand(X)。 LCD_WriteData(DData)。}/*******************1602按指定位置顯示一串字符函數(shù)*********************/void DisplayListChar(uchar X, uchar Y, uchar code *DData){ uchar ListLength。 Y amp。 X amp。//限制X不能大于15,Y不能大于1 while (DData[ListLength]!=39。)//若到達字串尾則退出 { if (X = 0xF)//X坐標(biāo)應(yīng)小于0xF { DisplayOneChar(X, Y, DData[ListLength])。 X++。 delay11()。 delay11()。 delay11()。}void stop() //停止信號{ sda=0。 scl=1。 sda=1。 scl=0。}void respons() //應(yīng)答{ uchar i。 scl=1。 while((sda==1)amp。(i250)) i++。 delay11()。 temp=indata。i8。 scl=0。 sda=CY。 scl=1。 } scl=0。 sda=1。}uchar read_byte() //讀一個字節(jié){ uchar i,k=0。 delay11()。 delay11()。i8。 delay11()。 scl=0。 } return k。 write_byte(AddWr)。 write_byte(address)。 write_byte(indata)。 stop()。 start()。 respons()。 respons()。 write_byte(AddRd)。 indata=read_byte()。 return indata。 //refresh_display(0,1,cls)。i4。0xff。 //DisplayOneChar(62*i,1,message[temp/0x10])。 WrToROM_Byte(address+i,temp)。 //DisplayData(indata)。 dword indata=0。 for(i=0。i++){ temp=RdFromROM_Byte(address+3i)。 //DisplayOneChar(2*i+1,1,message[temp%0x10])。 delay2(1)。 delay2(1)。}void init_24C02() //初始化{ sda=1。 scl=1。}/*****************************24C02驅(qū)動*********************************//***************************定時器1中斷*********************************/void IR_IN() interrupt 1{ unsigned char j,k,N=0。 TH0=(6553650000)/256。 EX1 = 0。 if (IRIN==1) { EX1 =1。 } //確認IR信號出現(xiàn)/**/ while (!IRIN) //等IR變?yōu)楦唠娖?,跳過9ms的前導(dǎo)低電平信號。 for (j=0。j++) //收集四組數(shù)據(jù) { for (k=0。k++) //每組數(shù)據(jù)有8位 { while (IRIN) //等 IR 變?yōu)榈碗娖健 while (!IRIN) //等 IR 變?yōu)楦唠娖? delay(1)。 N++。 return。 } //高電平計數(shù)完畢 IRCOM[j]=IRCOM[j] 1。 //數(shù)據(jù)最高位補“1” } N=0。 return。 0x0F。 //右移4次,高四位變?yōu)榈退奈?if(IRCOM[5]9) { IRCOM[5]=IRCOM[5]+0x37。 if(IRCOM[6]9) { IRCOM[6]=IRCOM[6]+0x37。 q= (((IRCOM[6]amp。0x0f))。break。break。break。break。break。led=1。 //串口發(fā)送05 case 0x51:key=6。 //串口發(fā)送06 case 0x42:key=7。 //串口發(fā)送07 case 0x52:key=8。 //串口發(fā)送08 case 0x41:key=9。 //串口發(fā)送09 case 0x45:key=14。//解鎖(CH—) case 0x09:key=11。//確定 (EQ) case 0x46:key=13。//改密 (CH) case 0x47:key=10。break。 } EX1 = 1。 keypad=0xf0。 temp_h=keypad
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1