王大师王文峰 2021-06-10 11:08 采纳率: 50%
浏览 137
已采纳

LED跑马灯编程实现

  • 写回答

2条回答 默认 最新

  • 关注

    可以参考下这个

    #include <reg52.h>
    
    #define LED1 P0
    #define LED2 P2
    
    #define PWM_Module_Num 16
    sbit KEY1 = P3^2;
    sbit KEY2 = P3^3;
    sbit KEY3 = P3^4;
    sbit KEY4 = P3^5;
    
    unsigned int LED_Temp[PWM_Module_Num]={	0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,
    										0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000};
    
    unsigned char Flow_Mode;
    void Delay(unsigned int Num)
    {
    	unsigned int i,j;
    	for(i=0;i<Num;i++)
    		for(j=0;j<110;j++)
    	;
    }
    
    void Time0_Mode1(void)
    {
    	TMOD=0x01;  //设置T0为工作方式0  
    	TH0=(65535-50000)/256;     //5000us延时  
    	TL0=(65535-50000)%256;     
    	/*Timer0工作在模式0下时为13位定时/计数器, 
    	TL0只使用前5位,故对32进行求余/模    */  
    
    	EA=1;       //开总中断  
    	ET0=1;      //开定时器0中断  
    	TR0=1;      //启动定时器0  
    }
    
    void KEY_Scan(void)
    {
    	if(KEY1 == 0)
    	{
    		Delay(1);
    		if(KEY1 ==0)
    		{
    			Flow_Mode = 1;
    			while(!KEY1);
    		}
    	}
    	if(KEY2 == 0)
    	{
    		Delay(1);
    		if(KEY2 ==0)
    		{
    			Flow_Mode = 2;
    			while(!KEY2);
    		}
    	}
    	if(KEY3 == 0)
    	{
    		Delay(1);
    		if(KEY3 ==0)
    		{
    			Flow_Mode = 3;
    			while(!KEY3);
    		}
    	}
    	if(KEY4 == 0)
    	{
    		Delay(1);
    		if(KEY4 ==0)
    		{
    			Flow_Mode = 4;
    			while(!KEY4);
    		}
    	}	
    }
    void main()
    {
    	unsigned int LED;
    	Time0_Mode1();
    	while(1)
    	{
    		KEY_Scan();
    	}
    }
    unsigned char i=0;
    unsigned char Old_Mode;
    
    void Timer0()interrupt 1  
    {  
    	TH0=(65535-50000)/256;     //5000us延时  
    	TL0=(65535-50000)%256; 	
    	
    	switch(Flow_Mode)
    	{
    		case 1:
    			i++;
    			if(i==PWM_Module_Num)
    				i=0;
    			Old_Mode = Flow_Mode;
    			LED1 = ~LED_Temp[i]/256;
    			LED2 = ~LED_Temp[i]%256;			
    
    		break;
    		
    		case 2:
    			i--;
    			LED1 = ~LED_Temp[i]/256;
    			LED2 = ~LED_Temp[i]%256;
    			if(i==0)
    				i=PWM_Module_Num-1;
    			Old_Mode = Flow_Mode;
    			
    	
    		break;
    
    		case 3:
    			P2 = 0x0f;
    			i=0;
    		break;	
    		
    		case 4:
    			Flow_Mode = Old_Mode;
    			P2 = 0xf0;
    		break;
    		
    		default:
    			Flow_Mode = 1;
    		break;
    	}
    }  
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办