void main() { temp1=0xfe; temp2=0x7f; //间隔300ms先奇数亮再偶数亮,循环三次 for(m=0;m<3;m++) { P1=0xAA; delay1(); P1=0x55; delay1(); } //一个灯上下循环三次 for(m=0;m<3;m++) { for(n=0;n<8;n++) { P1=temp1; temp1= _crol_(temp1,1); delay1(); } for(n=0;n<8;n++) { P1=temp2; temp2= _cror_(temp2,1); delay1(); } } //两个分别从两边往中间流动三次,再从中间往两边流动三次 for(m=0;m<3;m++) { for(n=0;n<4;n++) { P1=temp1&temp2; temp1= _crol_(temp1,1); temp2= _cror_(temp2,1); delay1(); } for(n=0;n<4;n++) { P1=temp1&temp2; temp1= _crol_(temp1,1); temp2= _cror_(temp2,1); delay1(); } } //8个全部闪烁3次 for(m=0;m<3;m++) { P1=0x00; delay1(); P1=0xff; delay1(); } //关闭发光管 P1=0xff; delay1(); }
void IR_TR(unsigned char direction){ unsigned char i=0; bit j; CCAP0L = 128; CCAP0H = 128; CR = 1; delay(16800); CR = 0; delay(8400); for(i=0;i<8;i++){ j = (_cror_(direction,i)&0x01); if(j == 1){ CR = 1; delay(1844); CR = 0; delay(500); } if(j == 0){ CR = 1; delay(524); CR = 0; delay(500); } } CR = 1; delay(526); CR = 0; delay(20000); CCAP0L = 0; CCAP0H = 0; }
void main (void) { while(1) { aa=0xfe; // left flashing part for (i=0; i<7; i++) { P1=aa; beep=0; aa=_crol_(aa, 1); // left LIB function delayms(100); P1=0xff; beep=1; delayms(200); } aa=0x7f; // right flashing part for (i=0; i<7; i++) { P1=aa; beep=0; aa=_cror_(aa, 1); delayms(100); P1=0xff; beep=1; delayms(200); } } }
/*------------------------------------------------ 主程序 ------------------------------------------------*/ main() { LED=0XFE; Init_Timer0(); while(1) { if(i==500) { if(KeyValue) { LED=_cror_(LED,1); i=0; } else { LED=_crol_(LED,1); i=0; } } } }
void proc_key(unsigned char key_v) { if((key_v & 0x01) == 0) { P2 = _cror_(P2,1); } else if((key_v & 0x02) == 0) { P2 = _crol_(P2, 1); } }
/******************************************************************** * 名称 : Main() * 功能 : 实现灯的闪烁 * 输入 : 无 * 输出 : 无 * 说明 :也可以使用例1的的方法来关闭数码管 ***********************************************************************/ void Main(void) { uchar i; P2 = 0x00; while(1) { P0 = 0x7f; //P0.7亮亮 for(i=0; i<7; i++) //移位7次 { P0 = _cror_(P0, 1); //_crol_()这个函数在intrins.h中定义了,用于循环右移 Delay(15); } P0 = 0xfe; for(i=0; i<7; i++) { P0 = _crol_(P0, 1); //用于循环左移 Delay(15); } } }
void flow(int t,unsigned char way) { unsigned char temp,i; if(way==1) { temp=0xfe; for(i=0;i<8;i++) { P2=temp; temp=_crol_(temp,1); delay(t); } } if(way==2) { temp=0x7f; for(i=0;i<8;i++) { P2=temp; temp=_cror_(temp,1); delay(t); } } }
void timer0() interrupt 1 // 定时器0中断服务程序, 用于数码管的动态扫描 // dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量 // dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, // 选通P2.0口数码管 // dis_buf --- 显于缓冲区基地址 { TH0 = 0xFC; TL0 = 0x17; P2 = 0xff; // 先关闭所有数码管 P0 = dis_buf[dis_index]; // 显示代码传送到P0口 P2 = dis_digit; // dis_digit = _cror_(dis_digit,1); // 位选通值右移(P30<-P37), 下次中断时选通下一位数码管 dis_index++; // dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 } void timer1() interrupt 3 // { unsigned char i; TH1 |= 0xdc; for(i = 0; i < 8; i++) { sec_bcd[i]++; // 低位加1 if(sec_bcd[i] < 10) // 如果低位满10则向高位进1 break; // 低位未满10