OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10106|回复: 14

miniSTM32指针时钟画出指针后怎么让指针动起来

[复制链接]

4

主题

12

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-1-5
在线时间
0 小时
发表于 2015-1-8 00:05:56 | 显示全部楼层 |阅读模式
5金钱
求教过说是设置清屏,具体源代码有谁可以提供下么,小白求助

最佳答案

查看完整内容[请看2#楼]

void Draw_big_line(u16 x1, u16 y1, u16 x2, u16 y2,u8 num,u16 color) { switch(num) { case 1:     LCD_Draw_Line(x1,y1,x2,y2,color); break;         case 2: LCD_Draw_Line(x1-1,y1-1,x2-1,y2-1,color); LCD_Draw_Line(x1,y1,x2,y2,color);     break; ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-1-8 00:05:57 | 显示全部楼层
void Draw_big_line(u16 x1, u16 y1, u16 x2, u16 y2,u8 num,u16 color)
{
switch(num)
{
case 1:
    LCD_Draw_Line(x1,y1,x2,y2,color);
break;
        case 2:
LCD_Draw_Line(x1-1,y1-1,x2-1,y2-1,color);
LCD_Draw_Line(x1,y1,x2,y2,color);
    break;
case 3:
LCD_Draw_Line(x1-1,y1-1,x2-1,y2-1,color);
LCD_Draw_Line(x1,y1,x2,y2,color);
    LCD_Draw_Line(x1+1,y1+1,x2+1,y2+1,color);
    break;
default:
    break;
}
}
//画时分秒指针
void DrawClockPointer(u8 hour, u8 min, u8 sec,u16 hour_color,u16 min_color,u16 sec_color)
{
x_temp[0] = CLOCK_CENTER_X + (CLOCK_RADIUS-SEC_PTR_OFFSET) * cos(PI/2-PI/30*sec);
y_temp[0] = CLOCK_CENTER_Y - (CLOCK_RADIUS-SEC_PTR_OFFSET) * sin(PI/2-PI/30*sec);
x_temp[1] = CLOCK_CENTER_X + (CLOCK_RADIUS_M+2) * cos(PI/2-PI/30*sec);
y_temp[1] = CLOCK_CENTER_Y - (CLOCK_RADIUS_M+2) * sin(PI/2-PI/30*sec);

Draw_big_line(x_temp[0], y_temp[0], x_temp[1], y_temp[1],1,sec_color);

x_temp[2] = CLOCK_CENTER_X + (CLOCK_RADIUS-MIN_PTR_OFFSET) * cos(PI/2-PI/30*min-PI/30/60*sec);
y_temp[2] = CLOCK_CENTER_Y - (CLOCK_RADIUS-MIN_PTR_OFFSET) * sin(PI/2-PI/30*min-PI/30/60*sec);
x_temp[3] = CLOCK_CENTER_X + (CLOCK_RADIUS_M+2) * cos(PI/2-PI/30*min);
y_temp[3] = CLOCK_CENTER_Y - (CLOCK_RADIUS_M+2) * sin(PI/2-PI/30*min);

Draw_big_line(x_temp[2], y_temp[2], x_temp[3], y_temp[3],2,min_color);

x_temp[4] = CLOCK_CENTER_X + (CLOCK_RADIUS-HOUR_PTR_OFFSET) * cos(PI/2-PI/6*hour-PI/6/60*min);
y_temp[4] = CLOCK_CENTER_Y - (CLOCK_RADIUS-HOUR_PTR_OFFSET) * sin(PI/2-PI/6*hour-PI/6/60*min);
x_temp[5] = CLOCK_CENTER_X + (CLOCK_RADIUS_M+2) * cos(PI/2-PI/6*hour-PI/6/60*min);
y_temp[5] = CLOCK_CENTER_Y - (CLOCK_RADIUS_M+2) * sin(PI/2-PI/6*hour-PI/6/60*min);

Draw_big_line(x_temp[4], y_temp[4], x_temp[5], y_temp[5],3,hour_color);
}
//清时分秒指针
void ClearClockPointer(u8 hour, u8 min, u8 sec,u16 color)
{
Draw_big_line(x_temp[0], y_temp[0], x_temp[1], y_temp[1],1,color);
Draw_big_line(x_temp[2], y_temp[2], x_temp[3], y_temp[3],2,color);
Draw_big_line(x_temp[4], y_temp[4], x_temp[5], y_temp[5],3,color);
}
//画时钟的边界
void DrawClockBorder(u16 color)
{
u16 x, y; //定义时钟x, y坐标
u16 x_temp, y_temp; //定义临时的x,y坐标
u8 i;

//画时钟外部的大圆
for(i=0; i<CLOCK_RADIUS_M; i++)
{
LCD_Draw_Circle(CLOCK_CENTER_X, CLOCK_CENTER_Y, CLOCK_RADIUS+i,color);
}
//画时钟内部的小圆
LCD_Draw_Circle(CLOCK_CENTER_X, CLOCK_CENTER_Y, CLOCK_RADIUS_M,color);
for(i=0; i><60; i++)
{
x = CLOCK_CENTER_X + (CLOCK_RADIUS) * cos(PI/2-PI/30*i);
y = CLOCK_CENTER_Y - (CLOCK_RADIUS) * sin(PI/2-PI/30*i);
if(i%5 == 0) //如果在整点的位置
{
x_temp = CLOCK_CENTER_X + (CLOCK_RADIUS-SCALL_OFFSET_B) * cos(PI/2-PI/30*i);
y_temp = CLOCK_CENTER_Y - (CLOCK_RADIUS-SCALL_OFFSET_B) * sin(PI/2-PI/30*i);
Draw_big_line(x_temp, y_temp, x, y,2,color);
x_temp = CLOCK_CENTER_X + (CLOCK_RADIUS-NUMBER_OFFSET) * cos(PI/2-PI/30*i);
y_temp = CLOCK_CENTER_Y - (CLOCK_RADIUS-NUMBER_OFFSET) * sin(PI/2-PI/30*i);

if(i == 0)
{
LCD_ShowNum(x_temp-5,y_temp-8,12,2,color,BLACK);
}
else
{
if(i < 50)
{
LCD_ShowNum(x_temp-5,y_temp-8,i/5,1,color,BLACK);
}
else
{
LCD_ShowNum(x_temp-5,y_temp-8,i/5,2,color,BLACK);
}
}
}
else
{
x_temp = CLOCK_CENTER_X + (CLOCK_RADIUS-SCALL_OFFSET_S) * cos(PI/2-PI/30*i);
y_temp = CLOCK_CENTER_Y - (CLOCK_RADIUS-SCALL_OFFSET_S) * sin(PI/2-PI/30*i);
            Draw_big_line(x_temp, y_temp, x, y,1,color);
}
}
}
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-1-8 00:05:57 | 显示全部楼层
调用的时候是这样的:
if(delay_time1==0){
delay_time1=20;//200ms
if(sec!= timer.sec)
{
sec = timer.sec;
LCD_Show24Num(746,50,timer.sec,2,WHITE,BLACK);
LCD_Show24Num(710,50,timer.min,2,WHITE,BLACK);
if(min!=timer.min){
min=timer.min;
LCD_Show24Num(650,20,timer.w_year,4,WHITE,BLACK);
    LCD_Show24Num(710,20,timer.w_month,2,WHITE,BLACK);
    LCD_Show24Num(746,20,timer.w_date,2,WHITE,BLACK);
LCD_Show24Num(674,50,timer.hour,2,WHITE,BLACK);
}
    ClearClockPointer(hour, min, sec,BLACK); //如果更新了,清除原来的指针
DrawClockPointer(timer.hour,timer.min,timer.sec,BLUE,BLUE,RED); //画指针
hour = timer.hour;
min = timer.min;
sec = timer.sec;
}
}
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-1-8 00:05:57 | 显示全部楼层
u8 time_RTC(u8 rtn)
{
u8 sec=0,hour=0,min=0;//day=0,month=0;
LCD_Clear(BLACK);
DrawClockBorder(BLUE);
hour = timer.hour;
min = timer.min;
sec = timer.sec;

DrawClockPointer(hour,min,sec,BLUE,BLUE,RED); //画指针
while(1)
{
if(delay_time1==0){
delay_time1=20;//200ms
if(sec!= timer.sec)
{
sec = timer.sec;
        ClearClockPointer(hour, min, sec,BLACK); //如果更新了,清除原来的指针
DrawClockPointer(timer.hour,timer.min,timer.sec,BLUE,BLUE,RED); //画指针
hour = timer.hour;
min = timer.min;
sec = timer.sec;
}
}
}

}
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

0

主题

133

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2014-12-21
在线时间
1 小时
发表于 2015-1-8 00:18:08 | 显示全部楼层
清除上一指针,在下一位置画指针。方便点的就是清屏,画时钟背景,然后画线。
流过汗水才能代表自己真的学会了如何不流汗。
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-1-5
在线时间
0 小时
 楼主| 发表于 2015-1-8 01:16:22 | 显示全部楼层
回复【2楼】花戒:
---------------------------------
有类似的源代码给我看看么
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-1-8 08:10:17 | 显示全部楼层
回复【3楼】NPCLALA:
---------------------------------
可以参考原子哥探索者开发板时钟代码,综合实验
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

43

主题

278

帖子

1

精华

高级会员

Rank: 4

积分
621
金钱
621
注册时间
2013-12-27
在线时间
0 小时
发表于 2015-1-8 09:44:55 | 显示全部楼层


正好我在做,给你参考下了。
水的比较多。
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-1-8 16:33:48 | 显示全部楼层
#ifndef __LCD_H_
#define __LCD_H_
#include "stm32f10x_conf.h"

/* LCD显示相关参数 */
#define  HDP  799   //Horizontal Display eriod
#define  HT   1000  //Horizontal Total
#define  HPS  51   //LLINE ulse Start osition
#define  LPS  3    // Horizontal Display eriod Start osition
#define  HPW  8    // LLINE ulse Width

#define  VDP  479 //Vertical Display eriod
#define  VT   530 //Vertical Total
#define  VPS  24 //LFRAME ulse Start osition
#define  FPS  23 //Vertical Display eriod Start Positio
#define  VPW  3  //LFRAME Pulse Width

/* 定义LCD的尺寸 */
#define LCD_W 800
#define LCD_H 480

/*Private define-------------------------*/
#define POINT_COLOR RED
#define BACK_COLOR 0xFFFF

/*--------16位颜色值---------------*/
//#define WHITE           0xFFFF
//#define BLACK           0x0000   
//#define BLUE           0x001F  
//#define RED             0xF800
//#define MAGENTA         0xF81F
//#define GREEN           0x07E0
//#define CYAN            0x7FFF
//#define YELLOW          0xFFE0
//#define BROWN   0XBC40 //棕色
//#define BRRED   0XFC07 //棕红色
//#define GRAY    0X8430 //灰色
//#define LGRAY   0XC618 //浅灰色
#define PI 3.14159

#define CLOCK_BK_COLOR GUI_BLUE   //定义背景色
#define CLOCK_COLOR GUI_BLACK //定义画笔颜色

#define CLOCK_CENTER_X 200//95 //时钟圆心横坐标
#define CLOCK_CENTER_Y 280//110 //时钟圆心纵坐标
#define CLOCK_RADIUS 150//90 //时钟半径
#define CLOCK_RADIUS_W   4 //定义时钟外部轮廓厚度
#define CLOCK_RADIUS_M   3 //时钟中心小圆的半径

#define SCALL_OFFSET_B  12// 6 //定义整点时间点坐标偏移量
#define SCALL_OFFSET_S   8// 4 //非整点坐标偏移量
#define NUMBER_OFFSET  28//14 //数字显示的偏移量

#define SEC_PTR_OFFSET       45//25 //定义秒针的偏移量
#define MIN_PTR_OFFSET  60//35 //定义分针的偏移量
#define HOUR_PTR_OFFSET  80//50 //定义时针的偏移量

//--------------------------------------------------------------

#define Bank1_LCD_D    ((uint32_t)0x6C000001)  // Data ADDR
#define Bank1_LCD_C    ((uint32_t)0x6C000000)  // Reg ADDR 

//#define LCD_bk_light   PDout(3)
//#define LCD_Reset      PGout(15)

//#define LCD_Width    320 //LCD 宽度
//#define LCD_Height   240     //LCD 高度

/*****************常用颜色定义*****************************/
#define WHITE           0xFFFF
#define BLACK           0x0000   
#define BLUE           0x001F  
#define BRED             0XF81F
#define GRED   0XFFE0
#define GBLUE  0X07FF
#define RED             0xF800
#define MAGENTA         0xF81F
#define GREEN           0x07E0
#define CYAN            0x7FFF
#define YELLOW          0xFFE0
#define BROWN   0XBC40 //棕色
#define BRRED   0XFC07 //棕红色
#define GRAY    0X8430 //灰色
//GUI颜色
#define DARKBLUE        0X01CF //深蓝色
#define LIGHTBLUE        0X7D7C //浅蓝色  
#define GRAYBLUE         0X5458 //灰蓝色
//以上三色为PANEL的颜色 
#define LIGHTGREEN       0X841F //浅绿色
#define LIGHTGRAY        0XEF5B //浅灰色(PANNEL)
#define LGRAY   0XC618 //浅灰色(PANNEL),窗体背景色

#define LGRAYBLUE        0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE           0X2B12 //浅棕蓝色(选择条目的反色)

/*----------函数声明------------*/
void LCD_FSMCConfiguration(void);
void LCD_Configuration(void);
void LCD_Init(void);
void LCD_WR_REG(uint16_t LCD_Reg);
void LCD_WR_DATA(uint16_t LCD_Data);
u16  LCD_ReadReg(uint16_t LCD_Reg);
void LCD_WriteReg(uint16_t LCD_Reg ,uint16_t LCD_RegValue);
void LCD_WR_DATA_Prepare(void);
void LCD_SetCursor(u16 Xpos, u16 Ypos);
u16  LCD_ReadPoint(u16 x,u16 y);
void LCD_Clear(uint16_t Color);
void LCD_Draw_Pixel(uint16_t xsta, uint16_t ysta, uint16_t color);
void LCD_WindowMax (unsigned int xsta,unsigned int ysta,unsigned int xend,unsigned int yend);
void LCD_Fill_color(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t colour);
void LCD_Draw_Line(u16 x1, u16 y1, u16 x2, u16 y2,u16 color);
void LCD_Draw_Circle(u16 x0,u16 y0,u8 r,u16 color);
void LCD_Fill_Circle(u16 x0,u16 y0,u8 r,u16 color);
void LCD_Draw_Rectangle(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color);
void WriteOneChar(u16 x, u16 y, u8 num, u16 PenColor, u16 BackColor);
u32  mypow(u8 m,u8 n);   
void LCD_ShowNum(uint16_t x,uint16_t y,u32 num,u8 len, u16 PenColor, u16 BackColor);
u16  findHzIndex(u8 *hz);
u8   WriteOneHz(u16 x0, u16 y0, u8 *pucMsk, u16 PenColor, u16 BackColor);
void LCD_ShowString(u16 x0, u16 y0, u8 *pcStr, u16 PenColor, u16 BackColor);
u16  LCD_RGBtoBGR(u16 Color);
void LCD_Draw_Picture(u16 Xpos,u16 Ypos,u16 Height,u16 Width,u8 *pic);
void Draw_big_line(u16 x1, u16 y1, u16 x2, u16 y2,u8 num,u16 color);
//---------------------------------------------------------------------------------------------
//画时分秒指针
//void DrawClockPointer(u8 hour, u8 min, u8 sec,u16 color);
void DrawClockPointer(u8 hour, u8 min, u8 sec,u16 hour_color,u16 min_color,u16 sec_color);
//清时分秒指针
void ClearClockPointer(u8 hour, u8 min, u8 sec,u16 color);
//画时钟的边界
void DrawClockBorder(u16 color);
//---------------------------------------------------------------------------------------------
//24*12的字体2014-02-24添加
void LCD_Show24Char(u16 x, u16 y, u8 num, u16 PenColor, u16 BackColor);
void LCD_Show24Num(uint16_t x,uint16_t y,u32 num,u8 len, u16 PenColor, u16 BackColor);
void LCD_Show24Float(uint16_t x,uint16_t y,u32 num,u8 len_T,u8 len_int, u16 PenColor, u16 BackColor);
void LCD_Show24String(u16 x0, u16 y0, u8 *pcStr, u16 PenColor, u16 BackColor);
u16  find24HzIndex(u8 *hz);
void LCD_ShowOne24Hz(u16 x, u16 y, u8 *pucMsk, u16 PenColor, u16 BackColor);
void LCD_bmp_Picture(u16 xstr,u16 ystr,u16 xend,u16 yend,u8 *pic,u16 PenColor, u16 BackColor);
//void LCD_bmp_Picture_2(u16 xstr,u16 ystr,u16 xend,u16 yend,u8 *pic,u16 PenColor, u16 BackColor);
void LCD_bmp_Full_Picture(u8 *pic,u16 PenColor, u16 BackColor);
//-------------------------------------------------------------------------
//别处复制的
//void sLCD_WR_REG(unsigned int index);
//__INLINE void sLCD_WR_Data(unsigned int val);
//u16 sLCD_Read_Data(void);
//void sLCD_OpenWindow(u32 x1, u32 y1, u32 x2, u32 y2);
//void LCD_SetPoint(u16 x,u16 y,u16 c);
//u16 LCD_GetPoint(u16 x, u16 y);

#endif
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

30

主题

705

帖子

1

精华

新手上路

积分
21
金钱
21
注册时间
2013-3-14
在线时间
52 小时
发表于 2015-1-8 16:48:16 | 显示全部楼层


这是效果。^_^
原子哥是不是又要出黑科技了呀。^_^...
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-1-5
在线时间
0 小时
 楼主| 发表于 2015-1-9 00:52:05 | 显示全部楼层
回复【10楼】fanghuiopenedv:
---------------------------------
谢谢啊~我上午已经自己搞好了~太感谢了~
回复

使用道具 举报

1

主题

26

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-5-11
在线时间
4 小时
发表于 2017-5-11 15:07:08 | 显示全部楼层
mini STM32的指针时钟,源代码有吗
回复

使用道具 举报

1

主题

26

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-5-11
在线时间
4 小时
发表于 2017-5-11 15:07:22 | 显示全部楼层
做出来了吗?
回复

使用道具 举报

1

主题

26

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-5-11
在线时间
4 小时
发表于 2017-5-11 15:07:50 | 显示全部楼层

mini STM32的指针时钟,源代码有吗
回复

使用道具 举报

1

主题

26

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2017-5-11
在线时间
4 小时
发表于 2017-5-11 15:08:11 | 显示全部楼层
NPCLALA 发表于 2015-1-9 00:52
回复【10楼】fanghuiopenedv:
---------------------------------
谢谢啊~我上午已经自己搞好了~太感谢了~

mini STM32的指针时钟,源代码有吗,
能发一下吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 10:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表