找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这是一个RTC显示可转动表盘的时钟程序

[复制链接]
跳转到指定楼层
楼主
ID:730071 发表于 2020-4-20 23:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
它可以动态显示表盘的转动。

单片机源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"  
  3. #include "usart.h"  
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "usmart.h"
  7. #include "rtc.h"
  8. #include "stdio.h"
  9. #include "string.h"
  10. #include "math.h"
  11. #include "beep.h"

  12. extern const unsigned char gImage_pic16[153600];
  13. #define   PI  3.14
  14. #define   CLOCK_X  100
  15. #define   CLOCK_Y   180
  16. int main(void)
  17. {

  18.         RTC_TimeTypeDef RTC_TimeStruct;
  19.         RTC_DateTypeDef RTC_DateStruct;

  20.   int i;
  21.         u8 t=0;
  22.         u8 sh[10];
  23.         u8 ch[10];
  24.         u8 zh[10];
  25.         
  26.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
  27.         delay_init(168);      //初始化延时函数
  28.         uart_init(115200);                //初始化串口波特率为115200
  29.         
  30.         usmart_dev.init(84);         //初始化USMART        
  31.         LED_Init();                                          //初始化LED
  32.          LCD_Init();                                          //初始化LCD
  33.         My_RTC_Init();                                 //初始化RTC
  34. //BEEP_Init();
  35.    
  36.         RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0);                //配置WAKE UP中断,1秒钟中断一次
  37.         
  38.         POINT_COLOR = LIGHTBLUE;
  39.   show_pic_rgb565(0,0,240,320, gImage_pic16);
  40.         
  41.         for(i=0; i<10; i++)
  42.         LCD_Draw_Circle(100,180,i);
  43. RTC_Set_AlarmA(2,10,23,30);                //设置闹钟时间(按星期闹铃,24小时制)

  44.                 //画圆
  45.   LCD_Draw_Circle(CLOCK_X,CLOCK_Y,99);
  46.   LCD_Draw_Circle(CLOCK_X,CLOCK_Y,100);
  47.         LCD_Draw_Circle(CLOCK_X,CLOCK_Y,101);         
  48.                          for(i=0;i<360;i+=6)
  49.         {        
  50.                 if(i%30)
  51.           //画线 -->画任意角度的直线
  52.    //x1,y1:起点坐标
  53.    //x2,y2:终点坐标  
  54.    //void LCD_Draw_Line(u16 x1, u16 y1, u16 x2, u16 y2,u16 color)
  55.                         LCD_Draw_Line(CLOCK_X+95*sin(i*PI/180), CLOCK_Y-95*cos(i*PI/180),  CLOCK_X+100*sin(i*PI/180), CLOCK_Y-100*cos(i*PI/180),   WHITE);//小时的刻度
  56.                 else
  57.                         LCD_Draw_Line(CLOCK_X+85*sin(i*PI/180), CLOCK_Y-85*cos(i*PI/180), CLOCK_X+100*sin(i*PI/180), CLOCK_Y-100*cos(i*PI/180),    WHITE);//分的刻度
  58.                
  59.         }

  60.                 printf("%s\t%s\r\n",__DATE__,__TIME__);
  61.                                         //BEEP = 1;
  62.         //        GPIO_SetBits(GPIOF,GPIO_Pin_8);   //BEEP引脚拉高, 等同BEEP=1;
  63.         //        delay_ms(300);                                                                                 //延时300ms

  64.           while(1)
  65.         {               
  66.                 t++;
  67.                 if((t%10)==0)        //每100ms更新一次显示数据
  68.                 {
  69.                 //        lcd_show_time();
  70.                 RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct);
  71.                 sprintf((char *)sh,"Time:%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds );
  72.                 LCD_ShowString(0,0,200,20,24,sh);        
  73.                
  74.                 RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);
  75.                 sprintf((char *)ch,"Data:20%02d-%02d-%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
  76.           LCD_ShowString(0,24,200,20,24,ch);        
  77.                 sprintf((char *)zh,"Week:%d",RTC_DateStruct.RTC_WeekDay);
  78.           LCD_ShowString(0,48,200,20,24,zh);        
  79.                  BEEP = 1;
  80.                 delay_xms(100);
  81.                         delay_xms(100);
  82.                
  83.                          BEEP = 0;               
  84.                         
  85.                                 //_window_obj* twin=0;
  86.                         
  87.                         }
  88.      }
  89. }
复制代码

所有程序51hei提供下载:
RTC.7z (966.26 KB, 下载次数: 7)


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

使用道具 举报

沙发
ID:1 发表于 2020-4-22 02:12 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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