⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2he1.c

📁 利用SST89E516实现24LED跑灯
💻 C
字号:
			   #include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int 

sbit  LEDdata=P1^0;
sbit  LEDclk=P1^1;
sbit  LEDmr=P1^2;

/*延时*/
void delay(uint time){
   uchar k;
   while(time--){
   		for(k=0;k<125;k++);
   }

}
/*传送LED数据*/
void display(uchar num){
	
		
				if (num&0x80) {
					 LEDdata=1;
				}
				else{
					 LEDdata=0;
				}
				num=_crol_(num,1);//左移一位
			
				LEDclk=0;//写入数据
				_nop_();
				_nop_();
				LEDclk=1;


}

  void delay_ms(unsigned short ms) 
{ 
unsigned short i; 
unsigned char j; 
    for(i=0;i<ms;i++) 
    { 
        for(j=0;j<200;j++); 
        for(j=0;j<102;j++); 
    } 
} 
void display_two(){
unsigned char led_contrl;                  //指示灯控制字节 
unsigned char i ;                     //循环变量 
unsigned char contrl1,contrl2;            //指示灯移位变量 
                 //模式一:按次序闪烁灯 
       
     	P0 = 0xff;		   			//熄灭所有指示灯  			                    
            led_contrl=0x01;              //初始化指示灯控制字节 
            delay_ms(300);                //延时300MS 
            for(i=0;i<8;i++) 
            { 
				P0=~led_contrl;           //点亮控制字节相应指示灯 
                delay_ms(250); 
                if(led_contrl<0x80){led_contrl<<=1; } //控制字节移位操作 
                else {led_contrl=0x01; 	 }
            } 
         
                        //模式二:依次点亮所有指示灯 
        
		P0=0xff;
           
			                   //熄灭所有指示灯 
            led_contrl=0xff;              //初始化指示灯控制字节 
            contrl1=0xfe;                  //初始化移位变量1 
            delay_ms(300); 
            for(i=0;i<8;i++) 
            { 	
                P0=led_contrl&contrl1;    //点亮控制字节相应的指示灯 
                delay_ms(250); 
                contrl1<<=1;              //移位变量左移1位 
            } 
        			       
	                   //模式三:交叉闪烁指示灯 	        
	   		P0=0xff;                       //熄灭所有指示灯 
            contrl1=0x02;                  //初始化移位变量1 
            contrl2=0x80;                  //初始化移位变量2 
            delay_ms(300); 
            for(i=0;i<8;i++) 
            { 
				
                led_contrl=contrl1|contrl2; 			
                P0=~led_contrl;            //点亮控制字节相应指示灯 
                delay_ms(250); 
                contrl1<<=1;              //移位变量1左移1位 
                contrl2>>=1;              //移位变量2右移1位 
            } 
        
}
void main(){
		uchar n,temp;
		P1=0xff;
		LEDclk=0;
		LEDmr=0;
		delay(1);
		LEDmr=1;
	
		while(1) {
			temp=0xfe;	  //显示的初值
			for (n=23;n>0;n--){
				 display(temp);//写入数据,并显示
				 delay(200);
				 temp=_crol_(temp,1);  		
				 temp=temp|0x01;
			}
			    display(0xff);	//关闭显示
				delay(400);
				display_two();
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -