找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于无线蓝牙的数字时钟 单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:319688 发表于 2020-10-8 21:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
匆忙之中做了这个用来抵挡导师的项目库,略有粗糙还请见谅,以后有时间画板子??不会吧哈哈哈


/************************************************/
改时间用的是蓝牙调试宝
输入格式:HEX(默认)
输入内容:20100820585404
时间为2020年10月8日20点58分54秒星期4

引脚接线说明
     //LCD1602引脚定义
    #define LCDDATA P0
    sbit RS = P2^3;
    sbit RW = P2^4;
    sbit CS = P2^5;
    //DS1302引脚定义
    sbit    RST = P1^2;
    sbit    DAT = P1^1;
    sbit    CLK = P1^0;

匆忙之中做出来的这个,有时间画板子加别的功能吧

单片机源程序如下:
  1. #include <reg52.h>
  2. #include "DS1302.h"
  3. #include "LCD1602.h"
  4. /*
  5. *在reg52头文件定义了uchar
  6.         //LCD1602引脚定义
  7.         #define LCDDATA P0
  8.         sbit RS = P2^3;
  9.         sbit RW = P2^4;
  10.         sbit CS = P2^5;
  11.         //DS1302引脚定义
  12.         sbit    RST = P1^2;
  13.         sbit    DAT = P1^1;
  14.         sbit    CLK = P1^0;
  15. */
  16. #define FOSC 11059200L
  17. #define BAUD 9600       //UART baudrate
  18. #define T1MS (65536-FOSC/12/1000)

  19. uchar count = 200; //中断循环标志位
  20. uchar flag = 0;
  21. uchar uart_receive_buffer[7]={0};
  22. //sbit led = P1^5;
  23. void DS1302_set_time(void);
  24. //定时器初始化
  25. void Init_timer1(void)
  26. {
  27.         TMOD = 0x10;            //set timer1 as mode1 (16-bit)
  28.     TL1 = T1MS;             //initial timer1 low byte
  29.     TH1 = T1MS >> 8;        //initial timer1 high byte
  30.     TR1 = 1;                //timer1 start running
  31.     ET1 = 1;                //enable timer1 interrupt
  32.     EA = 1;                 //open global interrupt switch
  33. }

  34. //定时器处理函数
  35. void time1(void) interrupt 3
  36. {                                
  37.     TL1 = T1MS;
  38.     TH1 = T1MS >> 8;
  39.         //count--;
  40.         if(count-- ==  0)
  41.         {
  42.                 count = 200;
  43.                 //led = ~led;
  44.                 DS1302_read_time();  //读取时间
  45.                 LCD_time_buffer[0]=(time_buf[0]>>4); //年   
  46.                 LCD_time_buffer[1]=(time_buf[0]&0x0f);
  47.    
  48.                 LCD_time_buffer[2]=(time_buf[1]>>4);   
  49.                 LCD_time_buffer[3]=(time_buf[1]&0x0f);
  50.   
  51.                 LCD_time_buffer[4]=(time_buf[2]>>4); //月  
  52.                 LCD_time_buffer[5]=(time_buf[2]&0x0f);
  53.    

  54.                 LCD_time_buffer[6]=(time_buf[3]>>4); //日   
  55.                 LCD_time_buffer[7]=(time_buf[3]&0x0f);
  56.    
  57.                 LCD_time_buffer[14]=(time_buf[7]&0x07); //星期
  58.    
  59.                    //第2行显示  
  60.                 LCD_time_buffer[8]=(time_buf[4]>>4); //时   
  61.                 LCD_time_buffer[9]=(time_buf[4]&0x0f);   

  62.                 LCD_time_buffer[10]=(time_buf[5]>>4); //分   
  63.                 LCD_time_buffer[11]=(time_buf[5]&0x0f);   

  64.                 LCD_time_buffer[12]=(time_buf[6]>>4); //秒   
  65.                 LCD_time_buffer[13]=(time_buf[6]&0x0f);       
  66.         }
  67. }
  68. //串口中断初始化
  69. void Usart_Init(void)
  70. {
  71.         SCON = 0x50;
  72.     TL2 = RCAP2L = (65536-(FOSC/32/BAUD)); //Set auto-reload vaule
  73.     TH2 = RCAP2H = (65536-(FOSC/32/BAUD)) >> 8;
  74.         T2CON = 0x34;  //启动定时器2
  75.         ES = 1;  //开串口中断
  76.         EA = 1;  //开总中断       
  77. }
  78. //串口处理函数
  79. void Usart_receive(void) interrupt 4
  80. {

  81.         EA = 0;
  82.         if(RI == 1)
  83.         {
  84.                 RI = 0;
  85.                 uart_receive_buffer[flag] = SBUF;
  86.                 //led = ~led;
  87.                 if(flag ==6)
  88.                 {
  89.                         flag = 0;
  90.                         DS1302_set_time();
  91.                 }
  92.                 else
  93.                 {
  94.                         flag++;
  95.                 }
  96.         }
  97.         EA = 1;       
  98. }
  99. void DS1302_set_time(void)
  100. {
  101.         DS1302_write_byte(ds1302_control_add,0x00);                        //关闭写保护
  102.         DS1302_write_byte(ds1302_sec_add,0x80);                                //暂停时钟
  103.         DS1302_write_byte(ds1302_charger_add,0xa9);            //涓流充电
  104.         DS1302_write_byte(ds1302_year_add,uart_receive_buffer[0]);                //年
  105.         DS1302_write_byte(ds1302_month_add,uart_receive_buffer[1]);                //月
  106.         DS1302_write_byte(ds1302_date_add,uart_receive_buffer[2]);                //日
  107.         DS1302_write_byte(ds1302_hr_add,uart_receive_buffer[3]);                //时
  108.         DS1302_write_byte(ds1302_min_add,uart_receive_buffer[4]);                //分
  109.         DS1302_write_byte(ds1302_sec_add,uart_receive_buffer[5]);                //秒
  110.         DS1302_write_byte(ds1302_day_add,uart_receive_buffer[6]);                //周
  111.         DS1302_write_byte(ds1302_control_add,0x80);                        //打开写保护
  112. }
  113. void main(void)
  114. {
  115.         Delay_xms(50);
  116.         LCD_Init();
  117.         LCD_clear();
  118.         DSInit();
  119.         Delay_xms(10);
  120.         //DS1302_write_time();
  121.         Init_timer1();
  122.         Usart_Init();

  123.         while(1)
  124.         {
  125.                 Display();
  126. //                Delay_xms(500);
  127. //                LCD_write_char(0,0,flag);
  128. //                Delay_xms(500);
  129. //                flag++;
  130. //                if(flag>6)
  131. //                        flag = 0;

  132.         }
  133. }
复制代码

所有资料51hei提供下载:
2020106项目库.zip (45.02 KB, 下载次数: 13)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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