为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

爆闪灯C51程序

2011-12-16 15页 doc 84KB 97阅读

用户头像

is_733994

暂无简介

举报
爆闪灯C51程序 爆闪灯 一,电子 1, 灯闪模式,灯闪模式可调,4个输出端口 蓝—红—蓝—红 1 2 3 4 a,四路轮流闪烁,频率可调,每路间隔可调,可一路闪,两路闪,三路闪,四路闪可调 节 例如(12—34—1234) b,四路变换工作,每路间隔可调,例如(1—2—3—4 黄闪灯模式) c,四路组合变换闪烁,每路间隔可调,例如(1—2—3—4—12—34—1234) 2,输出,电池板,蓄电池,开关的端口采用接线...
爆闪灯C51程序
爆闪灯 一,电子 1, 灯闪模式,灯闪模式可调,4个输出端口 蓝—红—蓝—红 1 2 3 4 a,四路轮流闪烁,频率可调,每路间隔可调,可一路闪,两路闪,三路闪,四路闪可调 节 例如(12—34—1234) b,四路变换工作,每路间隔可调,例如(1—2—3—4 黄闪灯模式) c,四路组合变换闪烁,每路间隔可调,例如(1—2—3—4—12—34—1234) 2,输出,电池板,蓄电池,开关的端口采用接线槽(路灯控制器那种接线端子) 3, LED一种颜色的数量在45—60PCS之间,电流控制在150mA-600mA 4, 电池板在15W,10W,6W 5,电池在20Ah,14Ah,8Ah 二,结构 1, 开一套LED反光杯,以提高亮度, 2, 电池板的方向可灵活调动 3, 电池需固定好,不能左右,上下晃动 4, 灯板和透明罩可采用插槽式的,以便好组装 5, 控制器可以固定在灯壳里面,不能有漏水到上面 6, 外壳设计成插槽拼接的,减少螺丝的使用率 #include #include typedef unsigned char uchar; typedef unsigned int uint; sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P1_7=P1^7; sfr P0M0=0X94; sfr P0M1=0X93; sfr P2M0=0X96; sfr P2M1=0X95; sfr P1M0=0X92; sfr P1M1=0X91; sfr IAP_DATA=0XC2; sfr IAP_ADDRH=0XC3; sfr IAP_ADDRL=0XC4; sfr IAP_CMD=0xc5; sfr IAP_TRIG=0XC6; sfr IAP_CONTR=0XC7; unsigned char liang_temp=1; unsigned char an_temp=1; unsigned char R_to_B_temp=1; unsigned char stop_temp=1; unsigned char mode=1; unsigned char time_key=0; unsigned char time_temp=0; unsigned char mode1_temp=0; uchar ajs,ljs; uchar rtobjs,stopjs,js3c=1; uchar rba=0; bit la=1;ksj=0; unsigned char code zhifu0[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; unsigned char code zhifu2[16]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0XFe,0Xf6,0Xee,0X3e,0X9c,0X7a,0X9e,0X8e}; //********************************************************* void delay20(void) //误差 -0.000000000002us { unsigned char a,b,c; for(c=2;c>0;c--) for(b=95;b>0;b--) for(a=209;a>0;a--); } //********************************************************* void delay500(void) //误差 0us 500ms { unsigned char a,b,c; for(c=23;c>0;c--) for(b=152;b>0;b--) for(a=70;a>0;a--); } //********************************************************* void eeprom_erase(unsigned char a) { unsigned int add=512; unsigned int add1=0; add1=add*a; IAP_ADDRH=add1/255; IAP_ADDRL=add1%255; IAP_CONTR=0X8C; IAP_CMD=0X03; IAP_TRIG=0X5A; IAP_TRIG=0XA5; _nop_(); } //********************************************************* void eeprom_writer(unsigned int add,unsigned char date) { IAP_DATA=date; IAP_ADDRH=add/255; IAP_ADDRL=add%255; IAP_CONTR=0X8C; IAP_CMD=2; IAP_TRIG=0X5A; IAP_TRIG=0XA5; _nop_(); _nop_(); _nop_(); } //*********************************************************** unsigned char eeprom_read(unsigned int add) { unsigned char date=0; IAP_ADDRH=add/255; IAP_ADDRL=add%255; IAP_CONTR=0X8C;// IAP_CMD=0X01; IAP_TRIG=0X5A; IAP_TRIG=0XA5; _nop_(); _nop_(); _nop_(); date=IAP_DATA; return(date); } //********************************************************* void show(unsigned char a) { unsigned char shi; unsigned char ge; unsigned char *p; unsigned char *p1; p=zhifu0; p1=zhifu2; shi=a/10; shi=*(p+shi);//得到编码值 ge=a%10; ge=*(p1+ge); P0=shi; P2=ge; } //********************************************************** void liang_key() { if(!P1_0) { delay20(); if(!P1_0) { liang_temp++; if(liang_temp>99) {liang_temp=1;} show(liang_temp); while(!P1_0) { while(ksj){liang_temp++;delay20();if(liang_temp>99)liang_temp=1;show(liang_temp);} } } delay20(); } } //*********************************************************** void an_key() { if(P1_0==0) { delay20(); if(P1_0==0) { an_temp++; if(an_temp>99) {an_temp=1;} show(an_temp); while(!P1_0) { while(ksj){an_temp++;delay20();if(an_temp>99)an_temp=1;show(an_temp);} } } delay20(); } } //*********************************************************** void R_to_B_key() { if(P1_0==0) { delay20(); if(P1_0==0) { R_to_B_temp++; if(R_to_B_temp>99) { R_to_B_temp=1; } show(R_to_B_temp); while(!P1_0) { while(ksj){R_to_B_temp++;delay20();if(R_to_B_temp>99)R_to_B_temp=1;show(R_to_B_temp);} } } delay20(); } } //*********************************************************** void stop_key() { if(P1_0==0) { delay20(); if(P1_0==0) { stop_temp++; if(stop_temp>99) {stop_temp=1;} show(stop_temp); while(!P1_0) { while(ksj){stop_temp++;delay20();if(stop_temp>99)stop_temp=1;show(stop_temp);} } } delay20(); } } //************************************************************ void show_mode(unsigned char a) { unsigned char ge=0; unsigned char *p1; p1=zhifu2; ge=*(p1+a); // P0=0x00; P2=ge; } //************************************************************ void set_mode() { if(!P1_0) { delay20(); TR1=1;//开定时器 if(!P1_0) { show_mode(mode); } while(time_key==0) { if(!P1_0) { delay20(); if(!P1_0) { mode++; if(mode>5) { mode=1; time_temp=0; } } show_mode(mode); delay20(); } } TR1=0;//关定时器 time_key=0; time_temp=0; TH1 = 0x3C; TL1 = 0xB0; eeprom_erase(1); eeprom_writer(0,mode); P0=0; P2=0; rtobjs= R_to_B_temp; stopjs=stop_temp; ajs=an_temp; ljs=liang_temp; rba=0; } } //*********************************************************** void set_fun()//设置时间的顺序是从亮,暗,红到蓝,停,4个步骤 第一个模式 { unsigned char panduan=0; if(!P1_1) { delay20(); if(!P1_1) { P0=zhifu0[15]; P2=zhifu2[1]; delay500(); delay500(); panduan=1; while(panduan) { liang_key(); show(liang_temp); if(!P1_1) { delay20(); panduan=0; ljs=liang_temp; delay20(); } } panduan=1; P0=zhifu0[15]; P2=zhifu2[2]; delay500(); delay500(); while(panduan) { an_key(); show(an_temp); if(!P1_1) { delay20(); panduan=0; ajs=an_temp; delay20(); } } panduan=1; P0=zhifu0[15]; P2=zhifu2[3]; delay500(); delay500(); while(panduan) { R_to_B_key(); show(R_to_B_temp); if(!P1_1) { delay20(); panduan=0; rtobjs=R_to_B_temp; delay20(); } } panduan=1; P0=zhifu0[15]; P2=zhifu2[4]; delay500(); delay500(); while(panduan) { stop_key(); show(stop_temp); if(!P1_1) { delay20(); panduan=0; stopjs=stop_temp; delay20(); } } eeprom_erase(0); eeprom_writer(0,liang_temp); eeprom_writer(1,an_temp); eeprom_writer(2,R_to_B_temp); eeprom_writer(3,stop_temp); P0=0X0; P2=0X0; // red=1; // blue=0; // yq=yq2=0; rtobjs = R_to_B_temp; stopjs = stop_temp; ajs = an_temp; ljs = liang_temp; rba=0; } } } //*********************************************************** void mode_out(bit a1,bit a2,bit a3,bit a4)//a为停留时间,各位为输出值 { P1_4=a1; P1_5=a2; P1_6=a3; P1_7=a4; } void redfun(void) { if(js3c<4) { if(la) mode_out(1,0,1,0); else mode_out(0,0,0,0); } else { mode_out(0,0,0,0); } } void bluefun(void) { if(js3c<4) { if(la) mode_out(0,1,0,1); else mode_out(0,0,0,0); } else mode_out(0,0,0,0); } void allfun(void) { if(js3c<4) { if(la) mode_out(1,1,1,1); else mode_out(0,0,0,0); } else mode_out(0,0,0,0); } //*********************************************************** void mode1()//模式1 { //unsigned char a=0; switch(rba) { case 0: redfun();break; case 1: bluefun();break; case 2: allfun();break; default:break; } } //*********************************************************** void mode_work(unsigned char a)//参数为模式 { switch(a) { case 1: mode1(); break; //第一种模式 case 2: mode1(); break; case 3: mode1(); break; case 4: mode1(); break; case 5: mode1(); break; } } //*********************************************************** /* void decipherment_dog()//解密完后才能使用本控制器 { if((P1_0==0)&(P1_1==0)) { } } */ //*********************************************************** void InitTimer1(void) { TMOD = 0x11; TH1 = 0x3C; TL1 = 0xB0; EA = 1; ET1 = 1; } //*********************************************************** void InitTimer0(void) { TH0 = 0xf2; TL0 = 0xfb; ET0 = 1; TR0 = 1; } //*********************************************************** main() { InitTimer1(); InitTimer0(); P0M0=0XFF;//配成强上拉 P0M1=0X00; P2M0=0XFF; P2M1=0X00; P1M1=0X00; P1M0=0XF0; P0=0; P2=0; P1_4=0; P1_5=0; P1_6=0; P1_7=0; liang_temp=eeprom_read(0); an_temp=eeprom_read(1); R_to_B_temp=eeprom_read(2); stop_temp=eeprom_read(3); rtobjs= R_to_B_temp; stopjs=stop_temp; ajs=an_temp; ljs=liang_temp; while(1) { set_fun(); set_mode(); mode_work(mode); } } //********************************************************** void Timer1Interrupt(void) interrupt 3 { TH1 = 0x7d; TL1 = 0xcb; time_temp++; if(time_temp>30) { time_key=1; } } //************************************************************ void Timer0Interrupt(void) interrupt 1 { // TR0=0; static uchar i=0; static uchar kj=0; TH0 = 0xf2; //10 ms TL0 = 0xfb; if(js3c<4) { if(la) //如果在亮计时 { ljs--; //亮计数自减 if(ljs==0) //亮的时间到 { la=0; //置0亮暗计数 ajs=an_temp; //还原暗计数值 } } else //如果在暗计时 { ajs--; //晚计数自减 if(ajs==0) //保持暗的时间到 { la=1; //点亮 ljs=liang_temp; //还原亮计数初值 js3c++; } } } //else P1&=0x0f; if(rba==0 && js3c>=3) { i++; if(i>5) { i=0;rtobjs--; //红到蓝时间自减 } if(rtobjs==0) //时间到进入到蓝亮 { js3c=1;rba=1;rtobjs=R_to_B_temp; } } if(rba==1 && js3c>=3) { i++; if(i>5) { i=0;rtobjs--; //红到蓝时间自减 } //红到蓝时间自减 if(rtobjs==0) //时间到进入到蓝亮 { js3c=1;rba=2; stopjs=stop_temp; } } if(rba==2 && js3c>=3) { i++; if(i>5) { i=0; stopjs--; //红到蓝时间自减 } if(stopjs==0) //时间到进入到蓝亮 { js3c=1;rba=0; rtobjs=R_to_B_temp; } } if(!P1_0) //ksj为长按标记。如果长按,ksj置1,否则置0 { kj++;if(kj>70){kj=0;ksj=1;} } else { kj=0; ksj=0; } }
/
本文档为【爆闪灯C51程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索