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

正文內(nèi)容

基于mcs-51單片機(jī)電子密碼鎖的設(shè)計(jì)畢業(yè)設(shè)計(jì)論文-資料下載頁

2025-06-27 18:06本頁面
  

【正文】 / LCD 的讀寫控制sbit EN=P2^2。 // LCD 的使能控制sbit SCK=P2^3。 // 中行時(shí)鐘sbit SDA=P2^4。 // 串行數(shù)據(jù)sbit BEEP=P2^6。 // 蜂鳴器的接口sbit LED_OPEN=P2^7。 // LED 燈的接口,開鎖信號//// 延時(shí)// void Delay_ms(uint x){ uint i,j。for(i = 0。i x。 i++)30for(j = 0。 j 110。 j++)。}void Delay(){ 。}//// 蜂鳴器//void Beep(){ uchar i。 for(i=0。 i100。 i++) { Delay_ms(1)。BEEP=!BEEP。 } BEEP=0。}void Beep1(){uchar i。for(i = 0。 i 10。 i++)Beep()。}//// 清除密碼//void Clear_Password(){31 UserPassword[0]=39。\039。 DSY_BUFFER[0]=39。\039。}//// 忙檢查//uchar Busy_Check(){ uchar LCD_Status。 RS=0。 //寄存器選擇 RW=1。 //讀狀態(tài)寄存器選擇 EN=1。 Delay_ms(1)。 LCD_Status=P0。 EN=0。 return LCD_Status。}//// 與 LCD 命令//void Write_LCD_Command(cmd){ while((Busy_Check() amp。 0x80)==0x80)。 RS=0。 RW=0。 EN=0。 P0=cmd。 EN=1。 Delay_ms(1)。 EN=0。}//// 發(fā)送數(shù)據(jù)//32void Write_LCD_Data(uchar dat){ while( (Busy_Check() amp。0x80) ==0x80)。 RS=1。 RW=0。 EN=0。 P0=dat。 EN=1。Delay_ms(1)。EN=0。}//// LCD 初始化//void LCD_Init(){ Write_LCD_Command(0x38)。 //設(shè)置兩行顯示,8 位數(shù)據(jù)總線,5*7 的點(diǎn)陣字符 Delay_ms(1)。 Write_LCD_Command(0x06)。 //寫一個(gè)字符后地址指針加 1 Delay_ms(1)。 Write_LCD_Command(0x0C)。 //設(shè)置開顯示,不顯示光標(biāo) Delay_ms(1)。 Write_LCD_Command(0x01)。 //顯示清 0,數(shù)據(jù)指針清 0 Delay_ms(1)。}//// 設(shè)置顯示位置//void Set_LCD_POS(uchar p){ Write_LCD_Command(p | 0x80)。}//// 在 LCD 上顯示字符串//33void Display_String(uchar *s, uchar p){ uchar i。 Set_LCD_POS(p)。 for( i=0。i16。i++) { Write_LCD_Data(s[i])。 Delay_ms(1)。 }}void i2cinit() //總線初始化{SDA = 1。Delay()。SCK = 1。Delay()。}void start() //啟動信號{SDA = 1。SCK = 1。Delay()。SDA = 0。Delay()。}void stop() //停止信號{SDA = 0。Delay()。SCK = 1。34Delay()。SDA = 1。Delay()。}void respons() //應(yīng)答信號{uchar i = 0。SCK = 1。Delay()。while(SDA == 1 amp。amp。 i 255)//等待應(yīng)答,過一段時(shí)間不應(yīng)答退出循環(huán)i++。SCK = 0。Delay()。}void writebyte(uchar date)//寫一個(gè)字節(jié){uchar i,temp。temp = date。for(i = 0。 i 8。 i++){temp = 1。//temp 左移一位后高位進(jìn) CYSCK = 0。Delay()。SDA = CY。Delay()。SCK = 1。Delay()。}SCK = 0。//應(yīng)答信號中 SCK = 1,所以這里要置 0Delay()。35SDA = 1。//用完要釋放數(shù)據(jù)總線Delay()。}uchar readbyte()//讀一個(gè)字節(jié) {uchar i,k。SCK = 0。Delay()。SDA = 1。for(i = 0。 i 8。 i++)//一個(gè)字節(jié)由八位二進(jìn)制構(gòu)成,分八次送{SCK = 1。Delay()。k = (k 1) | SDA。 //和最低位或,一位位送到 KSCK = 0。Delay()。}Delay()。return k。}void write_add(uchar address,uchar date) // 向地址寫一個(gè)字節(jié)數(shù)據(jù){start()。writebyte(0xa0)。 // A0,A1,A2 接地,AT24C02 芯片地址為 1010,送控制字為 1010A2A1A0R/~Wrespons()。writebyte(address)。respons()。writebyte(date)。respons()。36stop()。}uchar read_add(uchar address) //向地址讀一個(gè)字節(jié)數(shù)據(jù){uchar date。start()。writebyte(0xa0)。 // A0,A1,A2 接地,AT24C02 芯片地址為 1010,送控制字為 1010A2A1A0R/~Wrespons()。writebyte(address)。respons()。start()。writebyte(0xa1)。 // A0,A1,A2 接地,AT24C02 芯片地址為 1010,送控制字為 1010A2A1A0R/~Wrespons()。date = readbyte()。stop()。return date。}////向地址寫 n 個(gè)字節(jié)數(shù)據(jù),數(shù)據(jù)存放在指針 P 指的數(shù)組中//void write_n_add(uchar * p,uchar address,uchar n){uchar i。for(i = 0。 i n。 i++){write_add((address + i),*(p + i))。Delay_ms(20)。//一定要適當(dāng)延時(shí),不然寫不進(jìn)去}37}////向地址讀 n 個(gè)字節(jié)數(shù)據(jù),數(shù)據(jù)存放在指針 P 指的數(shù)組中//void read_n_add(uchar * p,uchar address,uchar n){uchar i。for(i = 0。 i n。 i++){*(p + i) = read_add(address + i)。}}//// 鍵盤掃描//uchar Keys_Scan(){ uchar Tmp, KeyNo=0。 P1=0x0F。 //高四位置 0,放入四行 Delay_ms(1)。 //按鍵后 00001111 將變成 0000xxxx,x 中 1 個(gè)為 0,3 個(gè)仍為 1//異或操作會把 3 個(gè) 1 變成 0,唯一的 0 變成 1 Tmp=P1 ^ 0x0F。 switch (Tmp) // 判斷發(fā)生于 0~3 列中的哪一列 { case 1: KeyNo=0。 break。case 2: KeyNo=1。 break。case 4: KeyNo=2。 break。38case 8: KeyNo=3。 break。default: KeyNo=16。 //無鍵按下 } P1=0xF0。 //低四位置 0,放入四列 Delay_ms(1)。//按鍵后 11110000 將變成 xxxx0000,x 中 1 個(gè)為 0,3 個(gè)仍為 1 Tmp=P14 ^0x0F。 //將高四位移至低四位,并將其中的唯一的 0變?yōu)?1,其余為 0 switch(Tmp) {case 1: KeyNo+=0。 break。case 2: KeyNo+=4。 break。case 4: KeyNo+=8。 break。case 8: KeyNo+=12。 break。 } return KeyNo。 }//// 主函數(shù)//void main(){ uchar i = 0, b = 0, KeyNo=16。 uchar x。 uchar Right_User = 0。 uchar IIC_Password[10]。 P0 = 0xFF。 P1 = 0xFF。 P2 = 0xFF。 Delay_ms(10)。 39 LCD_Init()。 //初始化 LCD i2cinit()。 //初始化 24C02 Display_String(Title_Text,0x00)。 //在第 1 行顯示標(biāo)題 //24C02 的內(nèi)容已由初始化 BIN 文件導(dǎo)入 //將 24C02 中預(yù)先寫入的密碼讀入 pass read_n_add(IIC_Password,0x00,6)。 IIC_Password[6] = 39。\039。 while(1) { P1 = 0xF0。 if(P1 != 0xF0) KeyNo = Keys_Scan()。 //掃描鍵盤獲取鍵序號KeyNo switch ( KeyNo ) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: if ( i= 5 ) //密碼限制在 6 位以內(nèi) { //如果 i 為 0 則執(zhí)行一次清屏 if (i ==0) Display_String( ,0x40)。 UserPassword[i] = KeyNo + 39。039。 UserPassword[i+1] = 39。\039。 DSY_BUFFER[i] = 39。*39。 DSY_BUFFER[i+1] = 39。\039。DSY_BUFFER[i+2] = 39。\039。 DSY_BUFFER[i+3] = 39。\039。DSY_BUFFER[i+4] = 39。\039。DSY_BUFFER[i+5] = 39。\039。 Display_String(DSY_BUFFER,0x40)。40 i++。 } break。 case 10: //按 A 鍵開鎖 if (strcmp(UserPassword,IIC_Password) == 0) { LED_OPEN = 0。 //點(diǎn)亮 LED Clear_Password()。
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1