基于STM32F407VET6 3.5寸显示屏显示正弦波

效果图

正弦波定义

#define LCD_WIDTH  320  
#define LCD_HEIGHT 480  
#define M_PI 3.1415926  
// 正弦波参数  
#define WAVE_AMPLITUDE 80  // 振幅  
#define WAVE_OFFSET    LCD_HEIGHT / 2  // 偏移量(波形中心位置)  
#define WAVE_CYCLES    5    // 周期数  
#define WAVE_POINTS_PER_CYCLE 100 // 每个周期中的点数  

// 绘制多个周期的正弦波  
void DrawSineWave() {  
    float x_step = (float)LCD_WIDTH / (WAVE_CYCLES * WAVE_POINTS_PER_CYCLE); // 计算x轴上的步长  
  
    for (int cycle = 0; cycle < WAVE_CYCLES; cycle++) {  
        for (int i = 0; i < WAVE_POINTS_PER_CYCLE; i++) {  
            // 计算当前点的x坐标  
            int x = (int)(cycle * WAVE_POINTS_PER_CYCLE * x_step + i * x_step);  
              
            // 计算当前点的y坐标(正弦波值),并调整为LCD的坐标系统  
            float y_value = WAVE_AMPLITUDE * sin(2 * M_PI * (float)i / WAVE_POINTS_PER_CYCLE) + WAVE_OFFSET;  
            int y = (int)y_value;  
              
            // 确保y坐标在LCD范围内  
            if (y < 0) y = 0;  
            if (y >= LCD_HEIGHT) y = LCD_HEIGHT - 1;  
              
            // 绘制点  
            LCD_DrawPoint(x, y);  
        }  
    }  
}  

 放在lcd.c中

void LCD_DrawPoint(uint16_t x,uint16_t y)
{
	LCD_SetCursor(x,y);	// 设置坐标
	LCD_WR_REG(0X2C);		// 写入GRAM
	*(__IO uint16_t*) FSMC_DATA = LCD.Color; 	// 写入颜色
}

 

主函数 

int main(void)
{
	HAL_Init();					// 初始化HAL库
	SystemClock_Config();	// 配置系统时钟
		
	LCD_Init();					// LCD初始化
    DrawSineWave();             //显示正弦波
	while (1)
	{     
    
	}
}



 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值