找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3671|回复: 0
打印 上一主题 下一主题
收起左侧

ARM历程十—钟表设计

[复制链接]
跳转到指定楼层
楼主
ID:71259 发表于 2014-12-29 20:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序视频:自制钟表

#include "S3C2440addr.h"
#include "math.h"
#define pi 3.141593


U16 SEC, MIN, HOUR, TmpSEC_10, TmpMIN_10, TmpHOUR_10,TmpSEC_1,TmpMIN_1,TmpHOUR_1;
U16 SEC_x, SEC_y, MIN_x, MIN_y, HOUR_x, HOUR_y, OldMIN=10000;
U16 PandColor_big[30][30];
U16 PandColor_sml[30][30];

extern U16 Flag;
extern U16 fz;
extern const unsigned char gImage_goback[7442];
extern const unsigned char gImage_yy[147968];
extern const unsigned char gImage_back[261120];

void DiyClk(void)
{
  
  U16 k;   
  LCD_Img(gImage_back);                         //画背景图片
  Paint_Clock(52,0,272,272,gImage_yy);        //画钟表面板
  Paint_Bmp_Rnd(200,95,61,61,2,30,gImage_goback);//画返回图标(右下角)

  ReadPand( 347, 135, 5, 1 );//读以点(347,135)为圆心 5 为半径的
                            //像素点的信息,存入数组PandColor_big中
               
  ReadPand( 311, 56, 5, 0 ); //读以点(347,135)为圆心 5 为半径的
                               //像素点的信息,存入数组PandColor_sml中
  fz = 1 ;

  while(Flag == 1)                               //Flag == 1表示进入时针子程序
    {
//////////////////////////////////////////////////////////////  
     TmpSEC_1 = rBCDSEC & 0x0f;  
     TmpSEC_10 = rBCDSEC >> 4;
     TmpMIN_1 = rBCDMIN & 0x0f;
     TmpMIN_10 = rBCDMIN >> 4;   
     TmpHOUR_1 = rBCDHOUR & 0x0f;
     TmpHOUR_10 = rBCDHOUR >> 4;
     TmpHOUR_10 &= 0x0003;                       
   
     SEC = (TmpSEC_10*10 + TmpSEC_1);
     MIN = (TmpMIN_10*10 + TmpMIN_1);
     HOUR = (TmpHOUR_10*10 + TmpHOUR_1);//把时间处理成常见的int
                                        //变量形式,方便计算转角
///////////////////////////////////////////////////////////////   

///////////////////////////////////////////////////////////////   
     SEC_x = 240 + (int)(107*sin(pi*SEC/30.0));
     SEC_y = 135 - (int)(107*cos(pi*SEC/30.0));   
   
   
     MIN_x = 240 + (int)(90*sin(pi*MIN/30.0));
     MIN_y = 135 - (int)(90*cos(pi*MIN/30.0));//把角度转化为坐标
   
   
     HOUR_x = 240 + (int)(60*sin(pi*(30*HOUR+MIN/2)/180));
     HOUR_y = 135 - (int)(60*cos(pi*(30*HOUR+MIN/2)/180));
///////////////////////////////////////////////////////////////   
   
///////////////////////////////////////////////////////////////   
  if ( MIN != OldMIN )         //每分钟刷新一次钟面
     {
      
      
     
    Paint_Clock(52,0,272,272,gImage_yy); //显示表盘图片   
   
     heavyLine( MIN_x, MIN_y,0x3e0);      //分针的位置和着色   
   
     heavyLine( HOUR_x, HOUR_y,0x01f);    //时针的位置和着色   
     
    Pand(240,135,8,0x9871);              //钟的中心位置显示一个
                                          
    //半径为8 着色为0x9871
                                          
    //的小圆斑   
                                       
      }
///////////////////////////////////////////////////////////////      
    RedPix( SEC_x, SEC_y );      //秒,在对应位置打点

  if ( SEC % 5 == 0 )   
    WritePand( SEC_x, SEC_y, 5 ,0 );//将数组PandColor_big中的像素信息写入
                                    //以(SEC_x,SEC_y)为圆心5 为半径的显示
                                    //缓冲区内
                           
    else
   
   
    WritePand( SEC_x, SEC_y, 5 ,1 );//将数组PandColor_sml中的像素信息写入
                                    //以(SEC_x,SEC_y)为圆心5 为半径的显示
                                    //缓冲区内
     
    OldMIN = MIN ;
///////////////////////////////////////////////////////////////////     
    }
     
    OldMIN = 10000;
      
    fz = 0 ;   
  }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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