stm32f103c8t6画线功能

前言:代码是最有力的解释,是最简洁的数学,废话不多说,直接上代码 

/*
oled屏是128X64,我以左下角为坐标原点,
x范围是0~128,y是0~64,因此代入函数的坐标范围也需如此
*/
void OLED_DrawLine(int x0, int y0, int x1, int y1)//连接两点坐标的线
{
	uint8_t temp=0;
	float kk=(float)(y1-y0)/(x1-x0);//计算两点斜率,用浮点数避免斜率为零
	int i,j,k;

	OLED_SetCursor(0, 0);//坐标原点		
	for (j = 0; j <8; j++){//oled是一次性写入8bite数据点亮,所以只需循环64/8=8
		for (i = x0; i < x1+1; i++)//在x0~x1之间区域作线
	{
		OLED_SetCursor(j, i);//即寻找y方向第j个8X1方阵(纵向点灯)
		temp=0x00;//默认灯全灭
		for (k = 0; k < 8; k++){
			if((kk*(i-x0))<(64-(j*8+k)-y0+1)&&(kk*(i-x0))>(64-(j*8+k)-y0-1))//用的浮点数,所以设置误差范围+-1,由于零点设置,需要倒一下
		temp|=1<<k;//即将8X1方阵中满足我建立的坐标系及斜率的点置1
		}
		OLED_WriteData(temp);			//写入数据,点灯
		
	}}
}
#include "stm32f10x.h"                  // Device header
#include "OLED.h"
#include"math.h"
int main(void)
{
    OLED_Init();
for(int i=1;i<128;i++)
	//OLED_DrawLine(i-1, (i-1)*(i-1)/100, i, i*i/100);//y=x*x
	OLED_DrawLine(i-1, 32*sin((i-1)/10.0)+32, i, 32*sin(i/10.0)+32);//y=sin(x)
while(1)
	{
		
	}
}

效果: 

 

 

总结:工程取自b站自化协,函数为我C不到后的原创。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

克洛托系统

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值