rsoc/dayandnight/my_func.c

108 lines
2.4 KiB
C

#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include <stdlib.h>
#include <drv_lcd.h>
#include <ntp.h>
#define LCD_MAX 240
void lcd_black(int x, int y)
{
lcd_address_set(x, y, x, y);
lcd_write_half_word(BLACK);
}
void lcd_white(int x, int y)
{
lcd_address_set(x, y, x, y);
lcd_write_half_word(WHITE);
}
int roundxy[4][2] = {
{0, 0},
{0, LCD_MAX},
{LCD_MAX, 0},
{LCD_MAX, LCD_MAX},
};
int xymove[4][2] = {
{1, 1},
{1, -1},
{-1, 1},
{-1, -1},
};
void mytime()
{
rt_thread_mdelay(10000);
time_t cur_time;
cur_time = ntp_get_time(RT_NULL);
if (cur_time)
{
rt_kprintf("NTP Server Time: %s", ctime((const time_t *)&cur_time));
}
lcd_show_string(20, 2, 16, ctime((const time_t *)&cur_time));
}
void xy_round(int x, int y, int x2, int y2, int r, int ii)
{
// rt_kprintf("x:%d,y:%d,x2:%d,y2:%d,r:%d\n", x, y, x2, y2, r);
for (int i = x; i != x2; i += xymove[ii][0])
{
for (int j = y; j != y2; j += xymove[ii][1])
{
int newi = x2 - i;
int newj = y2 - j;
// rt_kprintf("(%d,%d,%d)",(newi * newi + newj * newj), newi, newj);
if ((newi * newi + newj * newj) > (r * r))
{
// rt_kprintf("x:%d,y:%d\n", i, j);
lcd_black(i, j);
}
}
}
}
void my_round(int r)
{
// 这个范围涂黑
lcd_fill(0, 0, roundxy[2][0], roundxy[2][1], BLACK);
lcd_write_half_word(BLACK);
for (int i = 0; i < 4; i++)
{
xy_round(roundxy[i][0], roundxy[i][1], roundxy[i][0] + r * xymove[i][0], roundxy[i][1] + r * xymove[i][1], r, i);
}
}
void xy_sink()
{
for (int i = 0; i < 240; i++)
{
for (int j = 0; j <= 240; j++)
{
lcd_black(j, 240 - i);
rt_thread_mdelay(1);
}
// rt_kprintf("(%d,...) Blacked\n", i);
}
}
void snake_address(int x, int y, int r, const rt_uint16_t da)
{
int f = 0; // 使蛇身成节
if (r > 5)
{
f = 1;
}
for (int i = x * r + f; i < x * r + r - f; i++)
{
for (int j = y * r + f; j < y * r + r - f; j++)
{
lcd_address_set(i, j, i, j);
lcd_write_half_word(da);
}
}
}
// bt 命令行
int color_cmd(int argc, char **argv)
{
snake_address(atoi(argv[1]), atoi(argv[2]), atoi(argv[3]), BLACK);
return 1;
}
MSH_CMD_EXPORT_ALIAS(color_cmd, snk, bt );