#include "STC90.h" #include < intrins.h > #define uchar unsigned char #define uint unsigned int #define led_port P1 sbit IR_RE = P3^2; sbit led_r = P1^3; sbit led_g = P1^4; sbit led_b = P1^5; sbit led_wd = P1^7; sbit K1 =P3^0 ; //增加鍵 sbit K2 =P3^1 ; //減少鍵 sbit BEEP =P3^7 ; //蜂鳴器 uchar temp,temp1; bit k=0; //紅外解碼判斷標志位,為0則為有效信號,為1則為無效 bit Flag2; uchar date[4]={0,0,0,0}; //date數組為存放地址原碼,反碼,數據原碼,反碼 uint lade_1,lade_2,lade_3,lade_4; uint num; uchar date_ram,ee_temp,ee_temp1; uchar WDT_NUM=0; uchar const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值01234567 uchar code seg[]={7,6,5,4,3,2,1,0};//分別對應相應的數碼管點亮,即位碼 unsigned long disp_date; void fade(); void fade1(); /*************************** 看門狗子程序*************************/ void watchdog_timer() { if(WDT_NUM==5) { WDT_NUM=0; led_wd=!led_wd; } WDT_NUM++; WDT_CONTR=0x3f; } /******************************************************************/ void delay(unsigned int cnt) { while(--cnt); } /*--------------------------延時1ms程子程序-----------------------*/ void delay_1ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=126;y>0;y--); } /*--------------------------延時1ms程子程序-----------------------*/ delay1000() { uchar i,j; i=5; do{j=95; do{j--;} while(j); i--; } while(i); } /*---------------------------延時882us子程序-----------------------*/ delay882() { uchar i,j; i=6; do{j=71; do{j--;} while(j); i--; }while(i); } /*--------------------------延時2400us程子程序-----------------------*/ delay2400() { uchar i,j; i=5; do{j=237; do{j--;} while(j); i--; }while(i); } /**********************************************************************/ /* void display() { uchar i; for(i=0;i<8;i++) { P0=dofly[disp_date%10];//取顯示數據,段碼 P2=seg[i]; //取位碼 delay_1ms(1); disp_date/=10; } } */ /*********************************************************************/ uchar EEPROM_read(uint addr)//EEPROM字節讀 { ISP_CONTR=0x83; //系統時鐘<12M時,對ISP_CONTR寄存器設置的值,本電路為11.0592M ISP_CMD=1; //字節讀 ISP_ADDRH=(addr&0xff00)>>8; ISP_ADDRL=addr&0x00ff; ISP_TRIG=0x46; ISP_TRIG=0xb9; _nop_(); _nop_(); return ISP_DATA; } //-------------------------------------------------------------------- void EEPROM_write(uint addr,uchar dat)//EEPROM字節寫 { ISP_CONTR=0x83; //系統時鐘<12M時,對ISP_CONTR寄存器設置的值,本電路為11.0592M ISP_CMD=2; //字節編程 ISP_ADDRH=(addr&0xff00)>>8; ISP_ADDRL=addr&0x00ff; ISP_DATA=dat; ISP_TRIG=0x46; ISP_TRIG=0xb9; _nop_(); _nop_(); } //-------------------------------------------------------------------- void EEPROM_ERASE(uint addr)//EEPROM扇區擦除 { ISP_CONTR=0x83; //系統時鐘<12M時,對ISP_CONTR寄存器設置的值,本電路為11.0592M ISP_CMD=3; //扇區擦除 ISP_ADDRH=(addr&0xff00)>>8; ISP_ADDRL=addr&0x00ff; ISP_TRIG=0x46; ISP_TRIG=0xb9; _nop_(); _nop_(); } //************************************************************** /*----------------------------------------------------------*/ /*-----------------------紅外解碼程序(核心)-----------------*/ /*----------------------------------------------------------*/ void IR_decode() { uchar i,j; while(IR_RE==0); delay2400(); if(IR_RE==1) //延時2.4ms后如果是高電平則是新碼 { delay1000(); delay1000(); for(i=0;i<4;i++) { for(j=0;j<8;j++) { while(IR_RE==0); //等待地址碼第1位高電平到來 delay882(); //延時882us判斷此時引腳電平 ///CY=IR_RE; if(IR_RE==0) { date[i]>>=1; date[i]=date[i]|0x00; } else if(IR_RE==1) { delay1000(); date[i]>>=1; date[i]=date[i]|0x80; } } //1位數據接收結束 } //32位二進制碼接收結束 } } /* void LED_PWM() { lade_2=num; //384 lade_4=num; //384 while(lade_2!=0&Flag2==1) { for(lade_3=512;lade_3>lade_4;lade_3--) //512 { led_port=0x00; delay(1); } lade_3=512; //512 lade_4--; for(lade_1=0;lade_1<lade_2;lade_1++) { led_port=0x38; //c7 delay(1); } lade_1=0; lade_2--; if(temp!=0x0c&Flag2==1) { lade_2=0; } lade_2=num; //384 lade_4=num; //384 } } */ void calc() { EEPROM_read(0x2000); ee_temp1=ISP_DATA; ee_temp=ee_temp1&0x0f; //************************************* 1 /* if(date[3]==0xff&Flag2==1) { if(num>=20) { num=num-80; } //else num=1; LED_PWM(); } if(date[3]==0xfe&Flag2==1) { if(num<=500) { num=num+80; } // else num=511; LED_PWM(); } if(ee_temp1==0xfd) { led_port=0x00; watchdog_timer(); } if(ee_temp1==0xfc) { led_port=0x00; led_r=1; led_g=1; led_b=1; watchdog_timer(); } */ //********************************************** 2 if(ee_temp1==0xfb) { led_port=0x00; led_r=1; watchdog_timer(); } if(ee_temp1==0xfa) { led_port=0x00; led_g=1; watchdog_timer(); } if(ee_temp1==0xf9) { led_port=0x00; led_b=1; watchdog_timer(); } if(ee_temp1==0xf8) { led_port=0x00; led_r=1; led_g=1; led_b=1; watchdog_timer(); } //************************************** 3 if(ee_temp1==0xf7) { uint fade_1,fade_2,fade_3,fade_4; fade_2=448; //384 fade_4=448; //384 while(fade_2!=0&ee_temp==0x07) { for(fade_3=512;fade_3>fade_4;fade_3--) //512 { led_port=0x10; delay(1); } fade_3=512; //512 fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x08; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x07) { fade_2=0; } watchdog_timer(); fade_2=448; //384 fade_4=448; //384 } } if(ee_temp1==0xf6) { uint fade_1,fade_2,fade_3,fade_4; fade_2=448; //384 fade_4=448; //384 while(fade_2!=0&ee_temp==0x06) { for(fade_3=512;fade_3>fade_4;fade_3--) //512 { led_port=0x20; delay(1); } fade_3=512; //512 fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x10; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x06) { fade_2=0; } watchdog_timer(); fade_2=448; //384 fade_4=448; //384 } } if(ee_temp1==0xf5) { uint fade_1,fade_2,fade_3,fade_4; fade_2=448; //384 fade_4=448; //384 while(fade_2!=0&ee_temp==0x05) { for(fade_3=512;fade_3>fade_4;fade_3--) //512 { led_port=0x08; delay(1); } fade_3=512; //512 fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x20; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x05) { fade_2=0; } watchdog_timer(); fade_2=448; //384 fade_4=448; //384 } } if(ee_temp1==0xf4) { while(ee_temp==4) { led_port=0x00; led_r=1; delay_1ms(200); led_port=0x00; led_r=1; led_g=1; delay_1ms(200); led_port=0x00; led_g=1; delay_1ms(200); watchdog_timer(); led_port=0x00; led_g=1; led_b=1; delay_1ms(200); led_port=0x00; led_b=1; delay_1ms(200); led_port=0x00; led_b=1; led_r=1; delay_1ms(200); watchdog_timer(); } } //************************************** 4 if(ee_temp1==0xf3) { uint fade_1,fade_2,fade_3,fade_4; fade_2=416; //384 fade_4=416; //384 while(fade_2!=0&ee_temp==0x03) { for(fade_3=512;fade_3>fade_4;fade_3--) //512 { led_port=0x10; delay(1); } fade_3=512; //512 fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x08; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x03) { fade_2=0; } watchdog_timer(); fade_2=416; //384 fade_4=416; //384 } } if(ee_temp1==0xf2) { uint fade_1,fade_2,fade_3,fade_4; fade_2=384; //384 fade_4=384; //384 while(fade_2!=0&ee_temp==0x02) { for(fade_3=512;fade_3>fade_4;fade_3--) //512 { led_port=0x20; delay(1); } fade_3=512; //512 fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x10; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x02) { fade_2=0; } watchdog_timer(); fade_2=384; //384 fade_4=384; //384 } } if(ee_temp1==0xf1) { uint fade_1,fade_2,fade_3,fade_4; fade_2=348; //384 fade_4=348; //384 while(fade_2!=0&ee_temp==0x01) { for(fade_3=512;fade_3>fade_4;fade_3--) //512 { led_port=0x08; delay(1); } fade_3=512; //512 fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x20; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x01) { fade_2=0; } watchdog_timer(); fade_2=348; //384 fade_4=348; //384 } } if(ee_temp1==0xf0) { while(ee_temp==0) { led_port=0x00; led_r=1; delay_1ms(500); watchdog_timer(); led_port=0x00; led_g=1; delay_1ms(500); led_port=0x00; led_b=1; delay_1ms(500); watchdog_timer(); } } //******************************************** 5 if(ee_temp1==0xef) { uint fade_1,fade_2,fade_3,fade_4; fade_2=384; //384 fade_4=384; //384 while(fade_2!=0&ee_temp==0x0f) { for(fade_3=512;fade_3>fade_4;fade_3--) //512 { led_port=0x10; delay(1); } fade_3=512; //512 fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x08; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x0f) { fade_2=0; } watchdog_timer(); fade_2=384; //384 fade_4=384; //384 } } if(ee_temp1==0xee) { uint fade_1,fade_2,fade_3,fade_4; fade_2=320; //384 fade_4=320; //384 while(fade_2!=0&ee_temp==0x0e) { for(fade_3=512;fade_3>fade_4;fade_3--) //512 { led_port=0x20; delay(1); } fade_3=512; //512 fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x10; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x0e) { fade_2=0; } watchdog_timer(); fade_2=320; //384 fade_4=320; //384 } } if(ee_temp1==0xed) { uint fade_1,fade_2,fade_3,fade_4; fade_2=320; //384 fade_4=320; //384 while(fade_2!=0&ee_temp==0x0d) { for(fade_3=512;fade_3>fade_4;fade_3--) //512 { led_port=0x08; delay(1); } fade_3=512; //512 fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x20; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x0d) { fade_2=0; } watchdog_timer(); fade_2=320; //384 fade_4=320; //384 } } if(ee_temp1==0xec) fade(); //******************************************* 6 if(ee_temp1==0xeb) { led_port=0x00; led_r=1; led_g=1; watchdog_timer(); } if(ee_temp1==0xea) { led_port=0x00; //led_r=0; led_g=1; led_b=1; watchdog_timer(); } if(ee_temp1==0xe9) { led_port=0x00; led_r=1; //led_g=0; led_b=1; watchdog_timer(); } if(ee_temp1==0xe8) fade1(); } void fade() { // uchar i; uint fade_1,fade_2,fade_3,fade_4; fade_2=512; fade_4=511; while(fade_2!=0&ee_temp==0x0c) { for(fade_3=512;fade_3>fade_4;fade_3--) { led_port=0x10; delay(1); } fade_3=512; fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x08; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x0c) { fade_2=0; } } watchdog_timer(); fade_2=512; fade_4=511; while(fade_2!=0&ee_temp==0x0c) { if(ee_temp!=0x0c) { fade_2=0; } for(fade_3=512;fade_3>fade_4;fade_3--) { led_port=0x20; delay(1); // watchdog_timer(); } fade_3=512; fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x10; delay(1); // watchdog_timer(); } fade_1=0; fade_2--; } watchdog_timer(); fade_2=512; fade_4=511; while(fade_2!=0&ee_temp==0x0c) { if(ee_temp!=0x0c) { fade_2=0; } for(fade_3=512;fade_3>fade_4;fade_3--) { led_port=0x08; delay(1); watchdog_timer(); } fade_3=512; fade_4--; watchdog_timer(); for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x20; delay(1); watchdog_timer(); } fade_1=0; fade_2--; } watchdog_timer(); } void fade1() { // uchar i; uint fade_1,fade_2,fade_3,fade_4; fade_2=128; fade_4=127; while(fade_2!=0&ee_temp==0x08) { for(fade_3=128;fade_3>fade_4;fade_3--) { led_port=0x10; delay(1); } fade_3=128; fade_4--; for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x08; delay(1); } fade_1=0; fade_2--; if(ee_temp!=0x08) { fade_2=0; } } watchdog_timer(); fade_2=128; fade_4=127; while(fade_2!=0&ee_temp==0x08) { if(ee_temp!=0x08) { fade_2=0; } for(fade_3=128;fade_3>fade_4;fade_3--) { led_port=0x20; delay(1); } fade_3=128; fade_4--; for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x10; delay(1); } fade_1=0; fade_2--; } watchdog_timer(); fade_2=128; fade_4=127; while(fade_2!=0&ee_temp==0x08) { if(ee_temp!=0x08) { fade_2=0; } for(fade_3=128;fade_3>fade_4;fade_3--) { led_port=0x08; delay(1); } fade_3=128; fade_4--; for(fade_1=0;fade_1<fade_2;fade_1++) { led_port=0x20; delay(1); } fade_1=0; fade_2--; } watchdog_timer(); } void init() { led_port=0x00; /* led_r=1; delay_1ms(500); led_port=0x00; led_g=1; delay_1ms(500); led_port=0x00; led_b=1; delay_1ms(500); led_port=0x00; */ delay_1ms(2); WDT_CONTR=0x3f; delay_1ms(500); } //******************************** void main() { init(); Flag2=0; SP=0x60; //堆棧指針 EX0=1; //允許外部中斷0,用于檢測紅外遙控器按鍵 EA=1; num=255; while(1) { calc(); } } //******************************************************************** /*------------------------外部中斷0程序-------------------------*/ /*------------------主要用于處理紅外遙控鍵值--------------------*/ void int0() interrupt 0 { uchar i; Flag2=0; /////// k=0; EX0=0; //檢測到有效信號關中斷,防止干擾 for(i=0;i<4;i++) { delay1000(); if(IR_RE==1){k=1;} //剛開始為9ms的引導碼. } led_port=0x00; if(k==0) { IR_decode(); //如果接收到的是有效信號,則調用解碼程序 if(date[3]>=0xe8) { if(date[3]<=0xfb) { temp1=date[3]; EEPROM_ERASE(0x2000); //STC_EEROM_0X2000 temp1 EEPROM_write(0x2000,temp1); EEPROM_read(0x2000); ee_temp1=ISP_DATA; ee_temp=ee_temp1&0x0f; /* temp=date[3]&0x0f; EEPROM_ERASE(0x2004); //STC_EEROM_0X2004 temp EEPROM_write(0x2004,temp); */ } else { EEPROM_read(0x2000); ee_temp1=ISP_DATA; ee_temp=ee_temp1&0x0f; } } delay2400(); delay2400(); delay2400(); delay_1ms(500); } EX0=1; //開外部中斷,允許新的遙控按鍵 }
上傳時間: 2016-07-02
上傳用戶:184890962
/****************temic*********t5557***********************************/ #include <at892051.h> #include <string.h> #include <intrins.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //STC12C2051AD的SFR定義 sfr WDT_CONTR = 0xe1;//stc2051的看門狗?????? /**********全局常量************/ //寫卡的命令 #define write_command0 0//寫密碼 #define write_command1 1//寫配置字 #define write_command2 2//密碼寫數據 #define write_command3 3//喚醒 #define write_command4 4//停止命令 #define TRUE 1 #define FALSE 0 #define OK 0 #define ERROR 255 //讀卡的時間參數us #define ts_min 250//270*11.0592/12=249//取近似的整數 #define ts_max 304//330*11.0592/12=304 #define t1_min 73//90*11.0592/12=83:-10調整 #define t1_max 156//180*11.0592/12=166 #define t2_min 184//210*11.0592/12=194 #define t2_max 267//300*11.0592/12=276 //***********不采用中斷處理:采用查詢的方法讀卡時關所有中斷****************/ sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13 sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE PIN=6 sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut PIN=2 sbit wtd_sck = P1^7;//SPI總線 sbit wtd_si = P1^3; sbit wtd_so = P1^2; sbit iic_data = P1^2;//lcd IIC sbit iic_clk = P1^7; sbit led_light = P1^6;//測試綠燈 sbit led_light1 = P1^5;//測試紅燈 sbit led_light_ok = P1^1;//讀卡成功標志 sbit fengmingqi = P1^5; /***********全局變量************************************/ uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密碼 //uchar idata card_snr[4]; //配置字 uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7}; //存儲卡上用戶數據(1-7)7*4=28 uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收數組ram uchar command; //第一個命令 uchar command1;// //uint temp; uchar j,i; uchar myaddr = 8; //uchar ywqz_count,time_count; //ywqz jishu: uchar bdata DATA; sbit BIT0 = DATA^0; sbit BIT1 = DATA^1; sbit BIT2 = DATA^2; sbit BIT3 = DATA^3; sbit BIT4 = DATA^4; sbit BIT5 = DATA^5; sbit BIT6 = DATA^6; sbit BIT7 = DATA^7; uchar bdata DATA1; sbit BIT10 = DATA1^0; sbit BIT11 = DATA1^1; sbit BIT12 = DATA1^2; sbit BIT13 = DATA1^3; sbit BIT14 = DATA1^4; sbit BIT15 = DATA1^5; sbit BIT16 = DATA1^6; sbit BIT17 = DATA1^7; bit i_CurrentLevel;//i_CurrentLevel BIT 00H(Saves current level of OutPut pin of U2270B) bit timer1_end; bit read_ok = 0; //緩存定時值,因用同一個定時器 union HLint { uint W; struct { uchar H;uchar L; } B; };//union HLint idata a union HLint data a; //緩存定時值,因用同一個定時器 union HLint0 { uint W; struct { uchar H; uchar L; } B; };//union HLint idata a union HLint0 data b; /**********************函數原型*****************/ //讀寫操作 void f_readcard(void);//全部讀出1~7 AOR喚醒 void f_writecard(uchar x);//根據命令寫不同的內容和操作 void f_clearpassword(void);//清除密碼 void f_changepassword(void);//修改密碼 //功能子函數 void write_password(uchar data *data p);//寫初始密碼或數據 void write_block(uchar x,uchar data *data p);//不能用通用指針 void write_bit(bit x);//寫位 /*子函數區*****************************************************/ void delay_2(uint x) //延時,時間x*10us@12mhz,最小20us@12mhz { x--; x--; while(x) { _nop_(); _nop_(); x--; } _nop_();//WDT_CONTR=0X3C;不能頻繁的復位 _nop_(); } ///////////////////////////////////////////////////////////////////// void initial(void) { SCON = 0x50; //串口方式1,允許接收 //SCON =0x50; //01010000B:10位異步收發,波特率可變,SM2=0不用接收到有效停止位才RI=1, //REN=1允許接收 TMOD = 0x21; //定時器1 定時方式2(8位),定時器0 定時方式1(16位) TCON = 0x40; //設定時器1 允許開始計時(IT1=1) TH1 = 0xfD; //FB 18.432MHz 9600 波特率 TL1 = 0xfD; //fd 11.0592 9600 IE = 0X90; //EA=ES=1 TR1 = 1; //啟動定時器 WDT_CONTR = 0x3c;//使能看門狗 p_U2270B_Standby = 0;//單電源 PCON = 0x00; IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0 led_light1 = 1; led_light = 0; p_U2270B_OutPut = 1; } /************************************************/ void f_readcard()//讀卡 { EA = 0;//全關,防止影響跳變的定時器計時 WDT_CONTR = 0X3C;//喂狗 p_U2270B_CFE = 1;// delay_2(232); //>2.5ms /* // aor 用喚醒功能來防碰撞 p_U2270B_CFE = 0; delay_2(18);//start gap>150us write_bit(1);//10=操作碼讀0頁 write_bit(0); write_password(&bankdata[24]);//密碼block7 p_U2270B_CFE =1 ;// delay_2(516);//編程及確認時間5.6ms */ WDT_CONTR = 0X3C;//喂狗 led_light = 0; b.W = 0; while(!(read_ok == 1)) { //while(p_U2270B_OutPut);//等一個穩定的低電平?超時判斷? while(!p_U2270B_OutPut);//等待上升沿的到來同步信號檢測1 TR0 = 1; //deng xia jiang while(p_U2270B_OutPut);//等待下降沿 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//定時器晚啟動10個周期 //同步頭 if((324 < a.W) && (a.W < 353)) ;//檢測同步信號1 else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //等待上升沿 while(!p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//b.N1<<=8; if(a.B.L < 195);//0.5p else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //讀0~7塊的數據 for(j = 0;j < 28;j++) { //uchar i; for(i = 0;i < 16;i++)//8個位 { //等待下降沿的到來 while(p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2;//先左移再賦值 b.B.L += 0xc0; i++; } else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p { b.W >>= 1; b.B.L += 0x80; } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; while(!p_U2270B_OutPut);//上升 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2; i++; } else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P //else if(!(a.W==0)) { b.W >>= 1; //temp+=0x00; //led_light1=0;led_light=1;delay_2(40000); } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; } //取出奇位 DATA = b.B.L; BIT13 = BIT7; BIT12 = BIT5; BIT11 = BIT3; BIT10 = BIT1; DATA = b.B.H; BIT17 = BIT7; BIT16 = BIT5; BIT15 = BIT3; BIT14 = BIT1; bankdata[j] = DATA1; } read_ok = 1;//讀卡完成了 read_error: _nop_(); } } /***************************************************/ void f_writecard(uchar x)//寫卡 { p_U2270B_CFE = 1; delay_2(232); //>2.5ms //psw=0 standard write if (x == write_command0)//寫密碼:初始化密碼 { uchar i; uchar data *data p; p = cominceptbuff; p_U2270B_CFE = 0; delay_2(31);//start gap>330us write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_bit(0);//寫鎖定位0 for(i = 0;i < 35;i++) { write_bit(1);//寫數據位1 } p_U2270B_CFE = 1; led_light1 = 0; led_light = 1; delay_2(40000);//測試使用 //write_block(cominceptbuff[4],p); p_U2270B_CFE = 1; bankdata[20] = cominceptbuff[0];//密碼存入 bankdata[21] = cominceptbuff[1]; bankdata[22] = cominceptbuff[2]; bankdata[23] = cominceptbuff[3]; } else if (x == write_command1)//配置卡參數:初始化 { uchar data *data p; p = cominceptbuff; write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_bit(0);//寫鎖定位0 write_block(cominceptbuff[4],p); p_U2270B_CFE= 1; } //psw=1 pssword mode else if(x == write_command2) //密碼寫數據 { uchar data*data p; p = &bankdata[24]; write_bit(1);//寫操作碼1:10 write_bit(0);//寫操作碼0 write_password(p);//發口令 write_bit(0);//寫鎖定位0 p = cominceptbuff; write_block(cominceptbuff[4],p);//寫數據 } else if(x == write_command3)//aor //喚醒 { //cominceptbuff[1]操作碼10 X xxxxxB uchar data *data p; p = cominceptbuff; write_bit(1);//10 write_bit(0); write_password(p);//密碼 p_U2270B_CFE = 1;//此時數據不停的循環傳出 } else //停止操作碼 { write_bit(1);//11 write_bit(1); p_U2270B_CFE = 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /************************************/ void f_clearpassword()//清除密碼 { uchar data *data p; uchar i,x; p = &bankdata[24];//原密碼 p_U2270B_CFE = 0; delay_2(18);//start gap>150us //操作碼10:10xxxxxxB write_bit(1); write_bit(0); for(x = 0;x < 4;x++)//發原密碼 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT0); DATA >>= 1; } } write_bit(0);//鎖定位0:0 p = &cominceptbuff[0]; write_block(0x00,p);//寫新配置參數:pwd=0 //密碼無效:即清除密碼 DATA = 0x00;//停止操作碼00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /*********************************/ void f_changepassword()//修改密碼 { uchar data *data p; uchar i,x,addr; addr = 0x07;//block7 p = &Nkey_a[0];//原密碼 DATA = 0x80;//操作碼10:10xxxxxxB for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } for(x = 0;x < 4;x++)//發原密碼 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT7); DATA >>= 1; } } write_bit(0);//鎖定位0:0 p = &cominceptbuff[0]; write_block(0x07,p);//寫新密碼 p_U2270B_CFE = 1; bankdata[24] = cominceptbuff[0];//密碼存入 bankdata[25] = cominceptbuff[1]; bankdata[26] = cominceptbuff[2]; bankdata[27] = cominceptbuff[3]; DATA = 0x00;//停止操作碼00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /***************************子函數***********************************/ void write_bit(bit x)//寫一位 { if(x) { p_U2270B_CFE = 1; delay_2(32);//448*11.0592/120=42延時448us p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26寫1 } else { p_U2270B_CFE = 1; delay_2(92);//192*11.0592/120=18 p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26寫0 } } /*******************寫一個block*******************/ void write_block(uchar addr,uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)//block0數據 { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } DATA = addr <<= 5;//0地址 for(i = 0;i < 3;i++) { write_bit(BIT7); DATA <<= 1; } } /*************************************************/ void write_password(uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)// { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } } /*************************************************/ void main() { initial(); TI = RI = 0; ES = 1; EA = 1; delay_2(28); //f_readcard(); while(1) { f_readcard(); //讀卡 f_writecard(command1); //寫卡 f_clearpassword(); //清除密碼 f_changepassword(); //修改密碼 } }
標簽: 12345
上傳時間: 2017-10-20
上傳用戶:my_lcs
為微蕊的單片機與LCD interface
上傳時間: 2018-10-25
上傳用戶:mike329
用 verilog HDL 語言搭建一個以 ARM Cortex-M0 為處理器核的嵌入式SOC系統,系統包含以下幾個部分: (1)ARM Cortex-M0核 (2)AHB總線譯碼器 (3)AHB總線從設備多路復用器 (4)片上存儲器外設 (5)LED外設 (6)七段數碼管 (7)定時器 (8)UART
上傳時間: 2020-03-21
上傳用戶:wssss
單片機課程設計 籃球記分器 LANE STUDIO CONTENT 1 2 3 4 5 系統功能 課題運用的知識點 系統原理的設計 硬件部分的設計 軟件部分設計 1 系統功能 PART 1 PART 1 隨著科技的迅猛發展,單片機在計算機應用領域中起到了越來越重要的作用. 單片機體積小,功能強,集成了微型機的各部件,大大縮短了系統內信號傳送的距離,從而提高了系統的可靠性及運行速度。 該系統主要是實現以下幾種功能: ① 計分:能同時顯示甲、乙兩隊比分,最大計分數為99。能分別對甲、乙兩隊比分進行加分。 ② 計時:從比賽開始時啟動計時工作方式,初始時間為00,最大計時為99 分鐘, 經過修改后應該還能實施計時暫停,還能設定為倒計時。 ③ 交換比分:中場交換比賽場地時,能交換甲、乙兩隊比分的位置。 ④ 哨音提示:設定的比賽時間到了,能自動哨音提示比賽結束. PART 1 2 課題運用的知識點 PART 1 PART 2 1 2 3 人機接口 AT89C51單片機的運用 LED數碼管的運用 本課題主要運用單片機設計知識設計籃球賽記時計分器,因此涉及到的知識點主要有以下幾點: 3 系統原理的設計 PART 3 按 鈕 單片機芯 片 時間顯示 比分顯示 為了實現原理圖的設計目標,同時結合自己獲取的各種資料以及要達到的具體功能,所確定的組成框圖如圖。 一、組成框圖的組成說明 二、組成框圖的組成及其功能說明 1、LED能夠顯示比賽成績和比賽時間,并且能夠顯示調整后的比賽成績和時間 2、控制按鈕由兩隊的加分按鈕組成、以中場中止按鈕組成。 3、暫停比賽時間 4 硬件部分的設計 PART 4 單片機接口電路 復位電路 1 復位是指單片機的CPU或系統中其它的部件處于某一確定的初試狀態,并從這一狀態開始工作。除了進入系統的正常初始化之外,當由于程序運行出錯或是操作錯誤使系統處于鎖死狀態,為擺脫困境,需要進行按鍵復位。 通常單片機的復位操作有上電復位、信號復位、運行監視復位,運行監視復位有程序運行監視和電源監視。 在本設計中,則是采用上電復位,原理是當電源接通后,上電瞬間RESET引腳獲取高電平,該高電平需要電容充電來維持,當高電平維持在兩個機械周期以上則單片機能被復位。 PART 4 2 晶體振蕩電路 晶體振蕩電路用于產生單片機工作時所需的時鐘信號,從而保證各部分工作的同步。單片機內部有一個高增益反相反大器,只要在輸入端XTAL1與輸出XTAL2之間掛一個晶體振蕩器和微調電容就可以構成一個穩定的自激震蕩器并在單片機內部產生的時鐘脈沖信號。電容器C1與C2用于穩定頻率和快速起振,電容一般在5PF—30PF,本設計電容為30PF。 PART 4 3 鍵盤接口電路 與通用單片機相比,單片機應用系統中的鍵盤種類很多,鍵盤中按鍵數量設置依系統操作要求而定。單片機應用系統中的鍵盤有獨立式和行列式兩種。
上傳時間: 2022-06-22
上傳用戶:canderile
本設計為42DRV8825基于stm32 控制, DRV8825 來實現驅動步進電機,正轉 ,反轉,32細分DRV8825是具有片上1/32 微步進分度器的2.5A 雙極步進電機驅動器。該DRV8825驅動器打造color: rgb(5, 163, 94); text-decoration-line: none; font-family: 微軟雅黑, 42步進電機驅動板外部有檢測口,檢測電機是否到位
上傳時間: 2022-07-01
上傳用戶:
約束管理器是一個交叉的平臺,以工作簿和工作表的形式在Cadence PCB設計流程中用于管理所有工具的高速電子約束。約束管理器讓你定義、查看和校驗從原理圖到分析到PCB設計實現的設計流程中每一步的約束。可以使用約束管理器和SigXplorer Expert開發電路的拓撲并得出電子約束,可以包含定制約束、定制測量和定制激勵。本培訓教材描述的主要是怎樣在約束管理器中提取約束,并且約束如何與原理圖和PCB的屬性同步。本教材的內容是約束管理器、Concept HDL和PCB Design的緊密集成的集錦。所謂約束就是用戶定義的限制條件,當在板上走線和放置元件時會遵守這些約束。電子約束(ECSets)就是限制PCB上與電行為有關的對象,比如可以設置某個網絡最大傳輸延遲為2ns。
上傳時間: 2022-07-07
上傳用戶:jason_vip1
本文闡述了利用DRV8825驅動步進電機的工作原理、使用方法并給出了具體的硬件和軟件設計。在此基礎上介紹了德州儀器公司的步進電機驅動芯片DRV8825,該芯片具有片上 1/32 微步進分度器的 2.5A 雙極步進電機驅動器,特別適合驅動小型步進電機。目前被廣泛應用在3D打印機、微型步進電機上,具備一定的實用價值。步進電機是將電脈沖信號轉變為角位移或線位移的開環控制元,可以分別通過控制脈沖個數和頻率,從而達到準確定位和調速的目的,在機電一體化產品中有著廣泛的應用。設計中常用的步進電機又有單極型和雙極型之分。相對而言,單極型電機雖然應用效率較低,但是驅動電路簡單,在早些年有較大的成本優勢,特別是在高電壓、大電流的應用中。不過近年來,隨著各大廠家雙極型電機專用驅動芯片的大量推出,在性能不斷提高的同時,價格也在不斷下降,再綜合了其占用 PCB 空間小,控制簡單等優點[1-3].采用雙極型電機及專用驅動芯片取代單極性電機已經成為了一種趨勢。本文將介紹一種雙極型電機專用控制芯片 DRV8825,并提供一個基于該芯片的打印機電機驅動電路設計方案。
上傳時間: 2022-07-10
上傳用戶:
eeworm.com VIP專區 單片機源碼系列 30資源包含以下內容:1. 8051系列單片機C程序設計完全手冊.pdf2. protues中常用原件中英對照.doc3. 單片機應用設計.ppt4. protel99se-微典控制.zip5. stc不斷電代碼.doc6. STC12C5A60S2資料.pdf7. 8051系列單片機C程序設計完全手冊.pdf8. 自制觸摸按鍵.doc9. 80C51定時器計數器組成及應用.ppt10. 單片機C語言簡易數字頻率計課程設計.rar11. keil中的錯誤及警告.pdf12. 80C51中斷系統組成及應用.ppt13. 數字時鐘.rar14. 51單片機帶SD卡的彩屏手機界面模擬_-_單片機設計報告.doc15. 80C51單片機IO口應用及擴展.ppt16. 按鍵程序討論.rar17. 80C51單片機指令系統及編程.ppt18. 定時器初值計算器.exe19. Windows下通過計算機并口讀寫24系列I2C存儲器.zip20. 單片機課件(單片微型計算機原理及應用)(第1,2,3章).ppt21. 51單片機開發板原理圖.pdf22. 51單片機資料.rar23. Proteus_ARES的PCB設計.pdf24. Keil中文版.rar25. 基于51單片機的lcd12864的畫圖程序.doc26. STM32固件庫詳解.pdf27. USB攝像頭原理圖.pdf28. 單片機基礎第三版課后答案_李廣弟.pdf29. (1小時學會C語言51單片機)C語言入門教程.doc30. 用單片機80C51控制流水燈.rar31. 無線發射模塊XL24L01_原廠及_CC2500共用資料.rar32. 運用單片機制作的高精度數顯計數器.rar33. 步進電機控制入門資料.pdf34. KEIL 無限制完全破解版及教程使用指南.rar35. 怎樣才能學好單片機.pdf36. 電子時鐘課程設計.doc37. 單片機開發.rar38. NEC紅外解碼12Mhz.doc39. 刪繁就簡單片機從入門到精通.pdf40. MSP430系列超低功耗16位單片機原理與應用.pdf41. 單片機與GPRS通訊要點.pdf42. MSP430系列單片機實用C語言(電子版書籍).PDF43. STM32固件庫使用手冊中文.pdf44. 資源測試.exe45. 南航MSP430課程試用書.pdf46. STM32F103XXX參考手冊 中文完整細節版.pdf47. 單片機PWM智能調速.doc48. MSP430F149(中文).pdf49. Cortex-M3技術參考手冊..pdf50. TX-1C型單片機實驗板原理圖.pdf51. MSP430最小系統板 使用說明.pdf52. 《ARM Cortex-M3開發指南》目錄.pdf53. 單片機初學之路.ppt54. MSP430最小系統電路圖.pdf55. Contex M3 權威指南一.pdf56. LESSON3數碼管靜態顯示及定時器和中斷應用.ppt57. 基于磁場檢測的尋線小車傳感器布局研究.pdf58. MSP430_C語言例程注釋詳.pdf59. LESSON5_鍵盤.ppt60. C語言編程實例100題.doc61. Contex M3 權威指南二.pdf62. C語言難點講解.pdf63. 無源蜂鳴器唱歌 世上只有媽媽好.zip64. Keil_uvision_4基本使用教程(菜鳥必備).pdf65. 單片機類畢業設計.rar66. 單片機IO口知識.ppt67. 脫機ISP編程器.rar68. 單片機C語言程序設計實訓100例——基于8051+Proteus仿真.pdf69. ARM高校培訓-CortexM4.pdf70. AVR單片機 C語言程序設計經典實用.rar71. 芯睿單片機各類型號常用選型表.xls72. MSP430F249資料.pdf73. 正余弦編碼器的細分技術.pdf74. led8×8滾動顯示PROTEUS.rar75. 51定時器小工具.exe76. 基于AT89c51的溫度控制器設計.pdf77. 單片機原理及應用.rar78. 基于MFC與單片機串口調試程序.docx79. C51常用子程序 [精].rar80. 51單片機控制的遙控車制作過程總結和體會.docx81. 基于AT89S52的電子萬年歷設計報告.doc82. 單片機的40個實驗.pdf83. 51單片機pwm控制.zip84. 智能往返小車的控制設計.doc85. STC89C52資料.pdf86. avr單片機icc寫的密碼鎖.zip87. 模擬串口的一些介紹.doc88. TC9012紅外發射.pdf89. 單片機編程實例大全.doc90. 基于51單片機數字時鐘的設計.doc91. 8x8點陣字模提取軟件.rar92. Keil_uVision3學習教程.doc93. 8x8LED顯示原理.doc94. PCF8591中文規格書.pdf95. PIC18F2420_2520_4420_4520_CN.pdf96. AVR單片機軟硬件設計入門教程-ppt.zip97. STC89C52RC-RD使用手冊.pdf98. ATMEGA單片機制作智能充電器的詳細說明.pdf99. Motorola微控制器MC68HC08原理及其嵌入式應用.PDF100. Protel DXP元件庫[精華].rar
上傳時間: 2013-07-10
上傳用戶:eeworm
eeworm.com VIP專區 單片機源碼系列 49資源包含以下內容:1. STM32中斷與嵌套NVIC快速入門.rar2. 教你如何看懂時序圖.rar3. AVR32801: UC3A3 Schematic Chec.pdf4. AT指令簡編匯集.pdf5. HT MCU間接尋址的應用.rar6. 基于C8051F020和Zigbee的汽車測試系統設計.rar7. AVR事無巨細系列.pdf8. 基于S3C2440A的銀行評價器的設計.rar9. 基于PIC16LF874單片機的電容測量模塊.rar10. S52開發板功能說明.pdf11. 基于ARM單片機的自動測高測距小車.rar12. LPC1300片上USB驅動應用與實例.zip13. 基于MSP430單片機F149的GSM電子門匙設計.pdf14. 基于C8051F040的以太網-CAN轉換電路設計.rar15. 基于凌陽單片機的步進電機加減速的控制方法.rar16. 硬件電路設計之主芯片選型.rar17. 嵌入式處理器和數字信號處理器(DSP)選型手冊.rar18. 單片機P0口的片外數據存儲器擴展.rar19. LTC4310絕緣雙向I2C總線通信方案.rar20. 基于PCI9054的數據轉換模塊設計.rar21. 單片機Flash存儲器壞塊自動檢測.rar22. 下載燒錄快速入門手冊.rar23. 基于單片機的住宅電子服務系統.rar24. 基于ATmega8的雙軸太陽跟蹤器設計.rar25. 單片機通訊電路的抗干擾設計.rar26. 基于ATmega16L單片機的溫度控制系統設計.rar27. 基于單總線式無線溫度采集系統設計.rar28. 基于P89V51RD2的功率因數測量儀設計.rar29. 基于MC9S12HZ256的總線式汽車數字儀表設計.rar30. 工控軟件組態王與單片機多機串口通訊的設計.rar31. 基于AVR的新型防汽車追尾安全裝置設計.rar32. 串行時鐘PCF8583在微機保護裝置中的應用.rar33. 基于C8051F320的心電監護系統設計.rar34. 基于Attiny13的投影儀防盜器設計.rar35. 基于AT89C52單片機的語音錄放系統.rar36. H.264高清編解碼器的片上系統MG3500.rar37. 基于C8051F310的山路轉彎預防警示系統.rar38. 基于CAN總線的綜自通訊規約設計.rar39. 基于AT89S52的機載電氣盒測試儀的設計.rar40. 基于PCI9052的PCI局部總線應用.rar41. 基于ISA總線與KH-9300的數據采集系統.rar42. 基于單片機89S52的多功能計數器設計.rar43. 微處理器dsPIC33F在微機保護裝置中的應用.rar44. 基于ATmega16的簡易示波器設計.rar45. 基于單片機和FPGA的多功能計數器的設計.rar46. 基于ATmega16的標記機控制系統.rar47. 基于C8051F040的方位角測試系統.rar48. 基于VHDL的微型打印機控制器設計.rar49. 基于AT89S52單片機的多功能音樂播放器.rar50. 基于PIC單片機的IC卡讀寫器的設計.pdf51. 基于C8051F060的數據采集存儲系統的設計.rar52. MCS51單片機實驗指導.pdf53. 單片機的C語言程序設計--周興華.pdf54. 基于CDC3207G的汽車儀表板設計.rar55. 單片機原理及應用實驗指導書--呂運朋.pdf56. S3F84B8 8-位CMOS MCU用戶手冊.pdf57. 基于MSP430F247和TMP275的測溫儀.rar58. 單片機現場應用中的幾個技術問題.pdf59. 單片機與PLC之間遠距離通信的實現.pdf60. iis總線:基于IIS總線的嵌入式音頻系統設計.pdf61. 《單片機與接口技術》實驗講義--杜曉.pdf62. 2.4GHz PTR4000無線嵌入式模塊高速率1Mbps、.pdf63. 自動打鈴器.pdf64. “Infineon單片機實驗”教學大綱.pdf65. PIC單片機在可編程數碼式樓宇對講系統中的應用.pdf66. Intel 8251的UART功能.pdf67. XL400編程試驗51單片機開發板.pdf68. P89V51RD2新型單片機SoftICE模式調試指南.pdf69. 海豐熱電公司800立方米水箱單片機控制系統.pdf70. 單片機與CPLD綜合應用技術.pdf71. 8-bit 80C51 Flash系列單片機--P89C66.pdf72. 單片機的串行口.pdf73. TM57PE12 8位單片機使用手冊.pdf74. PHILIPS P89C5x單片機數據手冊.pdf75. HT46R32/HT46R34 A/D+OPA型八位單片機.pdf76. 單片機應用小技巧.pdf77. MSP430F21X1混合信號控制器.pdf78. 4位單片機微控制器MC20P11XX.pdf79. MSP430系列超低功耗單片機基礎與教學實驗.pdf80. 基于89C51單片機的實驗電路板的制作.pdf81. 8位OTP單片機芯片MC10P23XXY管腳與三星9454完.pdf82. MCS-51單片機系統擴展.pdf83. 8位OTP單片機芯片MC10P22XXY.pdf84. 單片機技術概述.pdf85. 基于ATmega48的3相無刷電機的控制方法.rar86. C8051F單片機在遠端測控裝置中的應用.pdf87. 基于C8051F020單片機的多路壓力測量儀.rar88. 8位OTP單片機芯片BM22P02.pdf89. MSC1211 SINGLE-CHIP MICROPROCE.pdf90. 8位OTP單片機芯片BL35P02R.pdf91. 8位OTP單片機芯片BL22P02.pdf92. 8位OTP單片機芯片BL35P02.pdf93. HT46R23/HT46C23 8位A/D型OTP/Mask.pdf94. 8位OTP單片機芯片BL22P64.pdf95. 單片機和嵌入式LINUX開發的那點事兒.pdf96. 凌陽8位通用單片機--SPMC65系列單片機原理及開發.pdf97. AVR單片機技術培訓--李正中.pdf98. AVRISP MKII編程器使用說明.pdf99. CANopen主節點的設計方案.pdf100. SONIX 8BIT單片機26系列I/O型原理及基礎課件.pdf
上傳時間: 2013-04-15
上傳用戶:eeworm