STC15F2K60S2花式流水灯

STC15F2K60S2实现流水灯

P0口输出,LED灯共阳极,因此I/O口输出低电平(共阴极自行修改)

以下是两三个简易代码:

 方案一:左右移+左右流水+间隔闪烁

#include <REGX52.H>  
unsigned char code seg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0x00,0x55,0x55,0xaa,0xaa};
void DelayMs(unsigned int t);

main()
{  
	unsigned char i;       //定义一个无符号字符型 
	while(1)  
		{    
			P0=0xFE;           //第1个LED亮    
			for(i=0;i<8;i++)    
			{      
				DelayMs(1000);     
				P0 <<=1;    
      }    
				P0=0x7F;         //第8个LED亮    
			for(i=0;i<8;i++)    
			{      
				DelayMs(1000);      
				P0 >>=1;    
			} 
				P0=0xFE;         //第1个LED亮    
			for(i=0;i<8;i++)    
			{      
				DelayMs(1000);      
				P0 <<=1;      
				P0 |=0x01;    	//第1个LED亮
			}    
				P0=0x7F;					//第8个LED亮    
  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STC15F2K60S2是一款基于8051内核的单片机,而LED流水灯是一种常见的数字电子应用,它通过逐位改变LED的状态,使LED灯看起来像在流动。这里没有提供具体的代码,但我可以给你一个基本的流程和代码框架,以及如何在STC15F2K60S2上实现。 1. 引入必要的头文件:首先,你需要包含STC15F2K60S2的寄存器定义和其他必要的库文件。 ```c #include "STC15F2K60S2.h" ``` 2. 初始化硬件:设置定时器、GPIO口(用于控制LED)等。 ```c void init_GPIO(void); void init_Timer(void); ``` 3. LED数组定义:定义一个数组表示LED的连接状态。 ```c #define NUM_LEDS 8 // 流水灯数量 bool led_states[NUM_LEDS] = {false}; // 初始全关闭 ``` 4. 递归函数或定时器中断:创建一个函数,通过改变LED的状态并在适当的时间间隔后调用自身来实现流水灯效果。 ```c void display_PWM(int index) { led_states[index] = !led_states[index]; // 变换LED状态 PORTB ^= (1 << index); // 驱动GPIO口 if (index < NUM_LEDS - 1) { // 如果不是最后一盏灯,延时后再调用自身 delay_ms(100); // 延迟时间可以根据需求调整 display_PWM(index + 1); } } ``` 5. 定时器初始化和中断处理: ```c void timer_isr() { display_PWM(0); // 开始流水灯显示 // 增加定时器中断周期,确保LED变化频率适中 } void init_Timer() { TCCR1A = 0b10010000; // 设置定时器1为PWM模式 OCR1A = (F_CPU / 1000) - 1; // 设置周期,取决于你的晶振频率 TIMSK1 |= _BV(TOIE1); // 开启定时器中断 sei(); // 启用全局中断 } ``` 6. 主函数启动: ```c int main(void) { init_GPIO(); init_Timer(); sei(); while (1) { // 这里可以添加其他程序逻辑,例如按键控制LED流 } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值