你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于NUCLEO_F767ZI的生肖图案型万年历

[复制链接]
jinglixixi 发布时间:2016-11-16 17:12
在NUCLEO_F767ZI实现RTC实时时钟的帖子中,介绍了一种以OLED屏来实现实时时钟的方法,本贴再介绍一种以串行接口TFT屏来实现带生肖图案的万年历实现方法。
以前受程序存储空间的限制,在不加挂大容量存储器件的情况下要想显示一幅高质量的图片是件困难的事。对于NUCLEO_F767ZI来说这件事容易了许多,因为它的程序存储空间已达2M,显示的图片数据完全可以存放到程序中,这完全有种土豪的有钱就可以这么任性的味道。
在该生肖图案型万年历中,每幅生肖图片的规格为200*200像素,以16位色彩的格式来存储,共12幅。
万年历的计时环节则是使用NUCLEO_F767ZI内部的RTC,其运行效果如图1所示。
图片1.png
图1生肖图案型万年历

, \3 ]* _% C/ A  |
由于在前帖中对RTC的用法已做过介绍,这里就不再重复,参见该网址即可:
https://www.stmcu.org.cn/module/forum/thread-608523-1-1.html
本贴主要介绍以串口TFT屏来实现图片的显示,其整体构成如图2所示。
串口TFT屏与开发板的引脚连接关系为:
REST-PB1    DC-PB2   CS-PB3   SCK-PC6   SDI-PC7
相应的高低电平输出语句定义如下:
  1. #define LCD_SCK_High()      { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);}
    4 I4 w) F( B' J6 G8 d6 p
  2. #define LCD_SCK_Low()           { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_RESET);}
    0 j9 Y+ q; ?4 F1 C8 h( X; w) X+ p
  3. #define LCD_SDI_High()      { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_SET);}6 j& G1 Z2 Z! o
  4. #define LCD_SDI_Low()      { HAL_GPIO_WritePin(GPIOC, GPIO_PIN_7, GPIO_PIN_RESET);}
    9 w$ G" p5 c# t# M7 z, _" g
  5. #define LCD_CS_High()       { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_SET);}! @6 _  {2 t* h& ?( }1 I0 ]2 f
  6. #define LCD_CS_Low()            { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_3, GPIO_PIN_RESET);}
    ) E+ h" K" H: F; J3 N& Q# J
  7. #define LCD_DC_High()       { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);}
    2 c5 H4 O( ^2 o. f
  8. #define LCD_DC_Low()              { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_RESET);}
      O6 W( o# }+ m- i
  9. #define LCD_REST_High()      { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);}
    # k, G+ T* l7 z- L1 ]9 H2 ?
  10. #define LCD_REST_Low()      { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);}
复制代码
图片2.png
图2 整体构成
  B9 B6 f7 w3 F
生肖图片的显示函数如下:
  1. void show_image(unsigned int x,unsigned int y,unsigned int n)  //200*200
    # j% o3 M  O0 V6 Y2 \; T; t
  2. {  3 T: j: x; K8 S& P  P0 y
  3.         unsigned int i,j,k;& N, [1 t  U+ {( f' h. O7 _- k& h2 i
  4.         unsigned int da;. @( H" K- H/ l2 D% ~( F+ Q
  5.         k=0;
    ' D; J6 S$ u8 d
  6.         for(i=0;i<200;i++)
    ( i* X( h# A2 K: }& i
  7.         {       
    - B; U1 I$ [+ t( }' C5 `( k
  8.                 LCD_SetCursor(x,y+i);
    ( ?  w- |/ H3 Q/ t' O3 Z
  9.                 LCD_WriteRAM_Prepare();                                     & o7 Q( n# u& r2 ~4 O% u/ e5 _/ n
  10.                 for(j=0;j<200;j++)
    + k$ ~' N9 [. B
  11.                 {
    ; B1 M5 P+ P2 Z* a: k1 a# D
  12.                         if (n==9)  da=gImage_sh[k*2];6 K# t& m- q" q5 W3 W& L8 W
  13.                         da<<=8;
    0 r7 ~9 p( y! ^0 S/ u- h. p
  14.                         if (n==9) da|=gImage_sh[k*2+1];
    1 [% j1 e- Y5 ^8 w3 ~, p. m
  15.                         LCD_WR_DATA(da);                                       
    4 \, O- E, m; q: w% k8 B
  16.                         k++;  
    7 [/ d. T0 ^3 d+ @! M6 G2 Q+ d
  17.                 }0 i$ Y3 O' p% O1 i5 g2 C  R' Y/ C
  18.         }1 A8 D* j( T. |
  19. }
复制代码
实现生肖图案型万年历的主函数如下:
  1. int main(void)- B2 I2 M! _3 _4 P$ ]4 q
  2. {# z8 b3 A$ J& _, y8 R8 u# Y% H/ [
  3.     HAL_Init();                                    //初始化HAL库
    ! p" l! S1 C% K# p- V
  4.     Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz
    % m$ }% l( h; ^  o$ u
  5.     delay_init(216);                //延时初始化- \9 ~/ ]8 w6 P
  6.     GPIO_Configuration();
    % @! R' d9 ^8 {; `' R. p! C& s! ^
  7.         Lcd_Init();                    // 初始化TFT! l- b# ?0 H' P) h" C+ }* h
  8.     LCD_Clear(WHITE);2 p. \3 l; {/ f8 i" R
  9.         BACK_COLOR=WHITE;
    9 j  M/ _/ u0 Q- ~( f- m
  10.     POINT_COLOR=RED;
    7 w! x! Q1 S& `0 q9 m8 |& k& g
  11. show_image(20,0,9);            // 显示生肖图片$ F( N3 d- V6 x
  12. while(1). ~( L# t# |+ k6 l4 H2 \, f
  13. {
    & @* W6 }& L2 b0 x0 q0 G
  14. //  显示RTC 计时值
    0 Z1 j( v& S8 x1 n; V
  15. }- t& i% ^. n% o7 `; t1 L8 @/ N1 J
  16. }
复制代码
$ ]2 d- A# N. p3 i) N, J/ M
. X; D4 Y$ n! u8 j7 ~' \

评分

参与人数 1 ST金币 +30 收起 理由
zero99 + 30

查看全部评分

赞 收藏 3 评论13 发布时间:2016-11-16 17:12

举报

13个回答
zero99 回答时间:2016-11-16 17:43:30
支持一下
Ljmp 回答时间:2016-11-16 17:44:53
,还是不错!!!
wamcncn 回答时间:2016-11-16 18:14:01
谢谢分享         
zhongyuan186118 回答时间:2016-11-16 20:57:48
支持
weigr 回答时间:2016-11-16 21:35:21
看起来不错
andrewz 回答时间:2016-11-16 23:22:22
厉害~~~~~~~~~~~~
andypanfan 回答时间:2016-11-17 09:00:37
谢谢 分享!!!!!!
jinglixixi 回答时间:2016-11-17 09:27:15
zero99 发表于 2016-11-16 17:43% `6 J3 z1 z4 n6 E% W( f# n
支持一下
: W2 Q2 d, D( u' F: c& R, Q6 F1 p
多谢打赏!!!
jinglixixi 回答时间:2016-11-17 09:27:46
多谢支持!!!
limale 回答时间:2016-11-17 12:38:31
谢谢分享
zbber 回答时间:2016-11-17 12:57:14
谢谢 分享
高二毛 回答时间:2016-11-17 13:25:21
不错啊,感谢分享。
andypanfan 回答时间:2016-12-9 08:56:34
学习,以后会用
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版